diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2010-01-17 04:39:33 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2010-01-17 04:39:33 +0000 |
commit | f3d370a7778dc8e374efc3b76e26f8ecefc27e84 (patch) | |
tree | 8e6b6a3842e05e78d7bb51a38975ff09286558c0 /Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c | |
parent | b0ce1eab668ac2e4779bbf8c3e6ef193d0ab0368 (diff) | |
download | lufa-f3d370a7778dc8e374efc3b76e26f8ecefc27e84.tar.gz lufa-f3d370a7778dc8e374efc3b76e26f8ecefc27e84.tar.bz2 lufa-f3d370a7778dc8e374efc3b76e26f8ecefc27e84.zip |
Clean up and add more comments to the AVRISP-MKII project. Make sure the SPI_MULTI command handler supports multiple packet responses. Use slightly smaller/faster repeated indirect-load commands when retrieving the PDI target's memory CRCs.
Diffstat (limited to 'Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c')
-rw-r--r-- | Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c index c23b9d75b..573f8fde5 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c @@ -136,24 +136,18 @@ bool XMEGANVM_GetMemoryCRC(const uint8_t CRCCommand, uint32_t* const CRCDest) if (!(XMEGANVM_WaitWhileNVMControllerBusy()))
return false;
- uint32_t MemoryCRC = 0;
-
- /* Read the first generated CRC byte value */
- XPROGTarget_SendByte(PDI_CMD_LDS | (PDI_DATSIZE_4BYTES << 2));
+ /* Load the PDI pointer register with the DAT0 register start address */
+ XPROGTarget_SendByte(PDI_CMD_ST | (PDI_POINTER_DIRECT << 2) | PDI_DATSIZE_4BYTES);
XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_DAT0);
- MemoryCRC = XPROGTarget_ReceiveByte();
-
- /* Read the second generated CRC byte value */
- XPROGTarget_SendByte(PDI_CMD_LDS | (PDI_DATSIZE_4BYTES << 2));
- XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_DAT1);
- MemoryCRC |= ((uint16_t)XPROGTarget_ReceiveByte() << 8);
- /* Read the third generated CRC byte value */
- XPROGTarget_SendByte(PDI_CMD_LDS | (PDI_DATSIZE_4BYTES << 2));
- XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_DAT2);
- MemoryCRC |= ((uint32_t)XPROGTarget_ReceiveByte() << 16);
+ /* Send the REPEAT command to grab the CRC bytes */
+ XPROGTarget_SendByte(PDI_CMD_REPEAT | PDI_DATSIZE_1BYTE);
+ XPROGTarget_SendByte(XMEGA_CRC_LENGTH - 1);
- *CRCDest = MemoryCRC;
+ /* Read in the CRC bytes from the target */
+ XPROGTarget_SendByte(PDI_CMD_LD | (PDI_POINTER_INDIRECT_PI << 2) | PDI_DATSIZE_1BYTE);
+ for (uint8_t i = 0; i < XMEGA_CRC_LENGTH; i++)
+ ((uint8_t*)CRCDest)[i] = XPROGTarget_ReceiveByte();
return true;
}
|