diff options
Diffstat (limited to 'Projects/AVRISP/Lib/ISPTarget.c')
| -rw-r--r-- | Projects/AVRISP/Lib/ISPTarget.c | 28 | 
1 files changed, 23 insertions, 5 deletions
diff --git a/Projects/AVRISP/Lib/ISPTarget.c b/Projects/AVRISP/Lib/ISPTarget.c index fbe8ad31c..ce364c6cc 100644 --- a/Projects/AVRISP/Lib/ISPTarget.c +++ b/Projects/AVRISP/Lib/ISPTarget.c @@ -123,16 +123,25 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1  		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);				
 +				SPI_SendByte(PollAddress & 0xFF);
 +
 +				if (TIFR0 & (1 << OCF1A))
 +				{
 +					TIFR0 = (1 << OCF1A);
 +					TimeoutMS--;
 +				}
  			}
 -			while ((SPI_TransferByte(0x00) != PollValue) && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));
 +			while ((SPI_TransferByte(0x00) != PollValue) && TimeoutMS);
 -			if (TCNT0 >= TARGET_BUSY_TIMEOUT_MS)
 +			if (!(TimeoutMS))
  			 ProgrammingStatus = STATUS_CMD_TOUT;
  			break;		
 @@ -153,6 +162,9 @@ 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
  	{
 @@ -160,10 +172,16 @@ uint8_t ISPTarget_WaitWhileTargetBusy(void)  		SPI_SendByte(0x00);
  		SPI_SendByte(0x00);
 +
 +		if (TIFR0 & (1 << OCF1A))
 +		{
 +			TIFR0 = (1 << OCF1A);
 +			TimeoutMS--;
 +		}
  	}
 -	while ((SPI_ReceiveByte() & 0x01) && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));
 +	while ((SPI_ReceiveByte() & 0x01) && TimeoutMS);
 -	if (TCNT0 >= TARGET_BUSY_TIMEOUT_MS)
 +	if (!(TimeoutMS))
  	  return STATUS_RDY_BSY_TOUT;
  	else
  	  return STATUS_CMD_OK;
  | 
