From ceb16ee24f1e6add5e2ad0398369c24d2d868cd8 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Fri, 30 Apr 2010 08:27:21 +0000 Subject: Make sure that the NVM bus/controller busy waits in the AVRISP MKII clone project abort properly if a timeout occurs while waiting for a response. --- Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c | 33 ++++++++++++++++++---------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c') diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c index bd269edd70..6f0d87add6 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c @@ -453,22 +453,33 @@ static void XPROGTarget_SetRxMode(void) { BITBANG_PDIDATA_DDR &= ~BITBANG_PDIDATA_MASK; BITBANG_PDIDATA_PORT &= ~BITBANG_PDIDATA_MASK; + + /* Wait until DATA line has been pulled up to idle by the target */ + while (!(BITBANG_PDIDATA_PIN & BITBANG_PDIDATA_MASK) && TimeoutMSRemaining) + { + /* Manage software timeout */ + if (TIFR0 & (1 << OCF0A)) + { + TIFR0 |= (1 << OCF0A); + TimeoutMSRemaining--; + } + } } else { BITBANG_TPIDATA_DDR &= ~BITBANG_TPIDATA_MASK; - BITBANG_TPIDATA_PORT &= ~BITBANG_TPIDATA_MASK; - } - - /* Wait until DATA line has been pulled up to idle by the target */ - while (!(BITBANG_PDIDATA_PIN & BITBANG_PDIDATA_MASK) && TimeoutMSRemaining) - { - /* Manage software timeout */ - if (TIFR0 & (1 << OCF0A)) + BITBANG_TPIDATA_PORT &= ~BITBANG_TPIDATA_MASK; + + /* Wait until DATA line has been pulled up to idle by the target */ + while (!(BITBANG_TPIDATA_PIN & BITBANG_TPIDATA_MASK) && TimeoutMSRemaining) { - TIFR0 |= (1 << OCF0A); - TimeoutMSRemaining--; - } + /* Manage software timeout */ + if (TIFR0 & (1 << OCF0A)) + { + TIFR0 |= (1 << OCF0A); + TimeoutMSRemaining--; + } + } } #endif -- cgit v1.2.3