From 10b9394a8b6c9ced4e6df7687a3d5424de01157a Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sat, 20 Feb 2010 12:17:48 +0000 Subject: [PATCH] Oops - missed a few references to the old global TimeoutMSRemaining counter in ISPTarget.c of the AVRISP-MKII clone project. --- Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c index 267e518502..51ba1ec971 100644 --- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c +++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c @@ -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, const uint8_t DelayMS, const uint8_t ReadMemCommand) { - uint8_t ProgrammingStatus = STATUS_CMD_OK; + uint8_t ProgrammingStatus = STATUS_CMD_OK; + uint8_t TimeoutMSRemaining = 100; /* Determine method of Programming Complete check */ switch (ProgrammingMode & ~(PROG_MODE_PAGED_WRITES_MASK | PROG_MODE_COMMIT_PAGE_MASK)) @@ -124,6 +125,13 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1 case PROG_MODE_PAGED_VALUE_MASK: do { + /* Manage software timeout */ + if (TIFR0 & (1 << OCF0A)) + { + TIFR0 |= (1 << OCF0A); + TimeoutMSRemaining--; + } + SPI_SendByte(ReadMemCommand); SPI_SendByte(PollAddress >> 8); SPI_SendByte(PollAddress & 0xFF); @@ -139,9 +147,6 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1 ProgrammingStatus = ISPTarget_WaitWhileTargetBusy(); break; } - - if (ProgrammingStatus == STATUS_CMD_OK) - TimeoutMSRemaining = COMMAND_TIMEOUT_MS; return ProgrammingStatus; } @@ -153,11 +158,19 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1 */ uint8_t ISPTarget_WaitWhileTargetBusy(void) { + uint8_t TimeoutMSRemaining = 100; + do { + /* Manage software timeout */ + if (TIFR0 & (1 << OCF0A)) + { + TIFR0 |= (1 << OCF0A); + TimeoutMSRemaining--; + } + SPI_SendByte(0xF0); SPI_SendByte(0x00); - SPI_SendByte(0x00); } while ((SPI_ReceiveByte() & 0x01) && TimeoutMSRemaining);