forked from mfulz_github/qmk_firmware
		
	Slow AVRISP-MKII clone PDI/TPI programming speed back to 250KHz due to issues with the XPLAINBridge when PDI programming at faster rates.
Speed up XMEGANVM_WaitWhileNVMControllerBusy() by preloading the status register address into the pointer register of the target's NVM controller and then reading via a faster indirect load command.
This commit is contained in:
		
							parent
							
								
									002cd6df49
								
							
						
					
					
						commit
						a9f313afa9
					
				@ -102,7 +102,6 @@
 | 
				
			|||||||
  *  - Fixed USBtoSerial and XPLAINBridge demos discarding data from the PC if the send buffer becomes full
 | 
					  *  - Fixed USBtoSerial and XPLAINBridge demos discarding data from the PC if the send buffer becomes full
 | 
				
			||||||
  *  - Fixed broken input in the MagStripe reader project due to an incorrect HID report descriptor
 | 
					  *  - Fixed broken input in the MagStripe reader project due to an incorrect HID report descriptor
 | 
				
			||||||
  *  - Fixed incorrect PollingIntervalMS values in the demo/project/bootloader endpoint descriptors (thanks to MCS Electronics)
 | 
					  *  - Fixed incorrect PollingIntervalMS values in the demo/project/bootloader endpoint descriptors (thanks to MCS Electronics)
 | 
				
			||||||
  *  - Fixed PDI/TPI programming speed of ~250KHz in the AVRISP-MKII Clone project, instead of the desired 500KHz (thanks to Tom Light)
 | 
					 | 
				
			||||||
  *
 | 
					  *
 | 
				
			||||||
  *  \section Sec_ChangeLog100807 Version 100807
 | 
					  *  \section Sec_ChangeLog100807 Version 100807
 | 
				
			||||||
  *  <b>New:</b>
 | 
					  *  <b>New:</b>
 | 
				
			||||||
 | 
				
			|||||||
@ -96,13 +96,15 @@ bool XMEGANVM_WaitWhileNVMBusBusy(void)
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
bool XMEGANVM_WaitWhileNVMControllerBusy(void)
 | 
					bool XMEGANVM_WaitWhileNVMControllerBusy(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						/* Preload the pointer register with the NVM STATUS register address to check the BUSY flag */
 | 
				
			||||||
 | 
						XPROGTarget_SendByte(PDI_CMD_ST | (PDI_POINTER_DIRECT << 2) | PDI_DATSIZE_4BYTES);
 | 
				
			||||||
 | 
						XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_STATUS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Poll the NVM STATUS register while the NVM controller is busy */
 | 
						/* Poll the NVM STATUS register while the NVM controller is busy */
 | 
				
			||||||
	for (;;)
 | 
						for (;;)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		/* Send a LDS command to read the NVM STATUS register to check the BUSY flag */
 | 
							/* Fetch the current status value via the pointer register (without auto-increment afterwards) */
 | 
				
			||||||
		XPROGTarget_SendByte(PDI_CMD_LDS | (PDI_DATSIZE_4BYTES << 2));
 | 
							XPROGTarget_SendByte(PDI_CMD_LD | (PDI_POINTER_INDIRECT << 2) | PDI_DATSIZE_1BYTE);
 | 
				
			||||||
		XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_STATUS);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		uint8_t StatusRegister = XPROGTarget_ReceiveByte();
 | 
							uint8_t StatusRegister = XPROGTarget_ReceiveByte();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* We might have timed out waiting for the status register read response, check here */
 | 
							/* We might have timed out waiting for the status register read response, check here */
 | 
				
			||||||
 | 
				
			|||||||
@ -56,7 +56,7 @@
 | 
				
			|||||||
		#endif
 | 
							#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/** Serial carrier TPI/PDI speed when hardware TPI/PDI mode is used. */
 | 
							/** Serial carrier TPI/PDI speed when hardware TPI/PDI mode is used. */
 | 
				
			||||||
		#define XPROG_HARDWARE_SPEED       500000
 | 
							#define XPROG_HARDWARE_SPEED       250000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/** Total number of bits in a single USART frame. */
 | 
							/** Total number of bits in a single USART frame. */
 | 
				
			||||||
		#define BITS_IN_USART_FRAME        12
 | 
							#define BITS_IN_USART_FRAME        12
 | 
				
			||||||
 | 
				
			|||||||
@ -60,13 +60,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# MCU name
 | 
					# MCU name
 | 
				
			||||||
MCU = at90usb1287
 | 
					MCU = at90usb162
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Target board (see library "Board Types" documentation, NONE for projects not requiring
 | 
					# Target board (see library "Board Types" documentation, NONE for projects not requiring
 | 
				
			||||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
					# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
				
			||||||
# "Board" inside the application directory.
 | 
					# "Board" inside the application directory.
 | 
				
			||||||
BOARD = USBKEY
 | 
					BOARD = USBTINYMKII
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Processor frequency.
 | 
					# Processor frequency.
 | 
				
			||||||
@ -80,7 +80,7 @@ BOARD = USBKEY
 | 
				
			|||||||
#     does not *change* the processor frequency - it should merely be updated to
 | 
					#     does not *change* the processor frequency - it should merely be updated to
 | 
				
			||||||
#     reflect the processor speed set externally so that the code can use accurate
 | 
					#     reflect the processor speed set externally so that the code can use accurate
 | 
				
			||||||
#     software delays.
 | 
					#     software delays.
 | 
				
			||||||
F_CPU = 8000000
 | 
					F_CPU = 16000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Input clock frequency.
 | 
					# Input clock frequency.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user