diff options
Diffstat (limited to 'bootloaders/diskloader')
-rw-r--r-- | bootloaders/diskloader/DiskLoader.hex | 165 | ||||
-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 |
4 files changed, 101 insertions, 89 deletions
diff --git a/bootloaders/diskloader/DiskLoader.hex b/bootloaders/diskloader/DiskLoader.hex index 5e1534b..62734a8 100644 --- a/bootloaders/diskloader/DiskLoader.hex +++ b/bootloaders/diskloader/DiskLoader.hex @@ -1,4 +1,4 @@ -:1078000011241FBECFEFDAE0DEBFCDBFD0C04101F3
+:1078000011241FBECFEFDAE0DEBFCDBFBAC0410109
:1078100042144505560455026403740300001E9586
:1078200087020110030000C18081C106C0FF0A0069
:107830000CA10185037508150026FF00954009017C
@@ -13,87 +13,86 @@ :1078C000040100020A000000070502024000000750
:1078D00005830240000009040200010300000009C2
:1078E0002101010001221E00070584034000400021
-:1078F00020918A0130918B012F5F3F4F30938B0194
-:1079000020938A01832F9927982F87FD9095990FAF
-:10791000921710F447980895479A089581E080934C
-:10792000E0001092E200EE27FF27099408950F93DC
-:107930001F93CF93DF93982FEB01042F10E088E77C
-:107940006030780730F411E083E0FB01809357004A
-:10795000E895892F68E071E0402FD8D0112311F10C
-:1079600007B600FCFDCF402F4695FE01A8E0B1E030
-:1079700020E031E009C08D919D910C0130935700BA
-:10798000E895112432962F5F2417A8F385E0FE01B5
-:1079900080935700E89507B600FCFDCF81E1809306
-:1079A0005700E895DF91CF911F910F9108953F9A6D
-:1079B000209A6E9A90E8909361001092610081E89D
-:1079C00085BF95BF8AD084E18093880180E1809350
-:1079D0008901E0E0F0E0859194918F5F9F4F19F06D
-:1079E00081E080938D01EE24FF24DD24D394D5D152
-:1079F000082F8EE098E7FC0124913196029644917D
-:107A0000201711F02223B9F710928F0110928E01E6
-:107A100082E068E071E07AD0013479F46091080185
-:107A20006058633028F0683111F064E001C063E011
-:107A3000C62FD0E0CF5DD7480EC0063571F48091D7
-:107A40000801803311F011E022C080910A01C82F93
-:107A5000D0E0C25ED74811E022C0053721F413E020
-:107A6000CEE1D8E71CC0053539F4E0900801F0906C
-:107A70000901EE0CFF1C0AC0043631F482E0B701A4
-:107A80004091090154DF02C0043721F010E0C5E243
-:107A9000D8E705C010910901E701E10EF11C7DD185
-:107AA0008097B1F483E068E871E041E050E044D0B1
-:107AB000112329F0412F50E083E8BE013DD083E43B
-:107AC00069E871E041E050E037D0013509F08FCF2F
-:107AD000D0928D01EE24FF248ACF10928F01109254
-:107AE0008E0110928C0110928D0181E08093D7005D
-:107AF00080EA8093D80082E189BD09B400FEFDCF01
-:107B000080E98093D8001092E0000895FB018093F3
-:107B1000E9009BE60EC08091E80085FFFCCF8091D4
-:107B2000F10081938091E80085FD02C09093E80008
-:107B30004150442381F70895982FFB01282F20728C
-:107B400087708093E9003AE314C08091E80085FFD4
-:107B5000FCCF97FF02C0849101C080813196211132
-:107B600080E08093F1008091E80085FD02C03093B1
-:107B7000E800415050408FEF4F3F580731F796FFD4
-:107B800003C08AE38093E8000895809191018132D7
-:107B900079F420E030E003C080818093F100F901A6
-:107BA000E050FF4F2F5F3F4F28303105A9F71EC02F
-:107BB0008032B1F48091E80082FFFCCF20E030E019
-:107BC00003C08091F1008083F901E050FF4F2F5FE7
-:107BD0003F4F28303105A9F78BEF8093E80006C0AE
-:107BE000823221F4809192018093070181E008950F
-:107BF00020919301223231F1213081F4809196015C
-:107C000090919701089711F4209398018091980121
-:107C1000882309F03AC0E9E7F8E739C0223021F4B7
-:107C200084E6EBE8F8E711C0233069F58091920112
-:107C3000882319F4E9E4F8E72AC0813021F5EDE45E
-:107C4000F8E725C081E0EBE2F8E790919601282F54
-:107C5000981708F4292F90E03EEF8091E800857096
-:107C6000E1F38091E80082FD0EC09F5F84918093D4
-:107C7000F100892F8F7311F43093E8003196921739
-:107C800060F381E0089580E00895E7E6F8E78491E5
-:107C9000DCCF1092E9008091E80083FF5FC0E0E94B
-:107CA000F1E003C08091F100819381E0E839F807A9
-:107CB000C9F782EF8093E8008091900187FF05C0AB
-:107CC0008091E80080FFFCCF03C08EEF8093E80036
-:107CD00080919101853051F48091E80080FFFCCFC4
-:107CE0008091920180688093E30031C08930E1F493
-:107CF0008091920180938C01E7E2F8E791E031E016
-:107D000026E39093E9003093EB0084918093EC009C
-:107D10002093ED009F5F3196953099F78EE7809321
-:107D2000EA001092EA0013C0883029F480918C0197
-:107D30008093F1000CC0882319F41092F10007C061
-:107D4000863011F455DF01C020DF882321F08EEF4B
-:107D50008093E800089581E28093EB00089580917C
-:107D6000E1001092E100282F83FF0CC01092E9007F
-:107D700081E08093EB001092EC0082E38093ED00B1
-:107D800010928C0122FF08C080918D01882321F47C
-:107D900010928F0110928E0108951F9312E079DFE7
-:107DA000DEDF1093E9008091E80085FF0DC090911F
-:107DB000F1008091E80085FD03C08BE68093E80028
-:107DC000892F90E01F91089584E6000000000000D4
-:107DD00000008150D1F780918E0190918F01019721
-:107DE00090938F0180938E0180918E0190918F01ED
-:0A7DF000892B09F493DD7CDDD2CF6E
-:087DFA0000E1000000000000A0
+:1078F00081E08093E0001092E200EE27FF270994D8
+:1079000008950F931F93CF93DF93982FEB01042FCC
+:1079100010E088E76030780730F411E083E0FB0185
+:1079200080935700E895892F68E071E0402FDBD005
+:10793000112311F107B600FCFDCF402F4695FE0143
+:10794000A8E0B1E020E031E009C08D919D910C01EB
+:1079500030935700E895112432962F5F2417A8F32F
+:1079600085E0FE0180935700E89507B600FCFDCF47
+:1079700081E180935700E895DF91CF911F910F919E
+:107980000895769A289A47983F9A209A6E9A90E896
+:10799000909361001092610081E885BF95BF8AD005
+:1079A00084E18093880180E180938901E0E0F0E048
+:1079B000859194918F5F9F4F19F081E080938B01A7
+:1079C000EE24FF24DD24D394DDD1082F8EE098E748
+:1079D000FC012491319602964491201711F0222344
+:1079E000B9F710928D0110928C0182E068E071E08D
+:1079F0007AD0013479F4609108016058633028F03E
+:107A0000683111F064E001C063E0C62FD0E0CF5DC3
+:107A1000D7480EC0063571F480910801803311F00B
+:107A200011E022C080910A01C82FD0E0C25ED74881
+:107A300011E022C0053721F413E0CEE1D8E71CC0E5
+:107A4000053539F4E0900801F0900901EE0CFF1CB7
+:107A50000AC0043631F482E0B7014091090151DFD8
+:107A600002C0043721F010E0C5E2D8E705C010914C
+:107A70000901E701E10EF11C85D18097B1F483E0A3
+:107A800068E871E041E050E045D0112329F0412F32
+:107A900050E083E8BE013ED083E469E871E041E054
+:107AA00050E038D0013509F08FCFD0928B01EE2411
+:107AB000FF248ACF10928D0110928C0110928A01BE
+:107AC00010928B0181E08093D70080EA8093D800E8
+:107AD00082E189BD09B400FEFDCF80E98093D80022
+:107AE0001092E0000895FB018093E9009BE60FC02F
+:107AF0008091E80085FFFCCF28988091F100819368
+:107B00008091E80085FD02C09093E8004150442335
+:107B100079F70895982FFB01282F207287708093A2
+:107B2000E9003AE315C08091E80085FFFCCF97FF9C
+:107B300002C0849101C080813196211180E0769845
+:107B40008093F1008091E80085FD02C03093E80049
+:107B5000415050408FEF4F3F580729F796FF03C021
+:107B60008AE38093E800089580918F01813281F447
+:107B7000769820E030E003C080818093F100F90125
+:107B8000E050FF4F2F5F3F4F28303105A9F71FC04E
+:107B90008032B9F48091E80082FFFCCF289820E081
+:107BA00030E003C08091F1008083F901E050FF4F85
+:107BB0002F5F3F4F28303105A9F78BEF8093E80006
+:107BC00006C0823221F4809190018093070181E008
+:107BD000089520919101223231F1213081F4809178
+:107BE000940190919501089711F42093960180914A
+:107BF0009601882309F03BC0E9E7F8E73AC0223054
+:107C000021F484E6EBE8F8E711C0233071F58091A8
+:107C10009001882319F4E9E4F8E72BC0813029F5B5
+:107C2000EDE4F8E726C081E0EBE2F8E790919401FB
+:107C3000282F981708F4292F90E03EEF8091E80054
+:107C40008570E1F38091E80082FD0FC09F5F849111
+:107C500076988093F100892F8F7311F43093E800A8
+:107C60003196921758F381E0089580E00895E7E691
+:107C7000F8E78491DBCF1092E9008091E80083FF60
+:107C800062C02898EEE8F1E003C08091F100819392
+:107C900081E0E639F807C9F782EF8093E800809128
+:107CA0008E0187FF05C08091E80080FFFCCF03C0F4
+:107CB0008EEF8093E80080918F01853051F48091A0
+:107CC000E80080FFFCCF8091900180688093E30002
+:107CD00033C08930E1F48091900180938A01E7E21A
+:107CE000F8E791E031E026E39093E9003093EB0070
+:107CF00084918093EC002093ED009F5F3196953046
+:107D000099F78EE78093EA001092EA0015C0883058
+:107D100031F480918A0176988093F1000DC0882318
+:107D200021F476981092F10007C0863011F451DFEB
+:107D300001C01ADF882321F08EEF8093E8000895B8
+:107D400081E28093EB0008958091E1001092E100C0
+:107D5000282F83FF0CC01092E90081E08093EB0094
+:107D60001092EC0082E38093ED0010928A0122FFD2
+:107D700008C080918B01882321F410928D0110920C
+:107D80008C0108951F9312E076DFDEDF1093E90087
+:107D90008091E80085FF0EC028989091F1008091B5
+:107DA000E80085FD03C08BE68093E800892F90E012
+:107DB0001F91089584E6000000000000000081503B
+:107DC000D1F7289A769A80918C0190918D01019734
+:107DD00090938D0180938C0180918C0190918D0105
+:0C7DE000892B91F6769A289A83DDCECF8D
+:087DEC0000E1000000000000AE
:040000030000780081
:00000001FF
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; } |