From a114878209e275cbbbad64e79746975f4c16a291 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Fri, 29 Jan 2010 06:02:02 +0000
Subject: [PATCH] Oops - TPI programming is broken in the AVRISP project
 because the busy-flag check wasn't inverting the result.

---
 Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c
index 0e6833a7f..e7513032f 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c
@@ -55,7 +55,7 @@ static void TINYNVM_SendPointerAddress(const uint16_t AbsoluteAddress)
  */
 static void TINYNVM_SendReadNVMRegister(uint8_t Address)
 {
-	/* The TPI command for reading from the I/O space uses wierd addressing, where the I/O address's upper
+	/* The TPI command for reading from the I/O space uses strange addressing, where the I/O address's upper
 	 * two bits of the 6-bit address are shifted left once */
 	XPROGTarget_SendByte(TPI_CMD_SIN | ((Address & 0x30) << 1) | (Address & 0x0F));
 }
@@ -99,9 +99,11 @@ bool TINYNVM_WaitWhileNVMControllerBusy(void)
 	/* Poll the STATUS register to check to see if NVM access has been enabled */
 	while (TimeoutMSRemaining)
 	{
-		/* Send the SIN command to read the TPI STATUS register to see the NVM bus is active */
+		/* Send the SIN command to read the TPI STATUS register to see the NVM bus is busy */
 		TINYNVM_SendReadNVMRegister(XPROG_Param_NVMCSRRegAddr);
-		if (XPROGTarget_ReceiveByte() & (1 << 7))
+
+		/* Check to see if the BUSY flag is still set */
+		if (!(XPROGTarget_ReceiveByte() & (1 << 7)))
 		  return true;
 	}
 	
-- 
GitLab