mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-16 12:51:47 +00:00
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…
Reference in New Issue
Block a user