X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/271be037b736d66a7b7e0c4d5d30c5a24025277f..64e5c4084f862267d96b0947f462de7058f3dc4c:/Projects/AVRISP/Lib/V2ProtocolTarget.c diff --git a/Projects/AVRISP/Lib/V2ProtocolTarget.c b/Projects/AVRISP/Lib/V2ProtocolTarget.c index a39c5e96d..9f8978a70 100644 --- a/Projects/AVRISP/Lib/V2ProtocolTarget.c +++ b/Projects/AVRISP/Lib/V2ProtocolTarget.c @@ -55,7 +55,7 @@ uint8_t V2Protocol_GetSPIPrescalerMask(void) SPI_SPEED_FCPU_DIV_16, // AVRStudio = 500KHz SPI, Actual = 500KHz SPI SPI_SPEED_FCPU_DIV_32, // AVRStudio = 250KHz SPI, Actual = 250KHz SPI SPI_SPEED_FCPU_DIV_64 // AVRStudio = 125KHz SPI, Actual = 125KHz SPI - #if (F_CPU == 16000000) + #elif (F_CPU == 16000000) SPI_SPEED_FCPU_DIV_2, // AVRStudio = 8MHz SPI, Actual = 8MHz SPI SPI_SPEED_FCPU_DIV_4, // AVRStudio = 4MHz SPI, Actual = 4MHz SPI SPI_SPEED_FCPU_DIV_8, // AVRStudio = 2MHz SPI, Actual = 2MHz SPI @@ -79,7 +79,7 @@ uint8_t V2Protocol_GetSPIPrescalerMask(void) /** Asserts or deasserts the target's reset line, using the correct polarity as set by the host using a SET PARAM command. * When not asserted, the line is tristated so as not to intefere with normal device operation. * - * \param ResetTarget Boolean true when the target should be held in reset, false otherwise + * \param[in] ResetTarget Boolean true when the target should be held in reset, false otherwise */ void V2Protocol_ChangeTargetResetLine(bool ResetTarget) { @@ -92,19 +92,19 @@ void V2Protocol_ChangeTargetResetLine(bool ResetTarget) } else { - RESET_LINE_PORT &= ~RESET_LINE_MASK; RESET_LINE_DDR &= ~RESET_LINE_MASK; + RESET_LINE_PORT &= ~RESET_LINE_MASK; } } /** Waits until the last issued target memory programming command has completed, via the check mode given and using * the given parameters. * - * \param ProgrammingMode Programming mode used and completion check to use, a mask of PROG_MODE_* constants - * \param PollAddress Memory address to poll for completion if polling check mode used - * \param PollValue Poll value to check against if polling check mode used - * \param DelayMS Milliseconds to delay before returning if delay check mode used - * \param ReadMemCommand Device low-level READ MEMORY command to send if value check mode used + * \param[in] ProgrammingMode Programming mode used and completion check to use, a mask of PROG_MODE_* constants + * \param[in] PollAddress Memory address to poll for completion if polling check mode used + * \param[in] PollValue Poll value to check against if polling check mode used + * \param[in] DelayMS Milliseconds to delay before returning if delay check mode used + * \param[in] ReadMemCommand Device low-level READ MEMORY command to send if value check mode used * * \return V2 Protocol status \ref STATUS_CMD_OK if the no timeout occurred, \ref STATUS_RDY_BSY_TOUT or * \ref STATUS_CMD_TOUT otherwise @@ -155,14 +155,17 @@ uint8_t V2Protocol_WaitWhileTargetBusy(void) { TCNT0 = 0; + bool DeviceBusy; + do { SPI_SendByte(0xF0); SPI_SendByte(0x00); SPI_SendByte(0x00); + DeviceBusy = (SPI_ReceiveByte() & 0x01); } - while ((SPI_ReceiveByte() & 0x01) && (TCNT0 < TARGET_BUSY_TIMEOUT_MS)); + while (DeviceBusy && (TCNT0 < TARGET_BUSY_TIMEOUT_MS)); if (TCNT0 >= TARGET_BUSY_TIMEOUT_MS) return STATUS_RDY_BSY_TOUT;