diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2010-01-31 12:25:53 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2010-01-31 12:25:53 +0000 |
commit | 75d27f8ef0873157c4ca14dc41d1eb4139e0180d (patch) | |
tree | 18c79d5944ffcfb07f8007ba42a693ba07a98114 /Projects/AVRISP-MKII/Lib/XPROG | |
parent | 97f7cd947be1469c223d09b2e6573051f6629cee (diff) | |
download | lufa-75d27f8ef0873157c4ca14dc41d1eb4139e0180d.tar.gz lufa-75d27f8ef0873157c4ca14dc41d1eb4139e0180d.tar.bz2 lufa-75d27f8ef0873157c4ca14dc41d1eb4139e0180d.zip |
Oops - PDI handshake delay was too long, causing the device's /RESET functionality to be re-enabled.
Diffstat (limited to 'Projects/AVRISP-MKII/Lib/XPROG')
-rw-r--r-- | Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c index 0f590c719..843bf5a7d 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;
|