forked from mfulz_github/qmk_firmware
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.
This commit is contained in:
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;
|
bool MustSetAddress;
|
||||||
|
|
||||||
|
|
||||||
|
ISR(TIMER0_COMPA_vect, ISR_NOBLOCK)
|
||||||
|
{
|
||||||
|
if (TimeoutMSRemaining)
|
||||||
|
TimeoutMSRemaining--;
|
||||||
|
}
|
||||||
|
|
||||||
/** Initializes the hardware and software associated with the V2 protocol command handling. */
|
/** Initializes the hardware and software associated with the V2 protocol command handling. */
|
||||||
void V2Protocol_Init(void)
|
void V2Protocol_Init(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -165,6 +165,10 @@ 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 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 */
|
/* Set DATA line high for at least 90ns to disable /RESET functionality */
|
||||||
BITBANG_PDIDATA_PORT |= BITBANG_PDIDATA_MASK;
|
BITBANG_PDIDATA_PORT |= BITBANG_PDIDATA_MASK;
|
||||||
_delay_us(1);
|
_delay_us(1);
|
||||||
|
@ -314,6 +318,9 @@ void XPROGTarget_SendByte(const uint8_t Byte)
|
||||||
SoftUSART_Data = NewUSARTData;
|
SoftUSART_Data = NewUSARTData;
|
||||||
SoftUSART_BitCount = BITS_IN_USART_FRAME;
|
SoftUSART_BitCount = BITS_IN_USART_FRAME;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (TimeoutMSRemaining)
|
||||||
|
TimeoutMSRemaining = COMMAND_TIMEOUT_MS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Receives a byte via the software USART, blocking until data is received.
|
/** Receives a byte via the software USART, blocking until data is received.
|
||||||
|
@ -369,6 +376,9 @@ void XPROGTarget_SendBreak(void)
|
||||||
SoftUSART_Data = 0x0FFF;
|
SoftUSART_Data = 0x0FFF;
|
||||||
SoftUSART_BitCount = BITS_IN_USART_FRAME;
|
SoftUSART_BitCount = BITS_IN_USART_FRAME;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (TimeoutMSRemaining)
|
||||||
|
TimeoutMSRemaining = COMMAND_TIMEOUT_MS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void XPROGTarget_SetTxMode(void)
|
static void XPROGTarget_SetTxMode(void)
|
||||||
|
@ -405,6 +415,9 @@ static void XPROGTarget_SetTxMode(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (TimeoutMSRemaining)
|
||||||
|
TimeoutMSRemaining = COMMAND_TIMEOUT_MS;
|
||||||
|
|
||||||
IsSending = true;
|
IsSending = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ MCU = at90usb1287
|
||||||
# Target board (see library "Board Types" documentation, NONE for projects not requiring
|
# 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
|
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
|
||||||
# "Board" inside the application directory.
|
# "Board" inside the application directory.
|
||||||
BOARD = USBKEY
|
BOARD = XPLAIN
|
||||||
|
|
||||||
|
|
||||||
# Processor frequency.
|
# Processor frequency.
|
||||||
|
@ -157,7 +157,7 @@ CPPSRC =
|
||||||
# Even though the DOS/Win* filesystem matches both .s and .S the same,
|
# 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
|
# it will preserve the spelling of the filenames, and gcc itself does
|
||||||
# care about how the name is spelled on its command-line.
|
# 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].
|
# Optimization level, can be [0, 1, 2, 3, s].
|
||||||
|
|
Loading…
Reference in New Issue