X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/ab195ab1da1da75a3a23d47b56c66d14803a9de3..55db57e1ede3c44a3b027cb442fa12e969b37f4b:/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c index 267e51850..94f1c3d74 100644 --- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c +++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c @@ -111,7 +111,7 @@ 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; /* Determine method of Programming Complete check */ switch (ProgrammingMode & ~(PROG_MODE_PAGED_WRITES_MASK | PROG_MODE_COMMIT_PAGE_MASK)) @@ -124,6 +124,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,7 +146,7 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1 ProgrammingStatus = ISPTarget_WaitWhileTargetBusy(); break; } - + if (ProgrammingStatus == STATUS_CMD_OK) TimeoutMSRemaining = COMMAND_TIMEOUT_MS; @@ -155,14 +162,28 @@ uint8_t ISPTarget_WaitWhileTargetBusy(void) { 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); - return ((TimeoutMSRemaining) ? STATUS_CMD_OK : STATUS_RDY_BSY_TOUT); + if (TimeoutMSRemaining) + { + TimeoutMSRemaining = COMMAND_TIMEOUT_MS; + return STATUS_CMD_OK; + } + else + { + return STATUS_RDY_BSY_TOUT; + } } /** Sends a low-level LOAD EXTENDED ADDRESS command to the target, for addressing of memory beyond the