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.

Dean Camera 15 years ago
parent 3d28d53c3e
commit a5e79333e5

File diff suppressed because one or more lines are too long

@ -1,23 +0,0 @@
#include <avr/io.h>
#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

@ -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)
{

@ -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;
}

@ -66,7 +66,7 @@ MCU = at90usb1287
# Target board (see library "Board Types" documentation, NONE for projects not requiring
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
# "Board" inside the application directory.
BOARD = USBKEY
BOARD = XPLAIN
# Processor frequency.
@ -157,7 +157,7 @@ CPPSRC =
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC = Lib/Timeout.S
ASRC =
# Optimization level, can be [0, 1, 2, 3, s].

Loading…
Cancel
Save