mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-16 12:51:47 +00:00
Fixed AVRISP project timeouts not checking for the correct timeout period (thanks to Carl Ott).
This commit is contained in:
parent
8b75659563
commit
37c9ba7fa9
@ -68,6 +68,7 @@
|
|||||||
* - Fixed USB_CurrentMode not being reset to USB_MODE_NONE when the USB interface is shut down and both Host and Device modes can be
|
* - Fixed USB_CurrentMode not being reset to USB_MODE_NONE when the USB interface is shut down and both Host and Device modes can be
|
||||||
* used (thanks to Daniel Levy)
|
* used (thanks to Daniel Levy)
|
||||||
* - Fixed TeensyHID bootloader not enumerating to the host correctly
|
* - Fixed TeensyHID bootloader not enumerating to the host correctly
|
||||||
|
* - Fixed AVRISP project timeouts not checking for the correct timeout period (thanks to Carl Ott)
|
||||||
*
|
*
|
||||||
* \section Sec_ChangeLog091122 Version 091122
|
* \section Sec_ChangeLog091122 Version 091122
|
||||||
*
|
*
|
||||||
|
@ -123,16 +123,25 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
|
|||||||
case PROG_MODE_WORD_VALUE_MASK:
|
case PROG_MODE_WORD_VALUE_MASK:
|
||||||
case PROG_MODE_PAGED_VALUE_MASK:
|
case PROG_MODE_PAGED_VALUE_MASK:
|
||||||
TCNT0 = 0;
|
TCNT0 = 0;
|
||||||
|
TIFR0 = (1 << OCF1A);
|
||||||
|
|
||||||
|
uint8_t TimeoutMS = TARGET_BUSY_TIMEOUT_MS;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
SPI_SendByte(ReadMemCommand);
|
SPI_SendByte(ReadMemCommand);
|
||||||
SPI_SendByte(PollAddress >> 8);
|
SPI_SendByte(PollAddress >> 8);
|
||||||
SPI_SendByte(PollAddress & 0xFF);
|
SPI_SendByte(PollAddress & 0xFF);
|
||||||
}
|
|
||||||
while ((SPI_TransferByte(0x00) != PollValue) && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));
|
|
||||||
|
|
||||||
if (TCNT0 >= TARGET_BUSY_TIMEOUT_MS)
|
if (TIFR0 & (1 << OCF1A))
|
||||||
|
{
|
||||||
|
TIFR0 = (1 << OCF1A);
|
||||||
|
TimeoutMS--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while ((SPI_TransferByte(0x00) != PollValue) && TimeoutMS);
|
||||||
|
|
||||||
|
if (!(TimeoutMS))
|
||||||
ProgrammingStatus = STATUS_CMD_TOUT;
|
ProgrammingStatus = STATUS_CMD_TOUT;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -153,6 +162,9 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
|
|||||||
uint8_t ISPTarget_WaitWhileTargetBusy(void)
|
uint8_t ISPTarget_WaitWhileTargetBusy(void)
|
||||||
{
|
{
|
||||||
TCNT0 = 0;
|
TCNT0 = 0;
|
||||||
|
TIFR0 = (1 << OCF1A);
|
||||||
|
|
||||||
|
uint8_t TimeoutMS = TARGET_BUSY_TIMEOUT_MS;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -160,10 +172,16 @@ uint8_t ISPTarget_WaitWhileTargetBusy(void)
|
|||||||
SPI_SendByte(0x00);
|
SPI_SendByte(0x00);
|
||||||
|
|
||||||
SPI_SendByte(0x00);
|
SPI_SendByte(0x00);
|
||||||
}
|
|
||||||
while ((SPI_ReceiveByte() & 0x01) && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));
|
|
||||||
|
|
||||||
if (TCNT0 >= TARGET_BUSY_TIMEOUT_MS)
|
if (TIFR0 & (1 << OCF1A))
|
||||||
|
{
|
||||||
|
TIFR0 = (1 << OCF1A);
|
||||||
|
TimeoutMS--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while ((SPI_ReceiveByte() & 0x01) && TimeoutMS);
|
||||||
|
|
||||||
|
if (!(TimeoutMS))
|
||||||
return STATUS_RDY_BSY_TOUT;
|
return STATUS_RDY_BSY_TOUT;
|
||||||
else
|
else
|
||||||
return STATUS_CMD_OK;
|
return STATUS_CMD_OK;
|
||||||
|
@ -72,9 +72,12 @@ void NVMTarget_SendAddress(const uint32_t AbsoluteAddress)
|
|||||||
bool NVMTarget_WaitWhileNVMControllerBusy(void)
|
bool NVMTarget_WaitWhileNVMControllerBusy(void)
|
||||||
{
|
{
|
||||||
TCNT0 = 0;
|
TCNT0 = 0;
|
||||||
|
TIFR0 = (1 << OCF1A);
|
||||||
|
|
||||||
|
uint8_t TimeoutMS = PDI_NVM_TIMEOUT_MS;
|
||||||
|
|
||||||
/* Poll the NVM STATUS register while the NVM controller is busy */
|
/* Poll the NVM STATUS register while the NVM controller is busy */
|
||||||
while (TCNT0 < NVM_BUSY_TIMEOUT_MS)
|
while (TimeoutMS)
|
||||||
{
|
{
|
||||||
/* Send a LDS command to read the NVM STATUS register to check the BUSY flag */
|
/* Send a LDS command to read the NVM STATUS register to check the BUSY flag */
|
||||||
PDITarget_SendByte(PDI_CMD_LDS | (PDI_DATSIZE_4BYTES << 2));
|
PDITarget_SendByte(PDI_CMD_LDS | (PDI_DATSIZE_4BYTES << 2));
|
||||||
@ -83,6 +86,12 @@ bool NVMTarget_WaitWhileNVMControllerBusy(void)
|
|||||||
/* Check to see if the BUSY flag is still set */
|
/* Check to see if the BUSY flag is still set */
|
||||||
if (!(PDITarget_ReceiveByte() & (1 << 7)))
|
if (!(PDITarget_ReceiveByte() & (1 << 7)))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (TIFR0 & (1 << OCF1A))
|
||||||
|
{
|
||||||
|
TIFR0 = (1 << OCF1A);
|
||||||
|
TimeoutMS--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -311,14 +311,23 @@ void PDITarget_SendBreak(void)
|
|||||||
bool PDITarget_WaitWhileNVMBusBusy(void)
|
bool PDITarget_WaitWhileNVMBusBusy(void)
|
||||||
{
|
{
|
||||||
TCNT0 = 0;
|
TCNT0 = 0;
|
||||||
|
TIFR0 = (1 << OCF1A);
|
||||||
|
|
||||||
|
uint8_t TimeoutMS = PDI_NVM_TIMEOUT_MS;
|
||||||
|
|
||||||
/* Poll the STATUS register to check to see if NVM access has been enabled */
|
/* Poll the STATUS register to check to see if NVM access has been enabled */
|
||||||
while (TCNT0 < PDI_NVM_TIMEOUT_MS)
|
while (TimeoutMS)
|
||||||
{
|
{
|
||||||
/* Send the LDCS command to read the PDI STATUS register to see the NVM bus is active */
|
/* Send the LDCS command to read the PDI STATUS register to see the NVM bus is active */
|
||||||
PDITarget_SendByte(PDI_CMD_LDCS | PDI_STATUS_REG);
|
PDITarget_SendByte(PDI_CMD_LDCS | PDI_STATUS_REG);
|
||||||
if (PDITarget_ReceiveByte() & PDI_STATUS_NVM)
|
if (PDITarget_ReceiveByte() & PDI_STATUS_NVM)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (TIFR0 & (1 << OCF1A))
|
||||||
|
{
|
||||||
|
TIFR0 = (1 << OCF1A);
|
||||||
|
TimeoutMS--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -70,7 +70,16 @@
|
|||||||
static inline void V2Protocol_DelayMS(uint8_t DelayMS)
|
static inline void V2Protocol_DelayMS(uint8_t DelayMS)
|
||||||
{
|
{
|
||||||
TCNT0 = 0;
|
TCNT0 = 0;
|
||||||
while (TCNT0 < DelayMS);
|
TIFR0 = (1 << OCF1A);
|
||||||
|
|
||||||
|
while (DelayMS)
|
||||||
|
{
|
||||||
|
if (TIFR0 & (1 << OCF1A))
|
||||||
|
{
|
||||||
|
TIFR0 = (1 << OCF1A);
|
||||||
|
DelayMS--;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* External Variables: */
|
/* External Variables: */
|
||||||
|
@ -66,7 +66,7 @@ MCU = at90usb1287
|
|||||||
# Target board (see library "Board Types" documentation, USER or blank for projects not requiring
|
# Target board (see library "Board Types" documentation, USER or blank 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 = XPLAIN
|
BOARD = USBKEY
|
||||||
|
|
||||||
|
|
||||||
# Processor frequency.
|
# Processor frequency.
|
||||||
|
Loading…
Reference in New Issue
Block a user