aboutsummaryrefslogtreecommitdiffstats
path: root/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-05-02 06:02:54 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-05-02 06:02:54 +0000
commita5e79333e5769f92558bf20458c165e2582a0cb6 (patch)
treea5e638447ec31ffd110079c19880def97d3255b3 /Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
parent3d28d53c3e2ae529933283e63a8b05f2ab1ce2be (diff)
downloadlufa-a5e79333e5769f92558bf20458c165e2582a0cb6.tar.gz
lufa-a5e79333e5769f92558bf20458c165e2582a0cb6.tar.bz2
lufa-a5e79333e5769f92558bf20458c165e2582a0cb6.zip
Switch back to C based timeout ISR in the AVRISP project - assembly version was failing, and only one or two cycles could be shaved off the compiler generated code.
Diffstat (limited to 'Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c')
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
index 228a89546..6adb24f16 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
@@ -165,6 +165,10 @@ void XPROGTarget_EnableTargetPDI(void)
BITBANG_PDIDATA_DDR |= BITBANG_PDIDATA_MASK;
BITBANG_PDICLOCK_DDR |= BITBANG_PDICLOCK_MASK;
+ /* Set DATA line low for at least 90ns to ensure that the device is ready for PDI mode to be entered */
+ BITBANG_PDIDATA_PORT &= ~BITBANG_PDIDATA_MASK;
+ _delay_us(1);
+
/* Set DATA line high for at least 90ns to disable /RESET functionality */
BITBANG_PDIDATA_PORT |= BITBANG_PDIDATA_MASK;
_delay_us(1);
@@ -314,6 +318,9 @@ void XPROGTarget_SendByte(const uint8_t Byte)
SoftUSART_Data = NewUSARTData;
SoftUSART_BitCount = BITS_IN_USART_FRAME;
#endif
+
+ if (TimeoutMSRemaining)
+ TimeoutMSRemaining = COMMAND_TIMEOUT_MS;
}
/** Receives a byte via the software USART, blocking until data is received.
@@ -369,6 +376,9 @@ void XPROGTarget_SendBreak(void)
SoftUSART_Data = 0x0FFF;
SoftUSART_BitCount = BITS_IN_USART_FRAME;
#endif
+
+ if (TimeoutMSRemaining)
+ TimeoutMSRemaining = COMMAND_TIMEOUT_MS;
}
static void XPROGTarget_SetTxMode(void)
@@ -405,6 +415,9 @@ static void XPROGTarget_SetTxMode(void)
}
#endif
+ if (TimeoutMSRemaining)
+ TimeoutMSRemaining = COMMAND_TIMEOUT_MS;
+
IsSending = true;
}