From 75d27f8ef0873157c4ca14dc41d1eb4139e0180d Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 31 Jan 2010 12:25:53 +0000 Subject: [PATCH] Oops - PDI handshake delay was too long, causing the device's /RESET functionality to be re-enabled. --- Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c index 0f590c719e..843bf5a7df 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c @@ -152,9 +152,11 @@ void XPROGTarget_EnableTargetPDI(void) DDRD |= (1 << 5) | (1 << 3); DDRD &= ~(1 << 2); - /* Set DATA line high for at least 90ns to disable /RESET functionality */ + /* Set DATA line high for at least 90ns to disable /RESET functionality (note: too long will enable it again, + * so a fixed number of NOPs are used here */ PORTD |= (1 << 3); - _delay_ms(1); + asm volatile ("NOP"::); + asm volatile ("NOP"::); /* Set up the synchronous USART for XMEGA communications - 8 data bits, even parity, 2 stop bits */ @@ -166,9 +168,11 @@ void XPROGTarget_EnableTargetPDI(void) BITBANG_PDIDATA_DDR |= BITBANG_PDIDATA_MASK; BITBANG_PDICLOCK_DDR |= BITBANG_PDICLOCK_MASK; - /* Set DATA line high for at least 90ns to disable /RESET functionality */ + /* Set DATA line high for at least 90ns to disable /RESET functionality (note: too long will enable it again, + * so a fixed number of NOPs are used here */ BITBANG_PDIDATA_PORT |= BITBANG_PDIDATA_MASK; - _delay_ms(1); + asm volatile ("NOP"::); + asm volatile ("NOP"::); /* Fire timer compare channel A ISR to manage the software USART */ OCR1A = BITS_BETWEEN_USART_CLOCKS;