X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/f1b6ddb7107fd9534cc6a8d6ab2d46f349d9cdb7..0da99447d3e88e83f9977501bee56af5c7aa56c0:/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 ac6831611..6bf74c872 100644 --- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c +++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c @@ -129,9 +129,12 @@ ISR(TIMER1_COMPA_vect, ISR_BLOCK) { SoftSPI_Data <<= 1; - if (!(SoftSPI_BitsRemaining--)) - TCCR1B = 0; - + if (!(--SoftSPI_BitsRemaining)) + { + TCCR1B = 0; + TIFR1 = (1 << OCF1A); + } + if (PINB & (1 << 3)) SoftSPI_Data |= (1 << 0); } @@ -251,7 +254,7 @@ uint8_t ISPTarget_TransferSoftSPIByte(const uint8_t Byte) TCNT1 = 0; TCCR1B = ((1 << WGM12) | (1 << CS11)); - while (SoftSPI_BitsRemaining && !(TimeoutExpired)); + while (SoftSPI_BitsRemaining && TimeoutTicksRemaining); TCCR1B = 0; return SoftSPI_Data; @@ -293,9 +296,9 @@ uint8_t ISPTarget_WaitWhileTargetBusy(void) ISPTarget_SendByte(0x00); ISPTarget_SendByte(0x00); } - while ((ISPTarget_ReceiveByte() & 0x01) && !(TimeoutExpired)); + while ((ISPTarget_ReceiveByte() & 0x01) && TimeoutTicksRemaining); - return (TimeoutExpired) ? STATUS_RDY_BSY_TOUT : STATUS_CMD_OK; + return (TimeoutTicksRemaining > 0) ? STATUS_CMD_OK : STATUS_RDY_BSY_TOUT; } /** Sends a low-level LOAD EXTENDED ADDRESS command to the target, for addressing of memory beyond the @@ -345,10 +348,10 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, ISPTarget_SendByte(PollAddress >> 8); ISPTarget_SendByte(PollAddress & 0xFF); } - while ((ISPTarget_TransferByte(0x00) == PollValue) && !(TimeoutExpired)); + while ((ISPTarget_TransferByte(0x00) == PollValue) && TimeoutTicksRemaining); - if (TimeoutExpired) - ProgrammingStatus = STATUS_CMD_TOUT; + if (!(TimeoutTicksRemaining)) + ProgrammingStatus = STATUS_CMD_TOUT; break; case PROG_MODE_WORD_READYBUSY_MASK: @@ -358,7 +361,7 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, } /* Program complete - reset timeout */ - wdt_reset(); + TimeoutTicksRemaining = COMMAND_TIMEOUT_TICKS; return ProgrammingStatus; }