diff options
Diffstat (limited to 'bootloaders/diskloader/src')
-rw-r--r-- | bootloaders/diskloader/src/DiskLoader.cpp | 4 | ||||
-rw-r--r-- | bootloaders/diskloader/src/Platform.h | 8 | ||||
-rw-r--r-- | bootloaders/diskloader/src/USBCore.cpp | 13 |
3 files changed, 19 insertions, 6 deletions
diff --git a/bootloaders/diskloader/src/DiskLoader.cpp b/bootloaders/diskloader/src/DiskLoader.cpp index 3cb5caa..bc1e026 100644 --- a/bootloaders/diskloader/src/DiskLoader.cpp +++ b/bootloaders/diskloader/src/DiskLoader.cpp @@ -119,6 +119,9 @@ int main(void) __attribute__ ((naked)); // STK500v1 main loop, very similar to optiboot in protocol and implementation int main() { + TXLED0; + RXLED0; + LED0; BOARD_INIT(); USBInit(); @@ -236,6 +239,7 @@ void LEDPulse() void Reboot() { + /* TODO - ZE - this should probably be a WDT reset instead, right? */ UDCON = 1; // Detatch USB UDIEN = 0; asm volatile ( // Reset vector to run firmware diff --git a/bootloaders/diskloader/src/Platform.h b/bootloaders/diskloader/src/Platform.h index 3f55c68..004933e 100644 --- a/bootloaders/diskloader/src/Platform.h +++ b/bootloaders/diskloader/src/Platform.h @@ -33,10 +33,10 @@ typedef unsigned long u32; #define BOARD_INIT() DDRC |= (1<<7); DDRB |= (1<<0); DDRE |= (1<<6); CPU_PRESCALE(0); DISABLE_JTAG(); #define LED0 PORTC &= ~(1<<7) #define LED1 PORTC |= (1<<7) -#define TXLED0 PORTE &= ~(1<<6) -#define TXLED1 PORTE |= (1<<6) -#define RXLED0 PORTB &= ~(1<<0) -#define RXLED1 PORTB |= (1<<0) +#define TXLED0 PORTE |= (1<<6) +#define TXLED1 PORTE &= ~(1<<6) +#define RXLED0 PORTB |= (1<<0) +#define RXLED1 PORTB &= ~(1<<0) #define TRANSFER_PGM 0x80 #define TRANSFER_RELEASE 0x40 diff --git a/bootloaders/diskloader/src/USBCore.cpp b/bootloaders/diskloader/src/USBCore.cpp index fbfad0e..52b960a 100644 --- a/bootloaders/diskloader/src/USBCore.cpp +++ b/bootloaders/diskloader/src/USBCore.cpp @@ -86,23 +86,27 @@ static inline void ClearOUT(void) static void Send(volatile const u8* data, u8 count) { + TXLED1; // light the TX LED while (count--) UEDATX = *data++; } void Recv(volatile u8* data, u8 count) { + RXLED1; // light the RX LED while (count--) *data++ = UEDATX; } static inline u8 Recv8() { + RXLED1; // light the RX LED return UEDATX; } static inline void Send8(u8 d) { + TXLED1; // light the TX LED UEDATX = d; } @@ -506,12 +510,17 @@ int USBGetChar() u8 temp = 0; for (temp=100; temp; temp--) asm volatile("nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"::); + RXLED0; // we turn the RX and TX LEDs on in the relevant Send or Recv instruction + TXLED0; // we turn them off here after some time has passed to ensure a minimum on time. } - if (!--_timeout) + if (!--_timeout) { + TXLED0; // switch off the RX and TX LEDs before starting the user sketch + RXLED0; Reboot(); // USB not connected, run firmware + } - LEDPulse(); +// LEDPulse(); } return -1; } |