Use _delay_us() function in the XPROGTarget.c file to ensure timing requirements are met, rather than a fixed number of NOPs.

pull/1469/head
Dean Camera 15 years ago
parent 75d27f8ef0
commit 331e8dece6

@ -152,11 +152,9 @@ void XPROGTarget_EnableTargetPDI(void)
DDRD |= (1 << 5) | (1 << 3); DDRD |= (1 << 5) | (1 << 3);
DDRD &= ~(1 << 2); DDRD &= ~(1 << 2);
/* Set DATA line high for at least 90ns to disable /RESET functionality (note: too long will enable it again, /* Set DATA line high for at least 90ns to disable /RESET functionality */
* so a fixed number of NOPs are used here */
PORTD |= (1 << 3); PORTD |= (1 << 3);
asm volatile ("NOP"::); _delay_us(1);
asm volatile ("NOP"::);
/* Set up the synchronous USART for XMEGA communications - /* Set up the synchronous USART for XMEGA communications -
8 data bits, even parity, 2 stop bits */ 8 data bits, even parity, 2 stop bits */
@ -168,11 +166,9 @@ void XPROGTarget_EnableTargetPDI(void)
BITBANG_PDIDATA_DDR |= BITBANG_PDIDATA_MASK; BITBANG_PDIDATA_DDR |= BITBANG_PDIDATA_MASK;
BITBANG_PDICLOCK_DDR |= BITBANG_PDICLOCK_MASK; BITBANG_PDICLOCK_DDR |= BITBANG_PDICLOCK_MASK;
/* Set DATA line high for at least 90ns to disable /RESET functionality (note: too long will enable it again, /* Set DATA line high for at least 90ns to disable /RESET functionality */
* so a fixed number of NOPs are used here */
BITBANG_PDIDATA_PORT |= BITBANG_PDIDATA_MASK; BITBANG_PDIDATA_PORT |= BITBANG_PDIDATA_MASK;
asm volatile ("NOP"::); _delay_us(1);
asm volatile ("NOP"::);
/* Fire timer compare channel A ISR to manage the software USART */ /* Fire timer compare channel A ISR to manage the software USART */
OCR1A = BITS_BETWEEN_USART_CLOCKS; OCR1A = BITS_BETWEEN_USART_CLOCKS;
@ -193,7 +189,7 @@ void XPROGTarget_EnableTargetTPI(void)
/* Set /RESET line low for at least 400ns to enable TPI functionality */ /* Set /RESET line low for at least 400ns to enable TPI functionality */
AUX_LINE_DDR |= AUX_LINE_MASK; AUX_LINE_DDR |= AUX_LINE_MASK;
AUX_LINE_PORT &= ~AUX_LINE_MASK; AUX_LINE_PORT &= ~AUX_LINE_MASK;
_delay_ms(1); _delay_us(1);
#if defined(XPROG_VIA_HARDWARE_USART) #if defined(XPROG_VIA_HARDWARE_USART)
/* Set Tx and XCK as outputs, Rx as input */ /* Set Tx and XCK as outputs, Rx as input */

Loading…
Cancel
Save