Fixed AVRISP project timeouts not checking for the correct timeout period (thanks...
[pub/lufa.git] / Projects / AVRISP / Lib / ISPTarget.c
index fbe8ad3..ce364c6 100644 (file)
@@ -123,16 +123,25 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
                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
@@ -153,6 +162,9 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
 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
@@ -160,10 +172,16 @@ uint8_t ISPTarget_WaitWhileTargetBusy(void)
                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