*/
/*
- Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+ Copyright 2012 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
{
SoftSPI_Data <<= 1;
- if (!(SoftSPI_BitsRemaining--))
- TCCR1B = 0;
-
+ if (!(--SoftSPI_BitsRemaining))
+ {
+ TCCR1B = 0;
+ TIFR1 = (1 << OCF1A);
+ }
+
if (PINB & (1 << 3))
SoftSPI_Data |= (1 << 0);
}
TCNT1 = 0;
TCCR1B = ((1 << WGM12) | (1 << CS11));
- while (SoftSPI_BitsRemaining && !(TimeoutExpired));
+ while (SoftSPI_BitsRemaining && TimeoutTicksRemaining);
TCCR1B = 0;
return SoftSPI_Data;
ISPTarget_SendByte(0x00);
ISPTarget_SendByte(0x00);
}
- while ((ISPTarget_ReceiveByte() & 0x01) && !(TimeoutExpired));
+ while ((ISPTarget_ReceiveByte() & 0x01) && TimeoutTicksRemaining);
- return (TimeoutExpired) ? STATUS_RDY_BSY_TOUT : STATUS_CMD_OK;
+ return (TimeoutTicksRemaining > 0) ? STATUS_CMD_OK : STATUS_RDY_BSY_TOUT;
}
/** Sends a low-level LOAD EXTENDED ADDRESS command to the target, for addressing of memory beyond the
ISPTarget_SendByte(PollAddress >> 8);
ISPTarget_SendByte(PollAddress & 0xFF);
}
- while ((ISPTarget_TransferByte(0x00) == PollValue) && !(TimeoutExpired));
+ while ((ISPTarget_TransferByte(0x00) == PollValue) && TimeoutTicksRemaining);
- if (TimeoutExpired)
- ProgrammingStatus = STATUS_CMD_TOUT;
+ if (!(TimeoutTicksRemaining))
+ ProgrammingStatus = STATUS_CMD_TOUT;
break;
case PROG_MODE_WORD_READYBUSY_MASK:
}
/* Program complete - reset timeout */
- wdt_reset();
+ TimeoutTicksRemaining = COMMAND_TIMEOUT_TICKS;
return ProgrammingStatus;
}