X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/016a4c068a01b0baf28bc45ec1eba16460689f9a..b27f35536dce3f3ba9d3d3e8a1fa2e9c6cb9cec7:/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c index e0e2479ea..26d6bf16f 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c @@ -1,21 +1,21 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com + www.lufa-lib.org */ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -85,15 +85,12 @@ bool TINYNVM_WaitWhileNVMBusBusy(void) uint8_t StatusRegister = XPROGTarget_ReceiveByte(); /* We might have timed out waiting for the status register read response, check here */ - if (!(TimeoutMSRemaining)) + if (!(TimeoutTicksRemaining)) return false; /* Check the status register read response to see if the NVM bus is enabled */ if (StatusRegister & TPI_STATUS_NVM) - { - TimeoutMSRemaining = COMMAND_TIMEOUT_MS; - return true; - } + return true; } } @@ -113,15 +110,12 @@ bool TINYNVM_WaitWhileNVMControllerBusy(void) uint8_t StatusRegister = XPROGTarget_ReceiveByte(); /* We might have timed out waiting for the status register read response, check here */ - if (!(TimeoutMSRemaining)) + if (!(TimeoutTicksRemaining)) return false; /* Check to see if the BUSY flag is still set */ if (!(StatusRegister & (1 << 7))) - { - TimeoutMSRemaining = COMMAND_TIMEOUT_MS; - return true; - } + return true; } } @@ -133,7 +127,9 @@ bool TINYNVM_WaitWhileNVMControllerBusy(void) * * \return Boolean true if the command sequence complete successfully */ -bool TINYNVM_ReadMemory(const uint16_t ReadAddress, uint8_t* ReadBuffer, uint16_t ReadSize) +bool TINYNVM_ReadMemory(const uint16_t ReadAddress, + uint8_t* ReadBuffer, + uint16_t ReadSize) { /* Wait until the NVM controller is no longer busy */ if (!(TINYNVM_WaitWhileNVMControllerBusy())) @@ -142,18 +138,18 @@ bool TINYNVM_ReadMemory(const uint16_t ReadAddress, uint8_t* ReadBuffer, uint16_ /* Set the NVM control register to the NO OP command for memory reading */ TINYNVM_SendWriteNVMRegister(XPROG_Param_NVMCMDRegAddr); XPROGTarget_SendByte(TINY_NVM_CMD_NOOP); - + /* Send the address of the location to read from */ TINYNVM_SendPointerAddress(ReadAddress); - - while (ReadSize-- && TimeoutMSRemaining) + + while (ReadSize-- && TimeoutTicksRemaining) { /* Read the byte of data from the target */ XPROGTarget_SendByte(TPI_CMD_SLD | TPI_POINTER_INDIRECT_PI); *(ReadBuffer++) = XPROGTarget_ReceiveByte(); } - - return (TimeoutMSRemaining != 0); + + return (TimeoutTicksRemaining != 0); } /** Writes word addressed memory to the target's memory spaces. @@ -164,12 +160,14 @@ bool TINYNVM_ReadMemory(const uint16_t ReadAddress, uint8_t* ReadBuffer, uint16_ * * \return Boolean true if the command sequence complete successfully */ -bool TINYNVM_WriteMemory(const uint16_t WriteAddress, uint8_t* WriteBuffer, uint16_t WriteLength) +bool TINYNVM_WriteMemory(const uint16_t WriteAddress, + uint8_t* WriteBuffer, + uint16_t WriteLength) { /* Wait until the NVM controller is no longer busy */ if (!(TINYNVM_WaitWhileNVMControllerBusy())) return false; - + /* Must have an integer number of words to write - if extra byte, word-align via a dummy high byte */ if (WriteLength & 0x01) WriteBuffer[WriteLength++] = 0xFF; @@ -177,10 +175,10 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, uint8_t* WriteBuffer, uint /* Set the NVM control register to the WORD WRITE command for memory reading */ TINYNVM_SendWriteNVMRegister(XPROG_Param_NVMCMDRegAddr); XPROGTarget_SendByte(TINY_NVM_CMD_WORDWRITE); - + /* Send the address of the location to write to */ TINYNVM_SendPointerAddress(WriteAddress); - + while (WriteLength) { /* Wait until the NVM controller is no longer busy */ @@ -190,7 +188,7 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, uint8_t* WriteBuffer, uint /* Write the low byte of data to the target */ XPROGTarget_SendByte(TPI_CMD_SST | TPI_POINTER_INDIRECT_PI); XPROGTarget_SendByte(*(WriteBuffer++)); - + /* Write the high byte of data to the target */ XPROGTarget_SendByte(TPI_CMD_SST | TPI_POINTER_INDIRECT_PI); XPROGTarget_SendByte(*(WriteBuffer++)); @@ -198,7 +196,7 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, uint8_t* WriteBuffer, uint /* Need to decrement the write length twice, since we read out a whole word */ WriteLength -= 2; } - + return true; } @@ -209,7 +207,8 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, uint8_t* WriteBuffer, uint * * \return Boolean true if the command sequence complete successfully */ -bool TINYNVM_EraseMemory(const uint8_t EraseCommand, const uint16_t Address) +bool TINYNVM_EraseMemory(const uint8_t EraseCommand, + const uint16_t Address) { /* Wait until the NVM controller is no longer busy */ if (!(TINYNVM_WaitWhileNVMControllerBusy())) @@ -227,8 +226,9 @@ bool TINYNVM_EraseMemory(const uint8_t EraseCommand, const uint16_t Address) /* Wait until the NVM controller is no longer busy */ if (!(TINYNVM_WaitWhileNVMControllerBusy())) return false; - + return true; } #endif +