X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/2c806f6ceee42db9094eb11f3f32524b98440726..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 fbced3869..6bf74c872 100644 --- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c +++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c @@ -7,7 +7,7 @@ */ /* - Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted @@ -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; }