X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/eee252603be67c539f9986cde76454f756e55d95..01e75290a0ea730e69c8465a17626c6458d19a9b:/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 3af52827f..22eb7d74c 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2012. + Copyright (C) Dean Camera, 2017. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2017 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 @@ -55,8 +55,8 @@ static void TINYNVM_SendPointerAddress(const uint16_t AbsoluteAddress) static void TINYNVM_SendReadNVMRegister(const uint8_t Address) { /* The TPI command for reading from the I/O space uses strange addressing, where the I/O address's upper - * two bits of the 6-bit address are shifted left once */ - XPROGTarget_SendByte(TPI_CMD_SIN | ((Address & 0x30) << 1) | (Address & 0x0F)); + * two bits of the 6-bit address are shifted left once - use function to reduce code size */ + XPROGTarget_SendByte(TPI_CMD_SIN(Address)); } /** Sends a SOUT command to the target with the specified I/O address, ready for the data byte to be read. @@ -66,13 +66,13 @@ static void TINYNVM_SendReadNVMRegister(const uint8_t Address) static void TINYNVM_SendWriteNVMRegister(const uint8_t Address) { /* The TPI command for reading from the I/O space uses strange addressing, where the I/O address's upper - * two bits of the 6-bit address are shifted left once */ - XPROGTarget_SendByte(TPI_CMD_SOUT | ((Address & 0x30) << 1) | (Address & 0x0F)); + * two bits of the 6-bit address are shifted left once - use function to reduce code size */ + XPROGTarget_SendByte(TPI_CMD_SOUT(Address)); } /** Busy-waits while the NVM controller is busy performing a NVM operation, such as a FLASH page read. * - * \return Boolean true if the NVM controller became ready within the timeout period, false otherwise + * \return Boolean \c true if the NVM controller became ready within the timeout period, \c false otherwise */ bool TINYNVM_WaitWhileNVMBusBusy(void) { @@ -80,7 +80,7 @@ bool TINYNVM_WaitWhileNVMBusBusy(void) for (;;) { /* Send the SLDCS command to read the TPI STATUS register to see the NVM bus is active */ - XPROGTarget_SendByte(TPI_CMD_SLDCS | TPI_STATUS_REG); + XPROGTarget_SendByte(TPI_CMD_SLDCS(TPI_REG_STATUS)); uint8_t StatusRegister = XPROGTarget_ReceiveByte(); @@ -97,7 +97,7 @@ bool TINYNVM_WaitWhileNVMBusBusy(void) /** Waits while the target's NVM controller is busy performing an operation, exiting if the * timeout period expires. * - * \return Boolean true if the NVM controller became ready within the timeout period, false otherwise + * \return Boolean \c true if the NVM controller became ready within the timeout period, \c false otherwise */ bool TINYNVM_WaitWhileNVMControllerBusy(void) { @@ -121,7 +121,7 @@ bool TINYNVM_WaitWhileNVMControllerBusy(void) /** Enables the physical TPI interface on the target and enables access to the internal NVM controller. * - * \return Boolean true if the TPI interface was enabled successfully, false otherwise + * \return Boolean \c true if the TPI interface was enabled successfully, \c false otherwise */ bool TINYNVM_EnableTPI(void) { @@ -129,7 +129,7 @@ bool TINYNVM_EnableTPI(void) XPROGTarget_EnableTargetTPI(); /* Lower direction change guard time to 32 USART bits */ - XPROGTarget_SendByte(TPI_CMD_SSTCS | TPI_CTRL_REG); + XPROGTarget_SendByte(TPI_CMD_SSTCS(TPI_REG_CTRL)); XPROGTarget_SendByte(0x02); /* Enable access to the XPROG NVM bus by sending the documented NVM access key to the device */ @@ -149,11 +149,11 @@ void TINYNVM_DisableTPI(void) do { /* Clear the NVMEN bit in the TPI STATUS register to disable TPI mode */ - XPROGTarget_SendByte(TPI_CMD_SSTCS | TPI_STATUS_REG); + XPROGTarget_SendByte(TPI_CMD_SSTCS(TPI_REG_STATUS)); XPROGTarget_SendByte(0x00); /* Read back the STATUS register, check to see if it took effect */ - XPROGTarget_SendByte(TPI_CMD_SLDCS | PDI_RESET_REG); + XPROGTarget_SendByte(TPI_CMD_SLDCS(TPI_REG_STATUS)); } while (XPROGTarget_ReceiveByte() != 0x00); XPROGTarget_DisableTargetTPI(); @@ -165,7 +165,7 @@ void TINYNVM_DisableTPI(void) * \param[out] ReadBuffer Buffer to store read data into * \param[in] ReadSize Length of the data to read from the device * - * \return Boolean true if the command sequence complete successfully + * \return Boolean \c true if the command sequence complete successfully */ bool TINYNVM_ReadMemory(const uint16_t ReadAddress, uint8_t* ReadBuffer, @@ -185,7 +185,7 @@ bool TINYNVM_ReadMemory(const uint16_t ReadAddress, while (ReadSize-- && TimeoutTicksRemaining) { /* Read the byte of data from the target */ - XPROGTarget_SendByte(TPI_CMD_SLD | TPI_POINTER_INDIRECT_PI); + XPROGTarget_SendByte(TPI_CMD_SLD(TPI_POINTER_INDIRECT_PI)); *(ReadBuffer++) = XPROGTarget_ReceiveByte(); } @@ -198,7 +198,7 @@ bool TINYNVM_ReadMemory(const uint16_t ReadAddress, * \param[in] WriteBuffer Buffer to source data from * \param[in] WriteLength Total number of bytes to write to the device (must be an integer multiple of 2) * - * \return Boolean true if the command sequence complete successfully + * \return Boolean \c true if the command sequence complete successfully */ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, uint8_t* WriteBuffer, @@ -226,11 +226,11 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, return false; /* Write the low byte of data to the target */ - XPROGTarget_SendByte(TPI_CMD_SST | TPI_POINTER_INDIRECT_PI); + 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(TPI_CMD_SST(TPI_POINTER_INDIRECT_PI)); XPROGTarget_SendByte(*(WriteBuffer++)); /* Need to decrement the write length twice, since we wrote a whole two-byte word */ @@ -245,7 +245,7 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, * \param[in] EraseCommand NVM erase command to send to the device * \param[in] Address Address inside the memory space to erase * - * \return Boolean true if the command sequence complete successfully + * \return Boolean \c true if the command sequence complete successfully */ bool TINYNVM_EraseMemory(const uint8_t EraseCommand, const uint16_t Address) @@ -260,7 +260,7 @@ bool TINYNVM_EraseMemory(const uint8_t EraseCommand, /* Write to a high byte location within the target address space to start the erase process */ TINYNVM_SendPointerAddress(Address | 0x0001); - XPROGTarget_SendByte(TPI_CMD_SST | TPI_POINTER_INDIRECT); + XPROGTarget_SendByte(TPI_CMD_SST(TPI_POINTER_INDIRECT)); XPROGTarget_SendByte(0x00); /* Wait until the NVM controller is no longer busy */