Oops - missed a few references to the old global TimeoutMSRemaining counter in ISPTar...
authorDean Camera <dean@fourwalledcubicle.com>
Sat, 20 Feb 2010 12:17:48 +0000 (12:17 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Sat, 20 Feb 2010 12:17:48 +0000 (12:17 +0000)
Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c

index 267e518..51ba1ec 100644 (file)
@@ -111,7 +111,8 @@ void ISPTarget_ChangeTargetResetLine(const bool ResetTarget)
 uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint16_t PollAddress, const uint8_t PollValue,\r
                                       const uint8_t DelayMS, const uint8_t ReadMemCommand)\r
 {\r
 uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint16_t PollAddress, const uint8_t PollValue,\r
                                       const uint8_t DelayMS, const uint8_t ReadMemCommand)\r
 {\r
-       uint8_t ProgrammingStatus = STATUS_CMD_OK;\r
+       uint8_t ProgrammingStatus  = STATUS_CMD_OK;\r
+       uint8_t TimeoutMSRemaining = 100;\r
 \r
        /* Determine method of Programming Complete check */\r
        switch (ProgrammingMode & ~(PROG_MODE_PAGED_WRITES_MASK | PROG_MODE_COMMIT_PAGE_MASK))\r
 \r
        /* Determine method of Programming Complete check */\r
        switch (ProgrammingMode & ~(PROG_MODE_PAGED_WRITES_MASK | PROG_MODE_COMMIT_PAGE_MASK))\r
@@ -124,6 +125,13 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
                case PROG_MODE_PAGED_VALUE_MASK:\r
                        do\r
                        {\r
                case PROG_MODE_PAGED_VALUE_MASK:\r
                        do\r
                        {\r
+                               /* Manage software timeout */\r
+                               if (TIFR0 & (1 << OCF0A))\r
+                               {\r
+                                       TIFR0 |= (1 << OCF0A);\r
+                                       TimeoutMSRemaining--;\r
+                               }\r
+\r
                                SPI_SendByte(ReadMemCommand);\r
                                SPI_SendByte(PollAddress >> 8);\r
                                SPI_SendByte(PollAddress & 0xFF);\r
                                SPI_SendByte(ReadMemCommand);\r
                                SPI_SendByte(PollAddress >> 8);\r
                                SPI_SendByte(PollAddress & 0xFF);\r
@@ -139,9 +147,6 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
                        ProgrammingStatus = ISPTarget_WaitWhileTargetBusy();\r
                        break;\r
        }\r
                        ProgrammingStatus = ISPTarget_WaitWhileTargetBusy();\r
                        break;\r
        }\r
-       \r
-       if (ProgrammingStatus == STATUS_CMD_OK)\r
-         TimeoutMSRemaining = COMMAND_TIMEOUT_MS;\r
 \r
        return ProgrammingStatus;\r
 }\r
 \r
        return ProgrammingStatus;\r
 }\r
@@ -153,11 +158,19 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
  */\r
 uint8_t ISPTarget_WaitWhileTargetBusy(void)\r
 {\r
  */\r
 uint8_t ISPTarget_WaitWhileTargetBusy(void)\r
 {\r
+       uint8_t TimeoutMSRemaining = 100;\r
+\r
        do\r
        {\r
        do\r
        {\r
+               /* Manage software timeout */\r
+               if (TIFR0 & (1 << OCF0A))\r
+               {\r
+                       TIFR0 |= (1 << OCF0A);\r
+                       TimeoutMSRemaining--;\r
+               }       \r
+\r
                SPI_SendByte(0xF0);\r
                SPI_SendByte(0x00);\r
                SPI_SendByte(0xF0);\r
                SPI_SendByte(0x00);\r
-\r
                SPI_SendByte(0x00);\r
        }\r
        while ((SPI_ReceiveByte() & 0x01) && TimeoutMSRemaining);\r
                SPI_SendByte(0x00);\r
        }\r
        while ((SPI_ReceiveByte() & 0x01) && TimeoutMSRemaining);\r