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