forked from mfulz_github/qmk_firmware
More minor speedups to the AVRISP-MKII clone programmer PDI memory reading code.
This commit is contained in:
parent
13b3014db4
commit
e1b19e4e10
|
@ -236,21 +236,28 @@ bool XMEGANVM_ReadMemory(const uint32_t ReadAddress,
|
||||||
XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CMD);
|
XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CMD);
|
||||||
XPROGTarget_SendByte(XMEGA_NVM_CMD_READNVM);
|
XPROGTarget_SendByte(XMEGA_NVM_CMD_READNVM);
|
||||||
|
|
||||||
/* Load the PDI pointer register with the start address we want to read from */
|
|
||||||
XPROGTarget_SendByte(PDI_CMD_ST | (PDI_POINTER_DIRECT << 2) | PDI_DATSIZE_4BYTES);
|
|
||||||
XMEGANVM_SendAddress(ReadAddress);
|
|
||||||
|
|
||||||
if (ReadSize > 1)
|
if (ReadSize > 1)
|
||||||
{
|
{
|
||||||
|
/* Load the PDI pointer register with the start address we want to read from */
|
||||||
|
XPROGTarget_SendByte(PDI_CMD_ST | (PDI_POINTER_DIRECT << 2) | PDI_DATSIZE_4BYTES);
|
||||||
|
XMEGANVM_SendAddress(ReadAddress);
|
||||||
|
|
||||||
/* Send the REPEAT command with the specified number of bytes to read */
|
/* Send the REPEAT command with the specified number of bytes to read */
|
||||||
XPROGTarget_SendByte(PDI_CMD_REPEAT | PDI_DATSIZE_1BYTE);
|
XPROGTarget_SendByte(PDI_CMD_REPEAT | PDI_DATSIZE_1BYTE);
|
||||||
XPROGTarget_SendByte(ReadSize - 1);
|
XPROGTarget_SendByte(ReadSize - 1);
|
||||||
}
|
|
||||||
|
|
||||||
/* Send a LD command with indirect access and post-increment to read out the bytes */
|
/* Send a LD command with indirect access and post-increment to read out the bytes */
|
||||||
XPROGTarget_SendByte(PDI_CMD_LD | (PDI_POINTER_INDIRECT_PI << 2) | PDI_DATSIZE_1BYTE);
|
XPROGTarget_SendByte(PDI_CMD_LD | (PDI_POINTER_INDIRECT_PI << 2) | PDI_DATSIZE_1BYTE);
|
||||||
while (ReadSize-- && TimeoutTicksRemaining)
|
while (ReadSize-- && TimeoutTicksRemaining)
|
||||||
*(ReadBuffer++) = XPROGTarget_ReceiveByte();
|
*(ReadBuffer++) = XPROGTarget_ReceiveByte();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Send a LDS command with the read address to read out the requested byte */
|
||||||
|
XPROGTarget_SendByte(PDI_CMD_LDS | (PDI_DATSIZE_4BYTES << 2));
|
||||||
|
XMEGANVM_SendAddress(ReadAddress);
|
||||||
|
*(ReadBuffer++) = XPROGTarget_ReceiveByte();
|
||||||
|
}
|
||||||
|
|
||||||
return (TimeoutTicksRemaining > 0);
|
return (TimeoutTicksRemaining > 0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue