From a5e79333e5769f92558bf20458c165e2582a0cb6 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 2 May 2010 06:02:54 +0000 Subject: 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. --- Projects/AVRISP-MKII/Lib/Timeout.S | 23 ----------------------- Projects/AVRISP-MKII/Lib/V2Protocol.c | 6 ++++++ Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c | 13 +++++++++++++ 3 files changed, 19 insertions(+), 23 deletions(-) delete mode 100644 Projects/AVRISP-MKII/Lib/Timeout.S (limited to 'Projects/AVRISP-MKII/Lib') diff --git a/Projects/AVRISP-MKII/Lib/Timeout.S b/Projects/AVRISP-MKII/Lib/Timeout.S deleted file mode 100644 index ad56d1d21..000000000 --- a/Projects/AVRISP-MKII/Lib/Timeout.S +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include "V2Protocol.h" - -.global TIMER0_COMPA_vect -TIMER0_COMPA_vect: - sei - push r24 - in r24, 0x3f - push r24 - - in r24, TimeoutMSRemaining - and r24, r24 - breq Epilogue - subi r24, 0x01 - out TimeoutMSRemaining, r24 - -Epilogue: - pop r24 - out 0x3f, r24 - pop r24 - reti - - \ No newline at end of file diff --git a/Projects/AVRISP-MKII/Lib/V2Protocol.c b/Projects/AVRISP-MKII/Lib/V2Protocol.c index 63b7294c0..035c8a5b3 100644 --- a/Projects/AVRISP-MKII/Lib/V2Protocol.c +++ b/Projects/AVRISP-MKII/Lib/V2Protocol.c @@ -43,6 +43,12 @@ uint32_t CurrentAddress; bool MustSetAddress; +ISR(TIMER0_COMPA_vect, ISR_NOBLOCK) +{ + if (TimeoutMSRemaining) + TimeoutMSRemaining--; +} + /** Initializes the hardware and software associated with the V2 protocol command handling. */ void V2Protocol_Init(void) { 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; } -- cgit v1.2.3