Added const where possible to the source functions in the Projects directory.
Added command timeout to the AVRISP project so that incorrectly connected targets no longer freeze the device. Removed string descriptors from the TeensyHID bootloader to reduce its size.
This commit is contained in:
parent
35dac470f2
commit
d1608d4af3
20 changed files with 102 additions and 137 deletions
|
@ -72,17 +72,20 @@
|
|||
*/
|
||||
static inline void ISPProtocol_DelayMS(uint8_t DelayMS)
|
||||
{
|
||||
TCNT0 = 0;
|
||||
TIFR0 = (1 << OCF1A);
|
||||
OCR2A = ((F_CPU / 64) / 1000);
|
||||
TCCR2A = (1 << WGM01);
|
||||
TCCR2B = ((1 << CS01) | (1 << CS00));
|
||||
|
||||
while (DelayMS)
|
||||
{
|
||||
if (TIFR0 & (1 << OCF1A))
|
||||
if (TIFR2 & (1 << OCF2A))
|
||||
{
|
||||
TIFR0 = (1 << OCF1A);
|
||||
TIFR2 = (1 << OCF2A);
|
||||
DelayMS--;
|
||||
}
|
||||
}
|
||||
|
||||
TCCR2B = 0;
|
||||
}
|
||||
|
||||
/* Function Prototypes: */
|
||||
|
|
|
@ -122,26 +122,15 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
|
|||
break;
|
||||
case PROG_MODE_WORD_VALUE_MASK:
|
||||
case PROG_MODE_PAGED_VALUE_MASK:
|
||||
TCNT0 = 0;
|
||||
TIFR0 = (1 << OCF1A);
|
||||
|
||||
uint8_t TimeoutMS = TARGET_BUSY_TIMEOUT_MS;
|
||||
|
||||
do
|
||||
{
|
||||
SPI_SendByte(ReadMemCommand);
|
||||
SPI_SendByte(PollAddress >> 8);
|
||||
SPI_SendByte(PollAddress & 0xFF);
|
||||
|
||||
if (TIFR0 & (1 << OCF1A))
|
||||
{
|
||||
TIFR0 = (1 << OCF1A);
|
||||
TimeoutMS--;
|
||||
}
|
||||
}
|
||||
while ((SPI_TransferByte(0x00) != PollValue) && TimeoutMS);
|
||||
while ((SPI_TransferByte(0x00) != PollValue) && TimeoutMSRemaining);
|
||||
|
||||
if (!(TimeoutMS))
|
||||
if (!(TimeoutMSRemaining))
|
||||
ProgrammingStatus = STATUS_CMD_TOUT;
|
||||
|
||||
break;
|
||||
|
@ -161,27 +150,16 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
|
|||
*/
|
||||
uint8_t ISPTarget_WaitWhileTargetBusy(void)
|
||||
{
|
||||
TCNT0 = 0;
|
||||
TIFR0 = (1 << OCF1A);
|
||||
|
||||
uint8_t TimeoutMS = TARGET_BUSY_TIMEOUT_MS;
|
||||
|
||||
do
|
||||
{
|
||||
SPI_SendByte(0xF0);
|
||||
SPI_SendByte(0x00);
|
||||
|
||||
SPI_SendByte(0x00);
|
||||
|
||||
if (TIFR0 & (1 << OCF1A))
|
||||
{
|
||||
TIFR0 = (1 << OCF1A);
|
||||
TimeoutMS--;
|
||||
}
|
||||
}
|
||||
while ((SPI_ReceiveByte() & 0x01) && TimeoutMS);
|
||||
while ((SPI_ReceiveByte() & 0x01) && TimeoutMSRemaining);
|
||||
|
||||
if (!(TimeoutMS))
|
||||
if (!(TimeoutMSRemaining))
|
||||
return STATUS_RDY_BSY_TOUT;
|
||||
else
|
||||
return STATUS_CMD_OK;
|
||||
|
|
|
@ -57,10 +57,7 @@
|
|||
/* Macros: */
|
||||
/** Total number of allowable ISP programming speeds supported by the device */
|
||||
#define TOTAL_ISP_PROGRAMMING_SPEEDS 7
|
||||
|
||||
/** Timeout in milliseconds of target busy-wait loops waiting for a command to complete */
|
||||
#define TARGET_BUSY_TIMEOUT_MS 100
|
||||
|
||||
|
||||
/* Function Prototypes: */
|
||||
uint8_t ISPTarget_GetSPIPrescalerMask(void);
|
||||
void ISPTarget_ChangeTargetResetLine(const bool ResetTarget);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue