* - 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\r
* used (thanks to Daniel Levy)\r
* - Fixed TeensyHID bootloader not enumerating to the host correctly\r
+ * - Fixed AVRISP project timeouts not checking for the correct timeout period (thanks to Carl Ott)\r
*\r
* \section Sec_ChangeLog091122 Version 091122\r
*\r
case PROG_MODE_WORD_VALUE_MASK:\r
case PROG_MODE_PAGED_VALUE_MASK:\r
TCNT0 = 0;\r
+ TIFR0 = (1 << OCF1A);\r
+ \r
+ uint8_t TimeoutMS = TARGET_BUSY_TIMEOUT_MS;\r
\r
do\r
{\r
SPI_SendByte(ReadMemCommand);\r
SPI_SendByte(PollAddress >> 8);\r
- SPI_SendByte(PollAddress & 0xFF); \r
+ SPI_SendByte(PollAddress & 0xFF);\r
+\r
+ if (TIFR0 & (1 << OCF1A))\r
+ {\r
+ TIFR0 = (1 << OCF1A);\r
+ TimeoutMS--;\r
+ }\r
}\r
- while ((SPI_TransferByte(0x00) != PollValue) && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));\r
+ while ((SPI_TransferByte(0x00) != PollValue) && TimeoutMS);\r
\r
- if (TCNT0 >= TARGET_BUSY_TIMEOUT_MS)\r
+ if (!(TimeoutMS))\r
ProgrammingStatus = STATUS_CMD_TOUT;\r
\r
break; \r
uint8_t ISPTarget_WaitWhileTargetBusy(void)\r
{\r
TCNT0 = 0;\r
+ TIFR0 = (1 << OCF1A);\r
+ \r
+ uint8_t TimeoutMS = TARGET_BUSY_TIMEOUT_MS;\r
\r
do\r
{\r
SPI_SendByte(0x00);\r
\r
SPI_SendByte(0x00);\r
+\r
+ if (TIFR0 & (1 << OCF1A))\r
+ {\r
+ TIFR0 = (1 << OCF1A);\r
+ TimeoutMS--;\r
+ }\r
}\r
- while ((SPI_ReceiveByte() & 0x01) && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));\r
+ while ((SPI_ReceiveByte() & 0x01) && TimeoutMS);\r
\r
- if (TCNT0 >= TARGET_BUSY_TIMEOUT_MS)\r
+ if (!(TimeoutMS))\r
return STATUS_RDY_BSY_TOUT;\r
else\r
return STATUS_CMD_OK;\r
bool NVMTarget_WaitWhileNVMControllerBusy(void)\r
{\r
TCNT0 = 0;\r
-\r
+ TIFR0 = (1 << OCF1A);\r
+ \r
+ uint8_t TimeoutMS = PDI_NVM_TIMEOUT_MS;\r
+ \r
/* Poll the NVM STATUS register while the NVM controller is busy */\r
- while (TCNT0 < NVM_BUSY_TIMEOUT_MS)\r
+ while (TimeoutMS)\r
{\r
/* Send a LDS command to read the NVM STATUS register to check the BUSY flag */\r
PDITarget_SendByte(PDI_CMD_LDS | (PDI_DATSIZE_4BYTES << 2));\r
/* Check to see if the BUSY flag is still set */\r
if (!(PDITarget_ReceiveByte() & (1 << 7)))\r
return true;\r
+\r
+ if (TIFR0 & (1 << OCF1A))\r
+ {\r
+ TIFR0 = (1 << OCF1A);\r
+ TimeoutMS--;\r
+ }\r
}\r
\r
return false;\r
bool PDITarget_WaitWhileNVMBusBusy(void)\r
{\r
TCNT0 = 0;\r
-\r
+ TIFR0 = (1 << OCF1A);\r
+ \r
+ uint8_t TimeoutMS = PDI_NVM_TIMEOUT_MS;\r
+ \r
/* Poll the STATUS register to check to see if NVM access has been enabled */\r
- while (TCNT0 < PDI_NVM_TIMEOUT_MS)\r
+ while (TimeoutMS)\r
{\r
/* Send the LDCS command to read the PDI STATUS register to see the NVM bus is active */\r
PDITarget_SendByte(PDI_CMD_LDCS | PDI_STATUS_REG);\r
if (PDITarget_ReceiveByte() & PDI_STATUS_NVM)\r
return true;\r
+\r
+ if (TIFR0 & (1 << OCF1A))\r
+ {\r
+ TIFR0 = (1 << OCF1A);\r
+ TimeoutMS--;\r
+ }\r
}\r
\r
return false;\r
static inline void V2Protocol_DelayMS(uint8_t DelayMS)\r
{\r
TCNT0 = 0;\r
- while (TCNT0 < DelayMS);\r
+ TIFR0 = (1 << OCF1A);\r
+\r
+ while (DelayMS)\r
+ {\r
+ if (TIFR0 & (1 << OCF1A))\r
+ {\r
+ TIFR0 = (1 << OCF1A);\r
+ DelayMS--;\r
+ }\r
+ }\r
}
\r
/* External Variables: */\r
# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
# "Board" inside the application directory.\r
-BOARD = XPLAIN\r
+BOARD = USBKEY\r
\r
\r
# Processor frequency.\r