├── .cproject ├── .project ├── firmware ├── firmware.bin ├── firmware.cpp ├── firmware.cpp.d ├── firmware.cpp.eep ├── firmware.cpp.elf ├── firmware.cpp.hex ├── firmware.cpp.o ├── firmware.ino └── readme.md ├── flashstartexample └── flashstartexample.ino ├── hardware └── microbridge │ ├── .gitignore │ ├── README.md │ └── avr │ ├── boards.txt │ ├── bootloaders │ └── microbridge │ │ ├── .dep │ │ ├── mmc.o.d │ │ ├── pff.o.d │ │ └── stk500boot.o.d │ │ ├── Makefile │ │ ├── asmfunc.S │ │ ├── asmfunc.lst │ │ ├── asmfunc.o │ │ ├── avr_cpunames.h │ │ ├── avrinterruptnames.h │ │ ├── bins │ │ ├── README.txt │ │ ├── app.bin │ │ └── test.bin │ │ ├── command.h │ │ ├── diskio.h │ │ ├── integer.h │ │ ├── mmc.c │ │ ├── mmc.lst │ │ ├── mmc.o │ │ ├── pff.c │ │ ├── pff.h │ │ ├── pff.lst │ │ ├── pff.o │ │ ├── stk500boot.c │ │ ├── stk500boot.eep │ │ ├── stk500boot.elf │ │ ├── stk500boot.hex │ │ ├── stk500boot.lss │ │ ├── stk500boot.lst │ │ ├── stk500boot.map │ │ ├── stk500boot.o │ │ └── stk500boot.sym │ └── programmers.txt └── readme.md /.cproject: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | MicroBridge 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.cdt.managedbuilder.core.genmakebuilder 10 | clean,full,incremental, 11 | 12 | 13 | ?name? 14 | 15 | 16 | 17 | org.eclipse.cdt.make.core.append_environment 18 | true 19 | 20 | 21 | org.eclipse.cdt.make.core.autoBuildTarget 22 | all 23 | 24 | 25 | org.eclipse.cdt.make.core.buildArguments 26 | 27 | 28 | 29 | org.eclipse.cdt.make.core.buildCommand 30 | make 31 | 32 | 33 | org.eclipse.cdt.make.core.cleanBuildTarget 34 | clean 35 | 36 | 37 | org.eclipse.cdt.make.core.contents 38 | org.eclipse.cdt.make.core.activeConfigSettings 39 | 40 | 41 | org.eclipse.cdt.make.core.enableAutoBuild 42 | false 43 | 44 | 45 | org.eclipse.cdt.make.core.enableCleanBuild 46 | true 47 | 48 | 49 | org.eclipse.cdt.make.core.enableFullBuild 50 | true 51 | 52 | 53 | org.eclipse.cdt.make.core.fullBuildTarget 54 | all 55 | 56 | 57 | org.eclipse.cdt.make.core.stopOnError 58 | true 59 | 60 | 61 | org.eclipse.cdt.make.core.useDefaultBuildCmd 62 | true 63 | 64 | 65 | 66 | 67 | org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder 68 | full,incremental, 69 | 70 | 71 | 72 | 73 | 74 | org.eclipse.cdt.core.cnature 75 | org.eclipse.cdt.managedbuilder.core.managedBuildNature 76 | org.eclipse.cdt.managedbuilder.core.ScannerConfigNature 77 | 78 | 79 | -------------------------------------------------------------------------------- /firmware/firmware.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetProbe/MicroBridge-Arduino-ATMega2560/1aaff1d4fb30c761da0df71cf404aad10e545a5e/firmware/firmware.bin -------------------------------------------------------------------------------- /firmware/firmware.cpp: -------------------------------------------------------------------------------- 1 | #line 1 "firmware.ino" 2 | /* 3 | Blink 4 | Turns on an LED on for one second, then off for one second, repeatedly. 5 | 6 | This example code is in the public domain. 7 | */ 8 | 9 | // Pin 13 has an LED connected on most Arduino boards. 10 | // give it a name: 11 | #include "Arduino.h" 12 | void setup(); 13 | void loop(); 14 | #line 10 15 | int led = 13; 16 | 17 | // the setup routine runs once when you press reset: 18 | void setup() { 19 | Serial.begin(115200); 20 | Serial.println("We are now starting the blinking app"); 21 | 22 | // initialize the digital pin as an output. 23 | pinMode(led, OUTPUT); 24 | } 25 | 26 | // the loop routine runs over and over again forever: 27 | void loop() { 28 | Serial.println("blink loop"); 29 | digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 30 | delay(1000); // wait for a second 31 | digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 32 | delay(1000); // wait for a second 33 | } 34 | 35 | -------------------------------------------------------------------------------- /firmware/firmware.cpp.d: -------------------------------------------------------------------------------- 1 | \ 2 | /var/folders/v_/frz4s8vn63g2ztygqj155f6m0000gn/T/build4959438307243909504.tmp/firmware.cpp.o: \ 3 | /var/folders/v_/frz4s8vn63g2ztygqj155f6m0000gn/T/build4959438307243909504.tmp/firmware.cpp \ 4 | /Applications/Arduino-1.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Arduino.h \ 5 | /Applications/Arduino-1.app/Contents/Resources/Java/hardware/arduino/cores/arduino/binary.h \ 6 | /Applications/Arduino-1.app/Contents/Resources/Java/hardware/arduino/cores/arduino/WCharacter.h \ 7 | /Applications/Arduino-1.app/Contents/Resources/Java/hardware/arduino/cores/arduino/WString.h \ 8 | /Applications/Arduino-1.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.h \ 9 | /Applications/Arduino-1.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Stream.h \ 10 | /Applications/Arduino-1.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h \ 11 | /Applications/Arduino-1.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Printable.h \ 12 | /Applications/Arduino-1.app/Contents/Resources/Java/hardware/arduino/cores/arduino/new.h \ 13 | /Applications/Arduino-1.app/Contents/Resources/Java/hardware/arduino/variants/mega/pins_arduino.h 14 | -------------------------------------------------------------------------------- /firmware/firmware.cpp.eep: -------------------------------------------------------------------------------- 1 | :00000001FF 2 | -------------------------------------------------------------------------------- /firmware/firmware.cpp.elf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetProbe/MicroBridge-Arduino-ATMega2560/1aaff1d4fb30c761da0df71cf404aad10e545a5e/firmware/firmware.cpp.elf -------------------------------------------------------------------------------- /firmware/firmware.cpp.hex: -------------------------------------------------------------------------------- 1 | :1000000002C100002AC1000028C1000026C1000072 2 | :1000100024C1000022C1000020C100001EC1000058 3 | :100020001CC100001AC1000018C1000016C1000068 4 | :1000300014C1000012C1000010C100000EC1000078 5 | :100040000CC100000AC1000008C1000006C1000088 6 | :1000500004C1000002C1000000C100002BC100006B 7 | :10006000FCC0000010C3000052C40000F6C0000035 8 | :10007000F4C00000F2C00000F0C00000EEC00000BC 9 | :10008000ECC00000EAC00000E8C00000E6C00000CC 10 | :100090003AC300007BC40000E0C00000DEC00000E6 11 | :1000A000DCC00000DAC00000D8C00000D6C00000EC 12 | :1000B000D4C00000D2C00000D0C00000CEC00000FC 13 | :1000C000CCC00000CAC00000C8C000005CC3000073 14 | :1000D0009CC40000C2C0000096C30000D5C400004C 15 | :1000E000BCC0000000002100240027002A002D00D1 16 | :1000F0003000330001010000040107010A01000083 17 | :100100002200250028002B002E00310034000201BF 18 | :100110000000050108010B0100002000230026005B 19 | :1001200029002C002F00320000010000030106010D 20 | :10013000090105050505070508080808020202026D 21 | :100140000A0A080804040404010101010101010173 22 | :100150000303030303030303040707070C0C0C0C3E 23 | :100160000C0C0C0C02020202060606060606060627 24 | :100170000B0B0B0B0B0B0B0B0102102020080810B4 25 | :100180002040102040800201020108040201010207 26 | :1001900004081020408080402010080402018004E0 27 | :1001A000020180402010080402010804020101023B 28 | :1001B0000408102040800102040810204080000044 29 | :1001C000090A02080B0C0D070603040100000000D9 30 | :1001D000000000000000000000000000000000001F 31 | :1001E0000000000000000000000011100F000000DF 32 | :1001F00000000000000000000000000000000000FF 33 | :1002000000000000B30611241FBECFEFD1E2DEBF15 34 | :10021000CDBF00E00CBF12E0A0E0B2E0EAE2F1E105 35 | :1002200000E00BBF02C007900D92A234B107D9F7CE 36 | :100230001BBE14E0A2E4B2E001C01D92A33FB107CF 37 | :10024000E1F712E0C6E0D2E003C02297FE0167D7D3 38 | :10025000C430D107D1F7BDD666C7D2CE8BE694E0C5 39 | :1002600060E072E027D78091300261E0D9D168EE7A 40 | :1002700073E080E090E066D08091300260E0D0D101 41 | :1002800068EE73E080E090E05DC00F931F930BE693 42 | :1002900014E0C80140E052EC61E070E034D4C801E1 43 | :1002A0006BE072E007D78091300261E006D11F91C8 44 | :1002B0000F9108951F920F920FB60F9211242F9352 45 | :1002C0003F938F939F93AF93BF93809146029091FA 46 | :1002D0004702A0914802B091490230914A0201962A 47 | :1002E000A11DB11D232F2D5F2D3720F02D57019615 48 | :1002F000A11DB11D20934A028093460290934702AC 49 | :10030000A0934802B0934902809142029091430227 50 | :10031000A0914402B09145020196A11DB11D8093A8 51 | :10032000420290934302A0934402B0934502BF91CE 52 | :10033000AF919F918F913F912F910F900FBE0F9092 53 | :100340001F9018959B01AC017FB7F89480914202F1 54 | :1003500090914302A0914402B091450266B5A89BDA 55 | :1003600005C06F3F19F00196A11DB11D7FBFBA2FC7 56 | :10037000A92F982F8827860F911DA11DB11D62E01E 57 | :10038000880F991FAA1FBB1F6A95D1F7BC012DC00A 58 | :10039000FFB7F8948091420290914302A0914402E9 59 | :1003A000B0914502E6B5A89B05C0EF3F19F0019654 60 | :1003B000A11DB11DFFBFBA2FA92F982F88278E0F1F 61 | :1003C000911DA11DB11DE2E0880F991FAA1FBB1F3F 62 | :1003D000EA95D1F7861B970B885E9340C8F22150AF 63 | :1003E00030404040504068517C4F21153105410557 64 | :1003F000510571F60895789484B5826084BD84B502 65 | :10040000816084BD85B5826085BD85B5816085BD0F 66 | :10041000EEE6F0E0808181608083E1E8F0E0108228 67 | :10042000808182608083808181608083E0E8F0E069 68 | :10043000808181608083E1EBF0E080818460808353 69 | :10044000E0EBF0E0808181608083E1E9F0E0808191 70 | :1004500082608083808181608083E0E9F0E0808138 71 | :1004600081608083E1EAF0E0808182608083808126 72 | :1004700081608083E0EAF0E0808181608083E1E256 73 | :10048000F1E0808182608083808181608083E0E20E 74 | :10049000F1E0808181608083EAE7F0E08081846020 75 | :1004A000808380818260808380818160808380817D 76 | :1004B000806880831092C1000895CF93DF93482F06 77 | :1004C00050E0CA0188589E4FFC0134914E5C5E4F4B 78 | :1004D000FA018491882369F190E0880F991FFC014B 79 | :1004E000EC51FF4FA591B491FC01E250FF4FC59133 80 | :1004F000D491662351F42FB7F8948C91932F909553 81 | :1005000089238C93888189230BC0623061F42FB7D3 82 | :10051000F8948C91932F909589238C938881832BC9 83 | :1005200088832FBF06C09FB7F8948C91832B8C9340 84 | :100530009FBFDF91CF910895893009F449C08A3077 85 | :10054000A0F4843051F1853040F4823079F1833069 86 | :1005500000F5813009F063C026C0873079F188301A 87 | :1005600098F5863009F05BC025C08D3009F442C093 88 | :100570008E3028F48B30B1F18C30C0F52DC0803135 89 | :1005800009F442C0813109F445C08F3009F047C0F9 90 | :1005900037C0809180008F7703C0809180008F7D6D 91 | :1005A00080938000089584B58F7702C084B58F7DD5 92 | :1005B00084BD08958091B0008F7703C08091B00012 93 | :1005C0008F7D8093B0000895809190008F7707C051 94 | :1005D000809190008F7D03C080919000877F8093F1 95 | :1005E000900008958091A0008F7707C08091A000AF 96 | :1005F0008F7D03C08091A000877F8093A000089525 97 | :10060000809120018F7703C0809120018F7D80939E 98 | :100610002001089580912001877F80932001089513 99 | :10062000FF920F931F93F62E482F50E0CA01825479 100 | :100630009E4FFC012491CA0188589E4FFC011491E1 101 | :100640004E5C5E4FFA0104910023C1F0222311F0A9 102 | :10065000822F72DFE02FF0E0EE0FFF1FE250FF4F1E 103 | :10066000A591B4919FB7F894FF2021F48C91109537 104 | :10067000812302C08C91812B8C939FBF1F910F917E 105 | :10068000FF90089508951F920F920FB60F920BB628 106 | :100690000F9211242F933F934F938F939F93EF9338 107 | :1006A000FF938091C00082FD1DC04091C600209143 108 | :1006B0008B0230918C022F5F3F4F2F7330708091EF 109 | :1006C0008D0290918E022817390771F0E0918B020C 110 | :1006D000F0918C02E55BFD4F408330938C022093B8 111 | :1006E0008B0202C08091C600FF91EF919F918F9184 112 | :1006F0004F913F912F910F900BBE0F900FBE0F9017 113 | :100700001F90189508951F920F920FB60F920BB677 114 | :100710000F9211242F933F934F938F939F93EF93B7 115 | :10072000FF938091C80082FD1DC04091CE002091B2 116 | :100730001303309114032F5F3F4F2F73307080915C 117 | :100740001503909116032817390771F0E0911303F0 118 | :10075000F0911403ED52FD4F408330931403209326 119 | :10076000130302C08091CE00FF91EF919F918F9172 120 | :100770004F913F912F910F900BBE0F900FBE0F9096 121 | :100780001F90189508951F920F920FB60F920BB6F7 122 | :100790000F9211242F933F934F938F939F93EF9337 123 | :1007A000FF938091D00082FD1DC04091D600209122 124 | :1007B0009B0330919C032F5F3F4F2F7330708091CC 125 | :1007C0009D0390919E032817390771F0E0919B03D8 126 | :1007D000F0919C03E55AFC4F408330939C03209397 127 | :1007E0009B0302C08091D600FF91EF919F918F9162 128 | :1007F0004F913F912F910F900BBE0F900FBE0F9016 129 | :100800001F90189508951F920F920FB60F920BB676 130 | :100810000F9211242F933F934F938F939F93EF93B6 131 | :10082000FF938091300182FD1DC0409136012091DF 132 | :100830002304309124042F5F3F4F2F733070809139 133 | :100840002504909126042817390771F0E0912304BC 134 | :10085000F0912404ED51FC4F408330932404209305 135 | :10086000230402C080913601FF91EF919F918F91F7 136 | :100870004F913F912F910F900BBE0F900FBE0F9095 137 | :100880001F901895E0917704F0917804E05CFF4F99 138 | :100890008191919120813181821B930B8F73907094 139 | :1008A000892B09F0EFDEE0919904F0919A04E05C65 140 | :1008B000FF4F8191919120813181821B930B8F7326 141 | :1008C0009070892B09F01EDFE091BB04F091BC040D 142 | :1008D000E05CFF4F8191919120813181821B930BCC 143 | :1008E0008F739070892B09F04DDFE091DD04F0915A 144 | :1008F000DE04E05CFF4F8191919120813181821B68 145 | :10090000930B8F739070892B09F07CCF08951F9201 146 | :100910000F920FB60F920BB60F9211242F933F93A5 147 | :100920008F939F93EF93FF932091CF023091D0024A 148 | :100930008091D1029091D2022817390731F4809129 149 | :10094000C1008F7D8093C10014C0E091D102F0916D 150 | :10095000D202E157FD4F20818091D1029091D202C5 151 | :1009600001968F7390709093D2028093D10220935E 152 | :10097000C600FF91EF919F918F913F912F910F9022 153 | :100980000BBE0F900FBE0F901F9018951F920F92E5 154 | :100990000FB60F920BB60F9211242F933F938F93A4 155 | :1009A0009F93EF93FF9320915703309158038091C9 156 | :1009B000590390915A032817390731F48091C900DF 157 | :1009C0008F7D8093C90014C0E0915903F0915A03C0 158 | :1009D000E95EFC4F20818091590390915A03019662 159 | :1009E0008F73907090935A03809359032093CE0095 160 | :1009F000FF91EF919F918F913F912F910F900BBE9F 161 | :100A00000F900FBE0F901F9018951F920F920FB668 162 | :100A10000F920BB60F9211242F933F938F939F93B6 163 | :100A2000EF93FF932091DF033091E0038091E10386 164 | :100A30009091E2032817390731F48091D1008F7D1E 165 | :100A40008093D10014C0E091E103F091E203E156FC 166 | :100A5000FC4F20818091E1039091E20301968F7316 167 | :100A600090709093E2038093E1032093D600FF916E 168 | :100A7000EF919F918F913F912F910F900BBE0F900F 169 | :100A80000FBE0F901F9018951F920F920FB60F92E6 170 | :100A90000BB60F9211242F933F938F939F93EF9355 171 | :100AA000FF932091670430916804809169049091CC 172 | :100AB0006A042817390731F4809131018F7D8093C2 173 | :100AC000310114C0E0916904F0916A04E95DFB4FC3 174 | :100AD00020818091690490916A0401968F739070CF 175 | :100AE00090936A048093690420933601FF91EF91FB 176 | :100AF0009F918F913F912F910F900BBE0F900FBE42 177 | :100B00000F901F901895AF92BF92DF92EF92FF92D5 178 | :100B10000F931F93CF93DF93EC017A018B01DD24B8 179 | :100B2000403081EE580780E0680780E0780711F0D8 180 | :100B3000DD24D39491E0A92EB12CEC89FD89DD2030 181 | :100B400069F0C50108A002C0880F991F0A94E2F756 182 | :100B5000808360E079E08DE390E005C0108260E87A 183 | :100B600074E88EE190E0A8019701B5D221503040A1 184 | :100B700040405040569547953795279580E1203065 185 | :100B8000380720F0DD2011F0DD24D7CFE889F9897E 186 | :100B90003083EA89FB89208319A2EE89FF8940818D 187 | :100BA00021E030E0C9010C8C02C0880F991F0A9423 188 | :100BB000E2F7482B4083EE89FF894081C9010D8C03 189 | :100BC00002C0880F991F0A94E2F7482B4083EE89F0 190 | :100BD000FF894081C9010E8C02C0880F991F0A94B9 191 | :100BE000E2F7482B4083EE89FF8980810F8C02C099 192 | :100BF000220F331F0A94E2F7209528232083DF91E8 193 | :100C0000CF911F910F91FF90EF90DF90BF90AF9029 194 | :100C10000895DC011C96ED91FC911D97E05CFF4F5F 195 | :100C20002191319180819181281B390B2F73307074 196 | :100C3000C9010895DC011C96ED91FC911D97E05CC3 197 | :100C4000FF4F20813181E054F040DF01AE5BBF4FA8 198 | :100C50008D919C9111972817390719F42FEF3FEFC9 199 | :100C600007C08D919C91E80FF91F8081282F30E0FB 200 | :100C7000C9010895DC011C96ED91FC911D97E05C83 201 | :100C8000FF4F20813181E054F040DF01AE5BBF4F68 202 | :100C90008D919C9111972817390719F42FEF3FEF89 203 | :100CA00010C08D919C911197E80FF91F20818D91B3 204 | :100CB0009C91119701968F73907011969C938E93CF 205 | :100CC00030E0C9010895DC0191968C9191978823B9 206 | :100CD00039F05496ED91FC915597808186FFF9CFBC 207 | :100CE00091961C920895CF93DF93EC01EE85FF85DA 208 | :100CF000E05CFF4F20813181E054F0402F5F3F4F97 209 | :100D00002F733070DF01AE5BBF4F8D919C911197B7 210 | :100D100028173907D1F3E05CFF4F80819181E054BF 211 | :100D2000F040E80FF91F6083EE85FF85E05CFF4F20 212 | :100D300031832083EE89FF89208181E090E00F8C50 213 | :100D400002C0880F991F0A94E2F7282B208381E0C4 214 | :100D500089A3EC89FD8980818064808381E090E0B3 215 | :100D6000DF91CF9108951F9310926E0410926D043D 216 | :100D700028EE33E040E050E020936F04309370049D 217 | :100D8000409371045093720466E372E070936C04B4 218 | :100D900060936B048BE492E09093780480937704E3 219 | :100DA0008FE892E090937A048093790485EC90E048 220 | :100DB00090937C0480937B0484EC90E090937E0479 221 | :100DC00080937D0480EC90E09093800480937F0476 222 | :100DD00081EC90E0909382048093810482EC90E017 223 | :100DE000909384048093830486EC90E0909386042F 224 | :100DF0008093850414E010938704B3E0B0938804D3 225 | :100E0000A7E0A0938904F5E0F0938A04E1E0E09381 226 | :100E10008B041092900410928F04209391043093CD 227 | :100E20009204409393045093940470938E046093BF 228 | :100E30008D0483ED92E090939A048093990487E166 229 | :100E400093E090939C0480939B048DEC90E09093AE 230 | :100E50009E0480939D048CEC90E09093A00480937A 231 | :100E60009F0488EC90E09093A2048093A10489EC05 232 | :100E700090E09093A4048093A3048AEC90E0909374 233 | :100E8000A6048093A5048EEC90E09093A804809330 234 | :100E9000A7041093A904B093AA04A093AB04F09301 235 | :100EA000AC04E093AD041092B2041092B10420930C 236 | :100EB000B3043093B4044093B5045093B6047093D4 237 | :100EC000B0046093AF048BE593E09093BC048093EF 238 | :100ED000BB048FE993E09093BE048093BD0485ED3D 239 | :100EE00090E09093C0048093BF0484ED90E09093D1 240 | :100EF000C2048093C10480ED90E09093C404809379 241 | :100F0000C30481ED90E09093C6048093C50482ED04 242 | :100F100090E09093C8048093C70486ED90E090938E 243 | :100F2000CA048093C9041093CB04B093CC04A0935B 244 | :100F3000CD04F093CE04E093CF041092D404109229 245 | :100F4000D3042093D5043093D6044093D704509310 246 | :100F5000D8047093D2046093D10483EE93E090930D 247 | :100F6000DE048093DD0487E294E09093E0048093B4 248 | :100F7000DF0485E391E09093E2048093E10484E34D 249 | :100F800091E09093E4048093E30480E391E09093F4 250 | :100F9000E6048093E50481E391E09093E804809374 251 | :100FA000E70482E391E09093EA048093E90486E306 252 | :100FB00091E09093EC048093EB041093ED04B093D4 253 | :100FC000EE04A093EF04F093F004E093F1041F917A 254 | :100FD0000895CF93DF930FDA58D9C2E4D4E03ED915 255 | :100FE0002097E9F34FDCFBCFCF92DF92EF92FF9295 256 | :100FF0000F931F93CF93DF937C016B018A01C0E0B5 257 | :10100000D0E00FC0D6016D916D01D701ED91FC913B 258 | :101010000190F081E02DC7011995C80FD91F01502B 259 | :1010200010400115110571F7CE01DF91CF911F918D 260 | :101030000F91FF90EF90DF90CF900895EF92FF9285 261 | :101040000F931F938C01DC01ED91FC910190F081D5 262 | :10105000E02D6DE019957C01D801ED91FC91019096 263 | :10106000F081E02DC8016AE019959C012E0D3F1D0D 264 | :10107000C9011F910F91FF90EF900895CF93DF93D7 265 | :10108000EC016115710519F420E030E00FC0DB01BF 266 | :101090000D900020E9F71197A61BB70BE881F981A5 267 | :1010A0000280F381E02DAD0119959C01C901DF910A 268 | :1010B000CF910895EF92FF920F931F937C01DEDF93 269 | :1010C0008C01C701BBDF080F191FC8011F910F91C9 270 | :1010D000FF90EF900895A1E21A2EAA1BBB1BFD0101 271 | :1010E0000DC0AA1FBB1FEE1FFF1FA217B307E40707 272 | :1010F000F50720F0A21BB30BE40BF50B661F771F5F 273 | :10110000881F991F1A9469F760957095809590953E 274 | :101110009B01AC01BD01CF010895EE0FFF1F0590AB 275 | :0A112000F491E02D1994F894FFCF2C 276 | :10112A00626C696E6B206C6F6F700057652061721C 277 | :10113A0065206E6F77207374617274696E672074AC 278 | :10114A00686520626C696E6B696E672061707000F9 279 | :10115A000D00000000007306F40709063A061A0695 280 | :02116A0063061A 281 | :00000001FF 282 | -------------------------------------------------------------------------------- /firmware/firmware.cpp.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetProbe/MicroBridge-Arduino-ATMega2560/1aaff1d4fb30c761da0df71cf404aad10e545a5e/firmware/firmware.cpp.o -------------------------------------------------------------------------------- /firmware/firmware.ino: -------------------------------------------------------------------------------- 1 | /* 2 | Blink 3 | Turns on an LED on for one second, then off for one second, repeatedly. 4 | 5 | This example code is in the public domain. 6 | */ 7 | 8 | // Pin 13 has an LED connected on most Arduino boards. 9 | // give it a name: 10 | int led = 13; 11 | 12 | // the setup routine runs once when you press reset: 13 | void setup() { 14 | Serial.begin(115200); 15 | Serial.println("We are now starting the blinking app"); 16 | 17 | // initialize the digital pin as an output. 18 | pinMode(led, OUTPUT); 19 | } 20 | 21 | // the loop routine runs over and over again forever: 22 | void loop() { 23 | Serial.println("blink loop"); 24 | digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 25 | delay(1000); // wait for a second 26 | digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 27 | delay(1000); // wait for a second 28 | } 29 | -------------------------------------------------------------------------------- /firmware/readme.md: -------------------------------------------------------------------------------- 1 | to generate the apropriate bin file use command below : 2 | 3 | avr-objcopy -I elf32-avr -O binary firmware.cpp.elf firmware.bin 4 | 5 | -------------------------------------------------------------------------------- /flashstartexample/flashstartexample.ino: -------------------------------------------------------------------------------- 1 | /* 2 | Blink 3 | Turns on an LED on for one second, then off for one second, repeatedly. 4 | 5 | This example code is in the public domain. 6 | */ 7 | 8 | // Pin 13 has an LED connected on most Arduino boards. 9 | // give it a name: 10 | int led = 13; 11 | #include "EEPROM.h" 12 | #include 13 | // the setup routine runs once when you press reset: 14 | void setup() { 15 | Serial.begin(115200); 16 | Serial.println("Press 'F' and 'enter' to set flagbit in eeprom 0x1FF to 0xF0 "); 17 | Serial.println("also to induce watchdog timeout which triggers the bootloader "); 18 | Serial.println("and flashes the new firmware on the sd card"); 19 | 20 | } 21 | 22 | // the loop routine runs over and over again forever: 23 | void loop() { 24 | char inChar = '\0'; 25 | 26 | while (Serial.available() > 0) { 27 | inChar = Serial.read(); 28 | } 29 | wdt_enable(WDTO_500MS); // have the wdt reset the chip 30 | // if 500ms passes without a reset 31 | if(inChar == 'F'){ 32 | Serial.println(""); 33 | Serial.println("rebooting and flashing with firmware.bin on sdcard"); 34 | EEPROM.write(0x1FF,0xF0); 35 | wdt_reset(); 36 | delay(600); // wait 600ms to timeout wdt 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /hardware/microbridge/.gitignore: -------------------------------------------------------------------------------- 1 | # OS generated files # 2 | ###################### 3 | .DS_Store 4 | .DS_Store? 5 | ._* 6 | .Spotlight-V100 7 | .Trashes 8 | ehthumbs.db 9 | Thumbs.db -------------------------------------------------------------------------------- /hardware/microbridge/README.md: -------------------------------------------------------------------------------- 1 | USB and SDCARD Firmware flashing for the ARDUINO ATMEGA 2560 and ADK 2 | --------------------------------------------------------------------- 3 | 4 | master branch is sdcard flash 5 | 6 | 7 | mechanics : 8 | 9 | The bootloader looks for byte in eeprom at address 0x1FF: 10 | 11 | -if it is set to 0xF0 bootloader will look for a bin file on the sdcard named 12 | firmware.bin and use it to flash the firmware then reset the byte to 0xFF so it 13 | does this only once 14 | 15 | -otherwise no action is taken and bootloader works as a arduino bootloader except 16 | some of the debugging functions are missing 17 | 18 | Setup 19 | ADAFruit micro sdcard 5V ready: 20 | 21 | SDCARD on ATMEGA 2560 or ADK 22 | 23 | pin 50 - DO 24 | 25 | pin 51 - DI 26 | 27 | pin 52 - CLK 28 | 29 | pin 53 - CS 30 | 31 | if you have an sd card shield which is different from this setup you need to change 32 | the pinout in asmfunc.S and recompile the bootloader !!! 33 | 34 | Flashing bootloader : 35 | 36 | - copy the entire 'hardware' folder to your Sketchbook folder 37 | 38 | - restart arduino ide 39 | 40 | - you should now see under tools -> boards -> Arduino mega 2560 (Dual sd bootloader) (select this) 41 | 42 | - set the appropriate programmer 43 | 44 | - burn bootloader 45 | 46 | Using arduino ISP bootloader : 47 | 48 | - connect arduino atmega 2560 49 | 50 | - upload sketch 'Arduino ISP' (found in file -> examples) 51 | 52 | Atmega2560 to Atmega 2560 connections: 53 | programmer - receiver 54 | pin 50 pin 50 55 | pin 51 pin 51 56 | pin 52 pin 52 57 | pin 53 reset 58 | 5v 5v 59 | ground ground 60 | aditionally on programmer you have to put a capacitor between reset and ground (2.2microf works) 61 | if you don't do this it won't work !!! 62 | 63 | Compile bootloader: 64 | 65 | install Crosspack (http://www.obdev.at/products/crosspack/index.html) 66 | 67 | Navigate to Sketchbook_Folder/hardware/microbridge/avr/bootladers/microbridge/ 68 | 69 | issue : 70 | 71 | - make clean 72 | 73 | - make all 74 | 75 | bootloader output : 76 | 77 | Size after: 78 | AVR Memory Usage 79 | ---------------- 80 | Device: atmega2560 81 | 82 | Program: 6116 bytes (2.3% Full) 83 | (.text + .data + .bootloader) 84 | 85 | Data: 333 bytes (4.1% Full) 86 | (.data + .bss + .noinit) 87 | 88 | 89 | Generate BIN file: 90 | 91 | To generate a bin file you need issue the following command on you apps elf executable : 92 | 93 | avr-objcopy -I elf32-avr -O binary firmware.cpp.elf firmware.bin 94 | 95 | this generates firmware.bin which can be put on the sd for flashing your firmware. You can find the elf 96 | file in you apps build directory. 97 | 98 | Using olimex usb to upload bootloader: 99 | avrdude -c stk500v2 -p m2560 -P /dev/tty.usbmodemfd131 -B 500 -e -u -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xD8:m -U efuse:w:0xFF:m -F 100 | 101 | avrdude -p m2560 -c stk500v2 -P /dev/tty.usbmodemfa131 -F -U flash:w:stk500boot.hex -b 115200 -B1 -U lock:w:0x0F:m 102 | 103 | avrdude -p m168 -c usbtiny -e -u -U lock:w:0x3f:m -U efuse:w:0x00:m -U hfuse:w:0xDD:m -U lfuse:w:0xFF:m 104 | 105 | 106 | avrdude -p m2560 -c stk500v2 -P /dev/tty.usbmodemfd131 -U flash:w:stk500boot_v2_mega2560.hex -U lock:w:0x0F:m -v 107 | avrdude -c stk500v2 -p m2560 -P /dev/tty.usbmodemfd131 -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xD8:m -U lfuse:w:0xFF:m -e -v 108 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/boards.txt: -------------------------------------------------------------------------------- 1 | microbridge.name=Arduino Mega 2560 (DUAL SD Bootloader) 2 | 3 | microbridge.upload.tool=arduino:avrdude 4 | microbridge.upload.protocol=wiring 5 | microbridge.upload.maximum_size=258048 6 | microbridge.upload.speed=115200 7 | 8 | microbridge.bootloader.tool=arduino:avrdude 9 | microbridge.bootloader.low_fuses=0xFF 10 | microbridge.bootloader.high_fuses=0xD8 11 | microbridge.bootloader.extended_fuses=0xFD 12 | microbridge.bootloader.file=microbridge/stk500boot.hex 13 | microbridge.bootloader.unlock_bits=0x3F 14 | microbridge.bootloader.lock_bits=0x0F 15 | 16 | microbridge.build.board=AVR_MEGA2560 17 | microbridge.build.mcu=atmega2560 18 | microbridge.build.f_cpu=16000000L 19 | microbridge.build.core=arduino:arduino 20 | microbridge.build.variant=arduino:mega 21 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/.dep/mmc.o.d: -------------------------------------------------------------------------------- 1 | mmc.o: mmc.c pff.h integer.h diskio.h \ 2 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/io.h \ 3 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/sfr_defs.h \ 4 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/inttypes.h \ 5 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/include/stdint.h \ 6 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/stdint.h \ 7 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/iom2560.h \ 8 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/iomxx0_1.h \ 9 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/portpins.h \ 10 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/common.h \ 11 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/version.h \ 12 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/fuse.h \ 13 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/lock.h 14 | 15 | pff.h: 16 | 17 | integer.h: 18 | 19 | diskio.h: 20 | 21 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/io.h: 22 | 23 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/sfr_defs.h: 24 | 25 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/inttypes.h: 26 | 27 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/include/stdint.h: 28 | 29 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/stdint.h: 30 | 31 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/iom2560.h: 32 | 33 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/iomxx0_1.h: 34 | 35 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/portpins.h: 36 | 37 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/common.h: 38 | 39 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/version.h: 40 | 41 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/fuse.h: 42 | 43 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/lock.h: 44 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/.dep/pff.o.d: -------------------------------------------------------------------------------- 1 | pff.o: pff.c pff.h integer.h diskio.h 2 | 3 | pff.h: 4 | 5 | integer.h: 6 | 7 | diskio.h: 8 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/.dep/stk500boot.o.d: -------------------------------------------------------------------------------- 1 | stk500boot.o: stk500boot.c \ 2 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/inttypes.h \ 3 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/include/stdint.h \ 4 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/stdint.h \ 5 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/io.h \ 6 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/sfr_defs.h \ 7 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/iom2560.h \ 8 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/iomxx0_1.h \ 9 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/portpins.h \ 10 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/common.h \ 11 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/version.h \ 12 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/fuse.h \ 13 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/lock.h \ 14 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/interrupt.h \ 15 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/boot.h \ 16 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/eeprom.h \ 17 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/include/stddef.h \ 18 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/include-fixed/limits.h \ 19 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/pgmspace.h \ 20 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/util/delay.h \ 21 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/util/delay_basic.h \ 22 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/math.h \ 23 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/stdlib.h \ 24 | command.h \ 25 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/string.h \ 26 | pff.h integer.h avr_cpunames.h 27 | 28 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/inttypes.h: 29 | 30 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/include/stdint.h: 31 | 32 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/stdint.h: 33 | 34 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/io.h: 35 | 36 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/sfr_defs.h: 37 | 38 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/iom2560.h: 39 | 40 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/iomxx0_1.h: 41 | 42 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/portpins.h: 43 | 44 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/common.h: 45 | 46 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/version.h: 47 | 48 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/fuse.h: 49 | 50 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/lock.h: 51 | 52 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/interrupt.h: 53 | 54 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/boot.h: 55 | 56 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/eeprom.h: 57 | 58 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/include/stddef.h: 59 | 60 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/include-fixed/limits.h: 61 | 62 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/avr/pgmspace.h: 63 | 64 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/util/delay.h: 65 | 66 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/util/delay_basic.h: 67 | 68 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/math.h: 69 | 70 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/stdlib.h: 71 | 72 | command.h: 73 | 74 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/include/string.h: 75 | 76 | pff.h: 77 | 78 | integer.h: 79 | 80 | avr_cpunames.h: 81 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/Makefile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetProbe/MicroBridge-Arduino-ATMega2560/1aaff1d4fb30c761da0df71cf404aad10e545a5e/hardware/microbridge/avr/bootloaders/microbridge/Makefile -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/asmfunc.S: -------------------------------------------------------------------------------- 1 | ;---------------------------------------------------------------------------; 2 | ; MMC hardware controls and Flash controls (C)ChaN, 2010 3 | ;---------------------------------------------------------------------------; 4 | ; Hardware dependent macros to be modified 5 | 6 | //sparkfun microsd 7 | //#define DDR_CS _SFR_IO_ADDR(DDRB), 0 // MMC CS pin (DDR, PORT) 8 | //#define PORT_CS _SFR_IO_ADDR(PORTB), 0 9 | // i2GPS 10 | //#define DDR_CS _SFR_IO_ADDR(DDRB), 2 // MMC CS pin (DDR, PORT) 11 | //#define PORT_CS _SFR_IO_ADDR(PORTB), 2 12 | 13 | // Arduino Ethernet 14 | #define DDR_CS _SFR_IO_ADDR(DDRB), 0 // MMC CS pin (DDR, PORT) 15 | #define PORT_CS _SFR_IO_ADDR(PORTB), 0 16 | 17 | 18 | #define DDR_CK _SFR_IO_ADDR(DDRB), 1 // MMC SCLK pin (DDR, PORT) 19 | #define PORT_CK _SFR_IO_ADDR(PORTB), 1 20 | 21 | #define DDR_DI _SFR_IO_ADDR(DDRB), 2 // MMC DI pin (DDR, PORT) 22 | #define PORT_DI _SFR_IO_ADDR(PORTB), 2 23 | 24 | #define PIN_DO _SFR_IO_ADDR(PINB), 3 // MMC DO pin (PIN, PORT) 25 | #define PORT_DO _SFR_IO_ADDR(PORTB), 3 26 | 27 | 28 | 29 | ;---------------------------------------------------------------------------; 30 | .nolist 31 | #include 32 | .list 33 | .text 34 | 35 | 36 | ;---------------------------------------------------------------------------; 37 | ; Initialize MMC port 38 | ; 39 | ; void init_spi (void); 40 | 41 | .global init_spi 42 | .func init_spi 43 | init_spi: 44 | sbi DDR_CS ; CS: output 45 | sbi DDR_DI ; DI: output 46 | sbi DDR_CK ; SCLK: output 47 | sbi PORT_DO ; DO: pull-up 48 | ret 49 | .endfunc 50 | 51 | 52 | 53 | ;---------------------------------------------------------------------------; 54 | ; Delay 100 microseconds 55 | ; 56 | ; void dly_us (UINT n); 57 | 58 | .global dly_100us 59 | .func dly_100us 60 | dly_100us: 61 | ldi r24, lo8(16000000 / 100000) /* Loop counter */ 62 | 1: sbiw r30, 1 /* 10 clocks per loop */ 63 | sbiw r30, 1 64 | sbiw r30, 1 65 | nop 66 | dec r24 67 | brne 1b 68 | ret 69 | .endfunc 70 | 71 | 72 | 73 | ;---------------------------------------------------------------------------; 74 | ; Select MMC 75 | ; 76 | ; void select (void); 77 | 78 | .global select 79 | .func select 80 | select: 81 | rcall deselect 82 | cbi PORT_CS 83 | rjmp rcv_spi 84 | .endfunc 85 | 86 | 87 | 88 | ;---------------------------------------------------------------------------; 89 | ; Deselect MMC 90 | ; 91 | ; void deselect (void); 92 | 93 | .global deselect 94 | .func deselect 95 | deselect: 96 | sbi PORT_CS 97 | ; Goto next function 98 | .endfunc 99 | 100 | 101 | 102 | ;---------------------------------------------------------------------------; 103 | ; Receive a byte 104 | ; 105 | ; BYTE rcv_spi (void); 106 | 107 | .global rcv_spi 108 | .func rcv_spi 109 | rcv_spi: 110 | ldi r24, 0xFF ; Send 0xFF to receive data 111 | ; Goto next function 112 | .endfunc 113 | 114 | 115 | 116 | ;---------------------------------------------------------------------------; 117 | ; Transmit a byte 118 | ; 119 | ; void xmit_spi (BYTE); 120 | 121 | .global xmit_spi 122 | .func xmit_spi 123 | xmit_spi: 124 | ldi r25, 8 125 | 1: sbrc r24, 7 ; DI = Bit to sent 126 | sbi PORT_DI ; 127 | sbrs r24, 7 ; 128 | cbi PORT_DI ; / 129 | lsl r24 ; Get DO from MMC 130 | sbic PIN_DO ; 131 | inc r24 ; / 132 | sbi PORT_CK ; A positive pulse to SCLK 133 | cbi PORT_CK ; / 134 | dec r25 ; Repeat 8 times 135 | brne 1b ; / 136 | ret 137 | .endfunc 138 | 139 | 140 | 141 | ;--------------------------------------------------------------------------- 142 | ; Erase a flash page 143 | ; 144 | ; void flash_erase (DWORD flash_addr); 145 | 146 | .global flash_erase 147 | .func flash_erase 148 | flash_erase: 149 | 150 | movw ZL, r22 151 | #if FLASHEND >= 0x10000 152 | out _SFR_IO_ADDR(RAMPZ), r24 153 | #endif 154 | 155 | ; Initiate erase operation 156 | ldi r24, 0b00000011 157 | sts _SFR_MEM_ADDR(SPMCSR), r24 158 | spm 159 | 160 | ; Wait for end of erase operation 161 | 1: lds r24, _SFR_MEM_ADDR(SPMCSR) 162 | sbrc r24, 0 163 | rjmp 1b 164 | 165 | ; Re-enable read access to the flash 166 | ldi r24, 0b00010001 167 | sts _SFR_MEM_ADDR(SPMCSR), r24 168 | spm 169 | 170 | 9: ret 171 | .endfunc 172 | 173 | 174 | 175 | ;--------------------------------------------------------------------------- 176 | ; Write a flash page 177 | ; 178 | ; void flash_write (DWORD flash_addr, const BYTE* data); 179 | 180 | .global flash_write 181 | .func flash_write 182 | flash_write: 183 | push r0 184 | push r1 185 | 186 | #if FLASHEND >= 0x10000 187 | out _SFR_IO_ADDR(RAMPZ), r24 188 | #endif 189 | 190 | ; Fill page buffer 191 | movw ZL, r22 192 | movw XL, r20 193 | ldi r25, lo8(SPM_PAGESIZE/2) 194 | 1: ld r0, X+ 195 | ld r1, X+ 196 | ldi r24, 0b00000001 197 | sts _SFR_MEM_ADDR(SPMCSR), r24 198 | spm 199 | adiw ZL, 2 200 | dec r25 201 | brne 1b 202 | 203 | ; Initiate write operation 204 | movw ZL, r22 205 | ldi r24, 0b00000101 206 | sts _SFR_MEM_ADDR(SPMCSR), r24 207 | spm 208 | 209 | ; Wait for end of write operation 210 | 2: lds r24, _SFR_MEM_ADDR(SPMCSR) 211 | sbrc r24, 0 212 | rjmp 2b 213 | 214 | ; Re-enable read access to the flash 215 | ldi r24, 0b00010001 216 | sts _SFR_MEM_ADDR(SPMCSR), r24 217 | spm 218 | 219 | 9: pop r1 220 | pop r0 221 | ret 222 | .endfunc 223 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/asmfunc.lst: -------------------------------------------------------------------------------- 1 | 1 # 1 "asmfunc.S" 2 | 1 ;---------------------------------------------------------------------------; 3 | 0 4 | 0 5 | 2 ; MMC hardware controls and Flash controls (C)ChaN, 2010 6 | 3 ;---------------------------------------------------------------------------; 7 | 4 ; Hardware dependent macros to be modified 8 | 5 9 | 6 //sparkfun microsd 10 | 7 //#define DDR_CS _SFR_IO_ADDR(DDRB), 0 // MMC CS pin (DDR, PORT) 11 | 8 //#define PORT_CS _SFR_IO_ADDR(PORTB), 0 12 | 9 // i2GPS 13 | 10 //#define DDR_CS _SFR_IO_ADDR(DDRB), 2 // MMC CS pin (DDR, PORT) 14 | 11 //#define PORT_CS _SFR_IO_ADDR(PORTB), 2 15 | 12 16 | 13 // Arduino Ethernet 17 | 14 #define DDR_CS _SFR_IO_ADDR(DDRB), 0 // MMC CS pin (DDR, PORT) 18 | 15 #define PORT_CS _SFR_IO_ADDR(PORTB), 0 19 | 16 20 | 17 21 | 18 #define DDR_CK _SFR_IO_ADDR(DDRB), 1 // MMC SCLK pin (DDR, PORT) 22 | 19 #define PORT_CK _SFR_IO_ADDR(PORTB), 1 23 | 20 24 | 21 #define DDR_DI _SFR_IO_ADDR(DDRB), 2 // MMC DI pin (DDR, PORT) 25 | 22 #define PORT_DI _SFR_IO_ADDR(PORTB), 2 26 | 23 27 | 24 #define PIN_DO _SFR_IO_ADDR(PINB), 3 // MMC DO pin (PIN, PORT) 28 | 25 #define PORT_DO _SFR_IO_ADDR(PORTB), 3 29 | 26 30 | 27 31 | 28 32 | 29 ;---------------------------------------------------------------------------; 33 | 32 .list 34 | 33 .text 35 | 34 36 | 35 37 | 36 ;---------------------------------------------------------------------------; 38 | 37 ; Initialize MMC port 39 | 38 ; 40 | 39 ; void init_spi (void); 41 | 40 42 | 41 .global init_spi 43 | 42 .func init_spi 44 | 43 init_spi: 45 | 44:asmfunc.S **** sbi DDR_CS ; CS: output 46 | 45:asmfunc.S **** sbi DDR_DI ; DI: output 47 | 46:asmfunc.S **** sbi DDR_CK ; SCLK: output 48 | 47:asmfunc.S **** sbi PORT_DO ; DO: pull-up 49 | 48:asmfunc.S **** ret 50 | 49 .endfunc 51 | 50 52 | 51 53 | 52 54 | 53 ;---------------------------------------------------------------------------; 55 | 54 ; Delay 100 microseconds 56 | 55 ; 57 | 56 ; void dly_us (UINT n); 58 | 57 59 | 58 .global dly_100us 60 | 59 .func dly_100us 61 | 60 dly_100us: 62 | 61:asmfunc.S **** ldi r24, lo8(16000000 / 100000) /* Loop counter */ 63 | 62:asmfunc.S **** 1: sbiw r30, 1 /* 10 clocks per loop */ 64 | 63:asmfunc.S **** sbiw r30, 1 65 | 64:asmfunc.S **** sbiw r30, 1 66 | 65:asmfunc.S **** nop 67 | 66:asmfunc.S **** dec r24 68 | 67:asmfunc.S **** brne 1b 69 | 68:asmfunc.S **** ret 70 | 69 .endfunc 71 | 70 72 | 71 73 | 72 74 | 73 ;---------------------------------------------------------------------------; 75 | 74 ; Select MMC 76 | 75 ; 77 | 76 ; void select (void); 78 | 77 79 | 78 .global select 80 | 79 .func select 81 | 80 select: 82 | 81:asmfunc.S **** rcall deselect 83 | 82:asmfunc.S **** cbi PORT_CS 84 | 83:asmfunc.S **** rjmp rcv_spi 85 | 84 .endfunc 86 | 85 87 | 86 88 | 87 89 | 88 ;---------------------------------------------------------------------------; 90 | 89 ; Deselect MMC 91 | 90 ; 92 | 91 ; void deselect (void); 93 | 92 94 | 93 .global deselect 95 | 94 .func deselect 96 | 95 deselect: 97 | 96:asmfunc.S **** sbi PORT_CS 98 | 97 ; Goto next function 99 | 98 .endfunc 100 | 99 101 | 100 102 | 101 103 | 102 ;---------------------------------------------------------------------------; 104 | 103 ; Receive a byte 105 | 104 ; 106 | 105 ; BYTE rcv_spi (void); 107 | 106 108 | 107 .global rcv_spi 109 | 108 .func rcv_spi 110 | 109 rcv_spi: 111 | 110:asmfunc.S **** ldi r24, 0xFF ; Send 0xFF to receive data 112 | 111 ; Goto next function 113 | 112 .endfunc 114 | 113 115 | 114 116 | 115 117 | 116 ;---------------------------------------------------------------------------; 118 | 117 ; Transmit a byte 119 | 118 ; 120 | 119 ; void xmit_spi (BYTE); 121 | 120 122 | 121 .global xmit_spi 123 | 122 .func xmit_spi 124 | 123 xmit_spi: 125 | 124:asmfunc.S **** ldi r25, 8 126 | 125:asmfunc.S **** 1: sbrc r24, 7 ; DI = Bit to sent 127 | 126:asmfunc.S **** sbi PORT_DI ; 128 | 127:asmfunc.S **** sbrs r24, 7 ; 129 | 128:asmfunc.S **** cbi PORT_DI ; / 130 | 129:asmfunc.S **** lsl r24 ; Get DO from MMC 131 | 130:asmfunc.S **** sbic PIN_DO ; 132 | 131:asmfunc.S **** inc r24 ; / 133 | 132:asmfunc.S **** sbi PORT_CK ; A positive pulse to SCLK 134 | 133:asmfunc.S **** cbi PORT_CK ; / 135 | 134:asmfunc.S **** dec r25 ; Repeat 8 times 136 | 135:asmfunc.S **** brne 1b ; / 137 | 136:asmfunc.S **** ret 138 | 137 .endfunc 139 | 138 140 | 139 141 | 140 142 | 141 ;--------------------------------------------------------------------------- 143 | 142 ; Erase a flash page 144 | 143 ; 145 | 144 ; void flash_erase (DWORD flash_addr); 146 | 145 147 | 146 .global flash_erase 148 | 147 .func flash_erase 149 | 148 flash_erase: 150 | 149 151 | 150:asmfunc.S **** movw ZL, r22 152 | 151 #if FLASHEND >= 0x10000 153 | 152:asmfunc.S **** out _SFR_IO_ADDR(RAMPZ), r24 154 | 153 #endif 155 | 154 156 | 155 ; Initiate erase operation 157 | 156:asmfunc.S **** ldi r24, 0b00000011 158 | 157:asmfunc.S **** sts _SFR_MEM_ADDR(SPMCSR), r24 159 | 158:asmfunc.S **** spm 160 | 159 161 | 160 ; Wait for end of erase operation 162 | 161:asmfunc.S **** 1: lds r24, _SFR_MEM_ADDR(SPMCSR) 163 | 162:asmfunc.S **** sbrc r24, 0 164 | 163:asmfunc.S **** rjmp 1b 165 | 164 166 | 165 ; Re-enable read access to the flash 167 | 166:asmfunc.S **** ldi r24, 0b00010001 168 | 167:asmfunc.S **** sts _SFR_MEM_ADDR(SPMCSR), r24 169 | 168:asmfunc.S **** spm 170 | 169 171 | 170:asmfunc.S **** 9: ret 172 | 171 .endfunc 173 | 172 174 | 173 175 | 174 176 | 175 ;--------------------------------------------------------------------------- 177 | 176 ; Write a flash page 178 | 177 ; 179 | 178 ; void flash_write (DWORD flash_addr, const BYTE* data); 180 | 179 181 | 180 .global flash_write 182 | 181 .func flash_write 183 | 182 flash_write: 184 | 183:asmfunc.S **** push r0 185 | 184:asmfunc.S **** push r1 186 | 185 187 | 186 #if FLASHEND >= 0x10000 188 | 187:asmfunc.S **** out _SFR_IO_ADDR(RAMPZ), r24 189 | 188 #endif 190 | 189 191 | 190 ; Fill page buffer 192 | 191:asmfunc.S **** movw ZL, r22 193 | 192:asmfunc.S **** movw XL, r20 194 | 193:asmfunc.S **** ldi r25, lo8(SPM_PAGESIZE/2) 195 | 194:asmfunc.S **** 1: ld r0, X+ 196 | 195:asmfunc.S **** ld r1, X+ 197 | 196:asmfunc.S **** ldi r24, 0b00000001 198 | 197:asmfunc.S **** sts _SFR_MEM_ADDR(SPMCSR), r24 199 | 198:asmfunc.S **** spm 200 | 199:asmfunc.S **** adiw ZL, 2 201 | 200:asmfunc.S **** dec r25 202 | 201:asmfunc.S **** brne 1b 203 | 202 204 | 203 ; Initiate write operation 205 | 204:asmfunc.S **** movw ZL, r22 206 | 205:asmfunc.S **** ldi r24, 0b00000101 207 | 206:asmfunc.S **** sts _SFR_MEM_ADDR(SPMCSR), r24 208 | 207:asmfunc.S **** spm 209 | 208 210 | 209 ; Wait for end of write operation 211 | 210:asmfunc.S **** 2: lds r24, _SFR_MEM_ADDR(SPMCSR) 212 | 211:asmfunc.S **** sbrc r24, 0 213 | 212:asmfunc.S **** rjmp 2b 214 | 213 215 | 214 ; Re-enable read access to the flash 216 | 215:asmfunc.S **** ldi r24, 0b00010001 217 | 216:asmfunc.S **** sts _SFR_MEM_ADDR(SPMCSR), r24 218 | 217:asmfunc.S **** spm 219 | 218 220 | 219:asmfunc.S **** 9: pop r1 221 | 220:asmfunc.S **** pop r0 222 | 221:asmfunc.S **** ret 223 | 222 .endfunc 224 | DEFINED SYMBOLS 225 | asmfunc.S:43 .text:00000000 init_spi 226 | asmfunc.S:60 .text:0000000a dly_100us 227 | asmfunc.S:80 .text:0000001a select 228 | asmfunc.S:95 .text:00000020 deselect 229 | asmfunc.S:109 .text:00000022 rcv_spi 230 | asmfunc.S:123 .text:00000024 xmit_spi 231 | asmfunc.S:148 .text:0000003e flash_erase 232 | asmfunc.S:182 .text:0000005c flash_write 233 | 234 | NO UNDEFINED SYMBOLS 235 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/asmfunc.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetProbe/MicroBridge-Arduino-ATMega2560/1aaff1d4fb30c761da0df71cf404aad10e545a5e/hardware/microbridge/avr/bootloaders/microbridge/asmfunc.o -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/avr_cpunames.h: -------------------------------------------------------------------------------- 1 | //************************************************************************************************** 2 | //* 3 | //* Atmel AVR CPU name strings 4 | //* 5 | //************************************************************************************************** 6 | //* Sep 19, 2010 Started on avr_cpunames.h 7 | //************************************************************************************************** 8 | 9 | //#include "avr_cpunames.h" 10 | 11 | //************************************************************************************************** 12 | 13 | 14 | #if defined (__AVR_AT94K__) 15 | #define _AVR_CPU_NAME_ "AT94k" 16 | #elif defined (__AVR_AT43USB320__) 17 | #elif defined (__AVR_AT43USB355__) 18 | #elif defined (__AVR_AT76C711__) 19 | #elif defined (__AVR_AT86RF401__) 20 | #elif defined (__AVR_AT90PWM1__) 21 | #elif defined (__AVR_AT90PWM2__) 22 | #elif defined (__AVR_AT90PWM2B__) 23 | #elif defined (__AVR_AT90PWM3__) 24 | #elif defined (__AVR_AT90PWM3B__) 25 | #elif defined (__AVR_AT90PWM216__) 26 | #elif defined (__AVR_AT90PWM316__) 27 | #elif defined (__AVR_ATmega32C1__) 28 | #elif defined (__AVR_ATmega32M1__) 29 | #elif defined (__AVR_ATmega32U4__) 30 | #define _AVR_CPU_NAME_ "ATmega32U4" 31 | #elif defined (__AVR_ATmega32U6__) 32 | #define _AVR_CPU_NAME_ "ATmega32U6" 33 | #elif defined (__AVR_ATmega128__) 34 | #define _AVR_CPU_NAME_ "Atmega128" 35 | #elif defined (__AVR_ATmega1280__) 36 | #define _AVR_CPU_NAME_ "ATmega1280" 37 | #elif defined (__AVR_ATmega1281__) 38 | #define _AVR_CPU_NAME_ "ATmega1281" 39 | #elif defined (__AVR_ATmega1284P__) 40 | #define _AVR_CPU_NAME_ "ATmega1284" 41 | #elif defined (__AVR_ATmega128RFA1__) 42 | #define _AVR_CPU_NAME_ "ATmega128RFA1" 43 | #elif defined (__AVR_ATmega2560__) 44 | #define _AVR_CPU_NAME_ "ATmega2560" 45 | #elif defined (__AVR_ATmega2561__) 46 | #define _AVR_CPU_NAME_ "ATmega2561" 47 | #elif defined (__AVR_AT90CAN32__) 48 | #define _AVR_CPU_NAME_ "AT90CAN32" 49 | #elif defined (__AVR_AT90CAN64__) 50 | #define _AVR_CPU_NAME_ "AT90CAN64" 51 | #elif defined (__AVR_AT90CAN128__) 52 | #define _AVR_CPU_NAME_ "AT90CAN128" 53 | #elif defined (__AVR_AT90USB82__) 54 | #define _AVR_CPU_NAME_ "AT90USB82" 55 | #elif defined (__AVR_AT90USB162__) 56 | #define _AVR_CPU_NAME_ "AT90USB162" 57 | #elif defined (__AVR_AT90USB646__) 58 | #define _AVR_CPU_NAME_ "AT90USB646" 59 | #elif defined (__AVR_AT90USB647__) 60 | #define _AVR_CPU_NAME_ "AT90USB647" 61 | #elif defined (__AVR_AT90USB1286__) 62 | #define _AVR_CPU_NAME_ "AT90USB1286" 63 | #elif defined (__AVR_AT90USB1287__) 64 | #define _AVR_CPU_NAME_ "AT90USB1287" 65 | #elif defined (__AVR_ATmega64__) 66 | #define _AVR_CPU_NAME_ "ATmega64" 67 | #elif defined (__AVR_ATmega640__) 68 | #define _AVR_CPU_NAME_ "ATmega640" 69 | #elif defined (__AVR_ATmega644__) 70 | #define _AVR_CPU_NAME_ "ATmega644" 71 | #elif defined (__AVR_ATmega644P__) 72 | #define _AVR_CPU_NAME_ "ATmega644P" 73 | #elif defined (__AVR_ATmega645__) 74 | #define _AVR_CPU_NAME_ "ATmega645" 75 | #elif defined (__AVR_ATmega6450__) 76 | #define _AVR_CPU_NAME_ "ATmega6450" 77 | #elif defined (__AVR_ATmega649__) 78 | #define _AVR_CPU_NAME_ "ATmega649" 79 | #elif defined (__AVR_ATmega6490__) 80 | #define _AVR_CPU_NAME_ "ATmega6490" 81 | #elif defined (__AVR_ATmega103__) 82 | #define _AVR_CPU_NAME_ "ATmega103" 83 | #elif defined (__AVR_ATmega32__) 84 | #define _AVR_CPU_NAME_ "Atmega32" 85 | #elif defined (__AVR_ATmega323__) 86 | #define _AVR_CPU_NAME_ "ATmega323" 87 | #elif defined (__AVR_ATmega324P__) 88 | #define _AVR_CPU_NAME_ "ATmega324P" 89 | #elif defined (__AVR_ATmega325__) 90 | #define _AVR_CPU_NAME_ "ATmega325" 91 | #elif defined (__AVR_ATmega325P__) 92 | #define _AVR_CPU_NAME_ "ATmega325P" 93 | #elif defined (__AVR_ATmega3250__) 94 | #define _AVR_CPU_NAME_ "ATmega3250" 95 | #elif defined (__AVR_ATmega3250P__) 96 | #define _AVR_CPU_NAME_ "ATmega3250P" 97 | #elif defined (__AVR_ATmega328P__) 98 | #define _AVR_CPU_NAME_ "ATmega328P" 99 | #elif defined (__AVR_ATmega329__) 100 | #define _AVR_CPU_NAME_ "ATmega329" 101 | #elif defined (__AVR_ATmega329P__) 102 | #define _AVR_CPU_NAME_ "ATmega329P" 103 | #elif defined (__AVR_ATmega3290__) 104 | #define _AVR_CPU_NAME_ "ATmega3290" 105 | #elif defined (__AVR_ATmega3290P__) 106 | #define _AVR_CPU_NAME_ "ATmega3290P" 107 | #elif defined (__AVR_ATmega32HVB__) 108 | #define _AVR_CPU_NAME_ "ATmega32HVB" 109 | #elif defined (__AVR_ATmega406__) 110 | #define _AVR_CPU_NAME_ "ATmega406" 111 | #elif defined (__AVR_ATmega16__) 112 | #define _AVR_CPU_NAME_ "Atmega16" 113 | #elif defined (__AVR_ATmega161__) 114 | #define _AVR_CPU_NAME_ "ATmega161" 115 | #elif defined (__AVR_ATmega162__) 116 | #define _AVR_CPU_NAME_ "ATmega162" 117 | #elif defined (__AVR_ATmega163__) 118 | #define _AVR_CPU_NAME_ "ATmega163" 119 | #elif defined (__AVR_ATmega164P__) 120 | #define _AVR_CPU_NAME_ "ATmega164P" 121 | #elif defined (__AVR_ATmega165__) 122 | #define _AVR_CPU_NAME_ "ATmega165" 123 | #elif defined (__AVR_ATmega165P__) 124 | #define _AVR_CPU_NAME_ "ATmega165P" 125 | #elif defined (__AVR_ATmega168__) 126 | #define _AVR_CPU_NAME_ "ATmega168" 127 | #elif defined (__AVR_ATmega168P__) 128 | #define _AVR_CPU_NAME_ "ATmega168P" 129 | #elif defined (__AVR_ATmega169__) 130 | #define _AVR_CPU_NAME_ "Atmega169" 131 | #elif defined (__AVR_ATmega169P__) 132 | #define _AVR_CPU_NAME_ "ATmega169P" 133 | #elif defined (__AVR_ATmega8HVA__) 134 | #define _AVR_CPU_NAME_ "ATmega8HVA" 135 | #elif defined (__AVR_ATmega16HVA__) 136 | #define _AVR_CPU_NAME_ "ATmega16HVA" 137 | #elif defined (__AVR_ATmega8__) 138 | #define _AVR_CPU_NAME_ "ATmega8" 139 | #elif defined (__AVR_ATmega48__) 140 | #define _AVR_CPU_NAME_ "ATmega48" 141 | #elif defined (__AVR_ATmega48P__) 142 | #define _AVR_CPU_NAME_ "ATmega48P" 143 | #elif defined (__AVR_ATmega88__) 144 | #define _AVR_CPU_NAME_ "ATmega88" 145 | #elif defined (__AVR_ATmega88P__) 146 | #define _AVR_CPU_NAME_ "ATmega88P" 147 | #elif defined (__AVR_ATmega8515__) 148 | #define _AVR_CPU_NAME_ "ATmega8515" 149 | #elif defined (__AVR_ATmega8535__) 150 | #define _AVR_CPU_NAME_ "ATmega8535" 151 | #elif defined (__AVR_AT90S8535__) 152 | #elif defined (__AVR_AT90C8534__) 153 | #elif defined (__AVR_AT90S8515__) 154 | #elif defined (__AVR_AT90S4434__) 155 | #elif defined (__AVR_AT90S4433__) 156 | #elif defined (__AVR_AT90S4414__) 157 | #elif defined (__AVR_ATtiny22__) 158 | #elif defined (__AVR_ATtiny26__) 159 | #elif defined (__AVR_AT90S2343__) 160 | #elif defined (__AVR_AT90S2333__) 161 | #elif defined (__AVR_AT90S2323__) 162 | #elif defined (__AVR_AT90S2313__) 163 | #elif defined (__AVR_ATtiny2313__) 164 | #define _AVR_CPU_NAME_ "ATtiny2313" 165 | #elif defined (__AVR_ATtiny13__) 166 | #elif defined (__AVR_ATtiny13A__) 167 | #elif defined (__AVR_ATtiny25__) 168 | #elif defined (__AVR_ATtiny45__) 169 | #elif defined (__AVR_ATtiny85__) 170 | #elif defined (__AVR_ATtiny24__) 171 | #elif defined (__AVR_ATtiny44__) 172 | #elif defined (__AVR_ATtiny84__) 173 | #elif defined (__AVR_ATtiny261__) 174 | #elif defined (__AVR_ATtiny461__) 175 | #elif defined (__AVR_ATtiny861__) 176 | #elif defined (__AVR_ATtiny43U__) 177 | #elif defined (__AVR_ATtiny48__) 178 | #elif defined (__AVR_ATtiny88__) 179 | #elif defined (__AVR_ATtiny167__) 180 | #elif defined (__AVR_ATmega8U2__) 181 | #define _AVR_CPU_NAME_ "ATmega8U2" 182 | #else 183 | #error cpu not defined 184 | #endif 185 | 186 | 187 | #if !defined (_AVR_CPU_NAME_) 188 | // #define _AVR_CPU_NAME_ "UNKNOWN" 189 | #endif 190 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/avrinterruptnames.h: -------------------------------------------------------------------------------- 1 | //************************************************************************************************** 2 | //* 3 | //* interrupt vector names 4 | //* 5 | //* It is important to note that the vector numbers listed here 6 | //* are the ATMEL documentation numbers. The Arduino numbers are 1 less 7 | //* This is because the Atmel docs start numbering the interrupts at 1 8 | //* when it is actually vector #0 in the table. 9 | //************************************************************************************************** 10 | //* Jun 1, 2010 Added support for ATmega1281 11 | //* Jun 30, 2010 Putting in more ifdefs to conserve space 12 | //* Jul 3, 2010 More #ifdefs to conserve space and testing on most of my boards 13 | //* Jul 4, 2010 Started using vector defs for #ifdefs as defined in 14 | //* Jul 13, 2010 Added support for __AVR_ATmega128__ 15 | //* Aug 26, 2010 Added support for __AVR_ATmega2561__ 16 | //* Sep 13, 2010 Added support for __AVR_AT90CAN32__ __AVR_AT90CAN64__ __AVR_AT90CAN128__ 17 | //************************************************************************************************** 18 | 19 | //#include "avrinterruptnames.h" 20 | 21 | //************************************************************************************************** 22 | //* this defines the interrupt vectors and allows us to compile ONLY those strings that are actually 23 | //* in the target CPU. This way we do not have to keep making changes based on cpu, it will be 24 | //* automatic even if we add a new CPU 25 | #ifndef _AVR_IO_H_ 26 | #include 27 | #endif 28 | //************************************************************************************************** 29 | 30 | #ifdef __MWERKS__ 31 | #define prog_char char 32 | #define PGM_P char * 33 | #endif 34 | 35 | prog_char gAvrInt_RESET[] PROGMEM = "RESET"; 36 | #ifdef INT0_vect 37 | prog_char gAvrInt_INT0[] PROGMEM = "INT0"; 38 | #endif 39 | #ifdef INT1_vect 40 | prog_char gAvrInt_INT1[] PROGMEM = "INT1"; 41 | #endif 42 | #ifdef INT2_vect 43 | prog_char gAvrInt_INT2[] PROGMEM = "INT2"; 44 | #endif 45 | #ifdef INT3_vect 46 | prog_char gAvrInt_INT3[] PROGMEM = "INT3"; 47 | #endif 48 | #ifdef INT4_vect 49 | prog_char gAvrInt_INT4[] PROGMEM = "INT4"; 50 | #endif 51 | #ifdef INT5_vect 52 | prog_char gAvrInt_INT5[] PROGMEM = "INT5"; 53 | #endif 54 | #ifdef INT6_vect 55 | prog_char gAvrInt_INT6[] PROGMEM = "INT6"; 56 | #endif 57 | #ifdef INT7_vect 58 | prog_char gAvrInt_INT7[] PROGMEM = "INT7"; 59 | #endif 60 | #ifdef PCINT0_vect 61 | prog_char gAvrInt_PCINT0[] PROGMEM = "PCINT0"; 62 | #endif 63 | #ifdef PCINT1_vect 64 | prog_char gAvrInt_PCINT1[] PROGMEM = "PCINT1"; 65 | #endif 66 | #ifdef PCINT2_vect 67 | prog_char gAvrInt_PCINT2[] PROGMEM = "PCINT2"; 68 | #endif 69 | #ifdef PCINT3_vect 70 | prog_char gAvrInt_PCINT3[] PROGMEM = "PCINT3"; 71 | #endif 72 | #ifdef WDT_vect 73 | prog_char gAvrInt_WDT[] PROGMEM = "WDT"; 74 | #endif 75 | #ifdef TIMER0_COMP_vect 76 | prog_char gAvrInt_TIMER0_COMP[] PROGMEM = "TIMER0 COMP"; 77 | #endif 78 | #ifdef TIMER0_COMPA_vect 79 | prog_char gAvrInt_TIMER0_COMPA[] PROGMEM = "TIMER0 COMPA"; 80 | #endif 81 | #ifdef TIMER0_COMPB_vect 82 | prog_char gAvrInt_TIMER0_COMPB[] PROGMEM = "TIMER0 COMPB"; 83 | #endif 84 | #ifdef TIMER0_OVF_vect 85 | prog_char gAvrInt_TIMER0_OVF[] PROGMEM = "TIMER0 OVF"; 86 | #endif 87 | #ifdef TIMER1_CAPT_vect 88 | prog_char gAvrInt_TIMER1_CAPT[] PROGMEM = "TIMER1 CAPT"; 89 | #endif 90 | #ifdef TIMER1_COMPA_vect 91 | prog_char gAvrInt_TIMER1_COMPA[] PROGMEM = "TIMER1 COMPA"; 92 | #endif 93 | #ifdef TIMER1_COMPB_vect 94 | prog_char gAvrInt_TIMER1_COMPB[] PROGMEM = "TIMER1 COMPB"; 95 | #endif 96 | #ifdef TIMER1_COMPC_vect 97 | prog_char gAvrInt_TIMER1_COMPC[] PROGMEM = "TIMER1 COMPC"; 98 | #endif 99 | #ifdef TIMER1_OVF_vect 100 | prog_char gAvrInt_TIMER1_OVF[] PROGMEM = "TIMER1 OVF"; 101 | #endif 102 | #ifdef TIMER2_COMP_vect 103 | prog_char gAvrInt_TIMER2_COMP[] PROGMEM = "TIMER2 COMP"; 104 | #endif 105 | #ifdef TIMER2_COMPA_vect 106 | prog_char gAvrInt_TIMER2_COMPA[] PROGMEM = "TIMER2 COMPA"; 107 | #endif 108 | #ifdef TIMER2_COMPB_vect 109 | prog_char gAvrInt_TIMER2_COMPB[] PROGMEM = "TIMER2 COMPB"; 110 | #endif 111 | #ifdef TIMER2_OVF_vect 112 | prog_char gAvrInt_TIMER2_OVF[] PROGMEM = "TIMER2 OVF"; 113 | #endif 114 | #ifdef TIMER3_CAPT_vect 115 | prog_char gAvrInt_TIMER3_CAPT[] PROGMEM = "TIMER3 CAPT"; 116 | #endif 117 | #ifdef TIMER3_COMPA_vect 118 | prog_char gAvrInt_TIMER3_COMPA[] PROGMEM = "TIMER3 COMPA"; 119 | #endif 120 | #ifdef TIMER3_COMPB_vect 121 | prog_char gAvrInt_TIMER3_COMPB[] PROGMEM = "TIMER3 COMPB"; 122 | #endif 123 | #ifdef TIMER3_COMPC_vect 124 | prog_char gAvrInt_TIMER3_COMPC[] PROGMEM = "TIMER3 COMPC"; 125 | #endif 126 | #ifdef TIMER3_OVF_vect 127 | prog_char gAvrInt_TIMER3_OVF[] PROGMEM = "TIMER3 OVF"; 128 | #endif 129 | #ifdef TIMER4_CAPT_vect 130 | prog_char gAvrInt_TIMER4_CAPT[] PROGMEM = "TIMER4 CAPT"; 131 | #endif 132 | #ifdef TIMER4_COMPA_vect 133 | prog_char gAvrInt_TIMER4_COMPA[] PROGMEM = "TIMER4 COMPA"; 134 | #endif 135 | #ifdef TIMER4_COMPB_vect 136 | prog_char gAvrInt_TIMER4_COMPB[] PROGMEM = "TIMER4 COMPB"; 137 | #endif 138 | #ifdef TIMER4_COMPC_vect 139 | prog_char gAvrInt_TIMER4_COMPC[] PROGMEM = "TIMER4 COMPC"; 140 | #endif 141 | #ifdef TIMER4_COMPD_vect 142 | prog_char gAvrInt_TIMER4_COMPD[] PROGMEM = "TIMER4 COMPD"; 143 | #endif 144 | #ifdef TIMER4_OVF_vect 145 | prog_char gAvrInt_TIMER4_OVF[] PROGMEM = "TIMER4 OVF"; 146 | #endif 147 | #ifdef TIMER4_FPF_vect 148 | prog_char gAvrInt_TIMER4_FPF[] PROGMEM = "TIMER4 Fault Protection"; 149 | #endif 150 | #ifdef TIMER5_CAPT_vect 151 | prog_char gAvrInt_TIMER5_CAPT[] PROGMEM = "TIMER5 CAPT"; 152 | #endif 153 | #ifdef TIMER5_COMPA_vect 154 | prog_char gAvrInt_TIMER5_COMPA[] PROGMEM = "TIMER5 COMPA"; 155 | #endif 156 | #ifdef TIMER5_COMPB_vect 157 | prog_char gAvrInt_TIMER5_COMPB[] PROGMEM = "TIMER5 COMPB"; 158 | #endif 159 | #ifdef TIMER5_COMPC_vect 160 | prog_char gAvrInt_TIMER5_COMPC[] PROGMEM = "TIMER5 COMPC"; 161 | #endif 162 | #ifdef TIMER5_OVF_vect 163 | prog_char gAvrInt_TIMER5_OVF[] PROGMEM = "TIMER5 OVF"; 164 | #endif 165 | 166 | //* when there is only 1 usart 167 | #if defined(USART_RX_vect) || defined(USART_RXC_vect) 168 | prog_char gAvrInt_USART_RX[] PROGMEM = "USART RX"; 169 | #endif 170 | #if defined(USART_UDRE_vect) 171 | prog_char gAvrInt_USART_UDRE[] PROGMEM = "USART UDRE"; 172 | #endif 173 | #if defined(USART_TX_vect) || defined(USART_TXC_vect) 174 | prog_char gAvrInt_USART_TX[] PROGMEM = "USART TX"; 175 | #endif 176 | 177 | 178 | //* usart 0 179 | #if defined(USART0_RX_vect) 180 | prog_char gAvrInt_USART0_RX[] PROGMEM = "USART0 RX"; 181 | #endif 182 | #if defined(USART0_UDRE_vect) 183 | prog_char gAvrInt_USART0_UDRE[] PROGMEM = "USART0 UDRE"; 184 | #endif 185 | #if defined(USART0_TX_vect) 186 | prog_char gAvrInt_USART0_TX[] PROGMEM = "USART0 TX"; 187 | #endif 188 | 189 | 190 | //* usart 1 191 | #ifdef USART1_RX_vect 192 | prog_char gAvrInt_USART1_RX[] PROGMEM = "USART1 RX"; 193 | #endif 194 | #ifdef USART1_UDRE_vect 195 | prog_char gAvrInt_USART1_UDRE[] PROGMEM = "USART1 UDRE"; 196 | #endif 197 | #ifdef USART1_TX_vect 198 | prog_char gAvrInt_USART1_TX[] PROGMEM = "USART1 TX"; 199 | #endif 200 | 201 | //* usart 2 202 | #ifdef USART2_RX_vect 203 | prog_char gAvrInt_USART2_RX[] PROGMEM = "USART2 RX"; 204 | #endif 205 | #ifdef USART2_UDRE_vect 206 | prog_char gAvrInt_USART2_UDRE[] PROGMEM = "USART2 UDRE"; 207 | #endif 208 | #ifdef USART2_TX_vect 209 | prog_char gAvrInt_USART2_TX[] PROGMEM = "USART2 TX"; 210 | #endif 211 | 212 | //* usart 3 213 | #ifdef USART3_RX_vect 214 | prog_char gAvrInt_USART3_RX[] PROGMEM = "USART3 RX"; 215 | #endif 216 | #ifdef USART3_UDRE_vect 217 | prog_char gAvrInt_USART3_UDRE[] PROGMEM = "USART3 UDRE"; 218 | #endif 219 | #ifdef USART3_TX_vect 220 | prog_char gAvrInt_USART3_TX[] PROGMEM = "USART3 TX"; 221 | #endif 222 | #ifdef SPI_STC_vect 223 | prog_char gAvrInt_SPI_STC[] PROGMEM = "SPI STC"; 224 | #endif 225 | #ifdef ADC_vect 226 | prog_char gAvrInt_ADC[] PROGMEM = "ADC"; 227 | #endif 228 | #if defined(ANALOG_COMP_vect) || defined(ANA_COMP_vect) 229 | prog_char gAvrInt_ANALOG_COMP[] PROGMEM = "ANALOG COMP"; 230 | #endif 231 | #if defined(EE_READY_vect) || defined(EE_RDY_vect) 232 | prog_char gAvrInt_EE_READY[] PROGMEM = "EE READY"; 233 | #endif 234 | #ifdef TWI_vect 235 | prog_char gAvrInt_TWI[] PROGMEM = "TWI"; 236 | #endif 237 | #if defined(SPM_READY_vect) || defined(SPM_RDY_vect) 238 | prog_char gAvrInt_SPM_READY[] PROGMEM = "SPM READY"; 239 | #endif 240 | #ifdef USI_START_vect 241 | prog_char gAvrInt_USI_START[] PROGMEM = "USI START"; 242 | #endif 243 | #ifdef USI_OVERFLOW_vect 244 | prog_char gAvrInt_USI_OVERFLOW[] PROGMEM = "USI OVERFLOW"; 245 | #endif 246 | #ifdef USB_GEN_vect 247 | prog_char gAvrInt_USB_General[] PROGMEM = "USB General"; 248 | #endif 249 | #ifdef USB_COM_vect 250 | prog_char gAvrInt_USB_Endpoint[] PROGMEM = "USB Endpoint"; 251 | #endif 252 | 253 | #ifdef LCD_vect 254 | prog_char gAvrInt_LCD_StartFrame[] PROGMEM = "LCD Start of Frame"; 255 | #endif 256 | 257 | //* these are for the chips with CAN bus support 258 | #ifdef CANIT_vect 259 | prog_char gAvrInt_CAN_TrafnsferCE[] PROGMEM = "CAN Transfer Complete or Error"; 260 | #endif 261 | #ifdef OVRIT_vect 262 | prog_char gAvrInt_CAN_TimerOverRun[] PROGMEM = "CAN Timer Overrun"; 263 | #endif 264 | 265 | //* these are for __AVR_ATmega128RFA1__ 266 | #ifdef TRX24_PLL_LOCK_vect 267 | prog_char gAvrInt_TRN_PLL_LOCK[] PROGMEM = "TRX24_PLL_LOCK"; 268 | #endif 269 | #ifdef TRX24_PLL_UNLOCK_vect 270 | prog_char gAvrInt_TRN_PLL_UNLOCK[] PROGMEM = "TRX24_PLL_UNLOCK"; 271 | #endif 272 | #ifdef TRX24_RX_START_vect 273 | prog_char gAvrInt_TRN_RX_START[] PROGMEM = "TRX24_RX_START"; 274 | #endif 275 | #ifdef TRX24_RX_END_vect 276 | prog_char gAvrInt_TRN_RX_END[] PROGMEM = "TRX24_RX_END"; 277 | #endif 278 | #ifdef TRX24_CCA_ED_DONE_vect 279 | prog_char gAvrInt_TRN_CAAED_DONE[] PROGMEM = "TRX24_CCA_ED_DONE"; 280 | #endif 281 | #ifdef TRX24_XAH_AMI_vect 282 | prog_char gAvrInt_TRN_FRAME_MATCH[] PROGMEM = "TRX24_FRAME_ADDRESS_MATCH"; 283 | #endif 284 | #ifdef TRX24_TX_END_vect 285 | prog_char gAvrInt_TRN_TX_END[] PROGMEM = "TRX24_TX_END"; 286 | #endif 287 | #ifdef TRX24_AWAKE_vect 288 | prog_char gAvrInt_TRN_AWAKE[] PROGMEM = "TRX24_AWAKE"; 289 | #endif 290 | #ifdef SCNT_CMP1_vect 291 | prog_char gAvrInt_SCNT_CMP1[] PROGMEM = "SCNT_CMP1"; 292 | #endif 293 | #ifdef SCNT_CMP2_vect 294 | prog_char gAvrInt_SCNT_CMP2[] PROGMEM = "SCNT_CMP2"; 295 | #endif 296 | #ifdef SCNT_CMP3_vect 297 | prog_char gAvrInt_SCNT_CMP3[] PROGMEM = "SCNT_CMP3"; 298 | #endif 299 | #ifdef SCNT_OVFL_vect 300 | prog_char gAvrInt_SCNT_OVFL[] PROGMEM = "SCNT_OVFL"; 301 | #endif 302 | #ifdef SCNT_BACKOFF_vect 303 | prog_char gAvrInt_SCNT_BACKOFF[] PROGMEM = "SCNT_BACKOFF"; 304 | #endif 305 | #ifdef AES_READY_vect 306 | prog_char gAvrInt_AES_READY[] PROGMEM = "AES_READY"; 307 | #endif 308 | #ifdef BAT_LOW_vect 309 | prog_char gAvrInt_BAT_LOW[] PROGMEM = "BAT_LOW"; 310 | #endif 311 | 312 | 313 | 314 | //************************************************************************************************** 315 | //* these do not have vector defs and have to be done by CPU type 316 | #if defined(__AVR_ATmega645__ ) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) 317 | prog_char gAvrInt_NOT_USED[] PROGMEM = "NOT_USED"; 318 | #endif 319 | #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega128RFA1__) 320 | prog_char gAvrInt_RESERVED[] PROGMEM = "Reserved"; 321 | #endif 322 | 323 | prog_char gAvrInt_END[] PROGMEM = "*"; 324 | 325 | 326 | 327 | 328 | 329 | //************************************************************************************************** 330 | #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) 331 | #pragma mark __AVR_ATmega168__ / __AVR_ATmega328P__ 332 | 333 | #define _INTERRUPT_NAMES_DEFINED_ 334 | 335 | PGM_P gInterruptNameTable[] PROGMEM = 336 | { 337 | 338 | gAvrInt_RESET, // 1 339 | gAvrInt_INT0, // 2 340 | gAvrInt_INT1, // 3 341 | gAvrInt_PCINT0, // 4 342 | gAvrInt_PCINT1, // 5 343 | gAvrInt_PCINT2, // 6 344 | gAvrInt_WDT, // 7 345 | gAvrInt_TIMER2_COMPA, // 8 346 | gAvrInt_TIMER2_COMPB, // 9 347 | gAvrInt_TIMER2_OVF, // 10 348 | gAvrInt_TIMER1_CAPT, // 11 349 | gAvrInt_TIMER1_COMPA, // 12 350 | gAvrInt_TIMER1_COMPB, // 13 351 | gAvrInt_TIMER1_OVF, // 14 352 | gAvrInt_TIMER0_COMPA, // 15 353 | gAvrInt_TIMER0_COMPB, // 16 354 | gAvrInt_TIMER0_OVF, // 17 355 | gAvrInt_SPI_STC, // 18 356 | gAvrInt_USART_RX, // 19 357 | gAvrInt_USART_UDRE, // 20 358 | gAvrInt_USART_TX, // 21 359 | gAvrInt_ADC, // 22 360 | gAvrInt_EE_READY, // 23 361 | gAvrInt_ANALOG_COMP, // 24 362 | gAvrInt_TWI, // 25 363 | gAvrInt_SPM_READY, // 26 364 | }; 365 | 366 | #endif 367 | 368 | //************************************************************************************************** 369 | #if defined(__AVR_ATmega169__) 370 | #pragma mark __AVR_ATmega169__ 371 | 372 | #define _INTERRUPT_NAMES_DEFINED_ 373 | 374 | PGM_P gInterruptNameTable[] PROGMEM = 375 | { 376 | 377 | gAvrInt_RESET, // 1 378 | gAvrInt_INT0, // 2 379 | gAvrInt_PCINT0, // 3 380 | gAvrInt_PCINT1, // 4 381 | gAvrInt_TIMER2_COMP, // 5 382 | gAvrInt_TIMER2_OVF, // 6 383 | gAvrInt_TIMER1_CAPT, // 7 384 | gAvrInt_TIMER1_COMPA, // 8 385 | gAvrInt_TIMER1_COMPB, // 9 386 | gAvrInt_TIMER1_OVF, // 10 387 | gAvrInt_TIMER0_COMP, // 11 388 | gAvrInt_TIMER0_OVF, // 12 389 | gAvrInt_SPI_STC, // 13 390 | gAvrInt_USART0_RX, // 14 391 | gAvrInt_USART0_UDRE, // 15 392 | gAvrInt_USART0_TX, // 16 393 | gAvrInt_USI_START, // 17 394 | gAvrInt_USI_OVERFLOW, // 18 395 | gAvrInt_ANALOG_COMP, // 19 396 | gAvrInt_ADC, // 20 397 | gAvrInt_EE_READY, // 21 398 | gAvrInt_SPM_READY, // 22 399 | gAvrInt_LCD_StartFrame, // 23 400 | 401 | }; 402 | 403 | #endif 404 | 405 | 406 | //************************************************************************************************** 407 | #if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) 408 | #pragma mark __AVR_ATmega640__ __AVR_ATmega1280__ __AVR_ATmega1281__ __AVR_ATmega2560__ __AVR_ATmega2561__ 409 | 410 | #define _INTERRUPT_NAMES_DEFINED_ 411 | 412 | PGM_P gInterruptNameTable[] PROGMEM = 413 | { 414 | 415 | gAvrInt_RESET, // 1 416 | gAvrInt_INT0, // 2 417 | gAvrInt_INT1, // 3 418 | gAvrInt_INT2, // 4 419 | gAvrInt_INT3, // 5 420 | gAvrInt_INT4, // 6 421 | gAvrInt_INT5, // 7 422 | gAvrInt_INT6, // 8 423 | gAvrInt_INT7, // 9 424 | gAvrInt_PCINT0, // 10 425 | gAvrInt_PCINT1, // 11 426 | #if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) 427 | gAvrInt_PCINT2, // 12 428 | #else 429 | gAvrInt_NOT_USED, // 12 430 | #endif 431 | gAvrInt_WDT, // 13 432 | gAvrInt_TIMER2_COMPA, // 14 433 | gAvrInt_TIMER2_COMPB, // 15 434 | gAvrInt_TIMER2_OVF, // 16 435 | gAvrInt_TIMER1_CAPT, // 17 436 | gAvrInt_TIMER1_COMPA, // 18 437 | gAvrInt_TIMER1_COMPB, // 19 438 | gAvrInt_TIMER1_COMPC, // 20 439 | gAvrInt_TIMER1_OVF, // 21 440 | gAvrInt_TIMER0_COMPA, // 22 441 | gAvrInt_TIMER0_COMPB, // 23 442 | gAvrInt_TIMER0_OVF, // 24 443 | gAvrInt_SPI_STC, // 25 444 | 445 | gAvrInt_USART0_RX, // 26 446 | gAvrInt_USART0_UDRE, // 27 447 | gAvrInt_USART0_TX, // 28 448 | gAvrInt_ANALOG_COMP, // 29 449 | gAvrInt_ADC, // 30 450 | gAvrInt_EE_READY, // 31 451 | 452 | gAvrInt_TIMER3_CAPT, // 32 453 | gAvrInt_TIMER3_COMPA, // 33 454 | gAvrInt_TIMER3_COMPB, // 34 455 | gAvrInt_TIMER3_COMPC, // 35 456 | gAvrInt_TIMER3_OVF, // 36 457 | 458 | gAvrInt_USART1_RX, // 37 459 | gAvrInt_USART1_UDRE, // 38 460 | gAvrInt_USART1_TX, // 39 461 | gAvrInt_TWI, // 40 462 | gAvrInt_SPM_READY, // 41 463 | #if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) 464 | gAvrInt_TIMER4_CAPT, // 42 465 | #else 466 | gAvrInt_NOT_USED, // 42 467 | #endif 468 | gAvrInt_TIMER4_COMPA, // 43 469 | gAvrInt_TIMER4_COMPB, // 44 470 | gAvrInt_TIMER4_COMPC, // 45 471 | gAvrInt_TIMER4_OVF, // 46 472 | #if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) 473 | gAvrInt_TIMER5_CAPT, // 47 474 | #else 475 | gAvrInt_NOT_USED, // 47 476 | #endif 477 | gAvrInt_TIMER5_COMPA, // 48 478 | gAvrInt_TIMER5_COMPB, // 49 479 | gAvrInt_TIMER5_COMPC, // 50 480 | gAvrInt_TIMER5_OVF, // 51 481 | 482 | #if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) 483 | gAvrInt_USART2_RX, // 52 484 | gAvrInt_USART2_UDRE, // 53 485 | gAvrInt_USART2_TX, // 54 486 | 487 | gAvrInt_USART3_RX, // 55 488 | gAvrInt_USART3_UDRE, // 56 489 | gAvrInt_USART3_TX, // 57 490 | #endif 491 | 492 | }; 493 | 494 | #endif 495 | 496 | 497 | 498 | //************************************************************************************************** 499 | #if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644__ ) || defined(__AVR_ATmega644P__) 500 | #pragma mark __AVR_ATmega324P__ __AVR_ATmega644__ __AVR_ATmega644P__ 501 | 502 | #define _INTERRUPT_NAMES_DEFINED_ 503 | 504 | PGM_P gInterruptNameTable[] PROGMEM = 505 | { 506 | 507 | gAvrInt_RESET, // 1 508 | gAvrInt_INT0, // 2 509 | gAvrInt_INT1, // 3 510 | gAvrInt_INT2, // 4 511 | gAvrInt_PCINT0, // 5 512 | gAvrInt_PCINT1, // 6 513 | gAvrInt_PCINT2, // 7 514 | gAvrInt_PCINT3, // 8 515 | gAvrInt_WDT, // 9 516 | gAvrInt_TIMER2_COMPA, // 10 517 | gAvrInt_TIMER2_COMPB, // 11 518 | gAvrInt_TIMER2_OVF, // 12 519 | gAvrInt_TIMER1_CAPT, // 13 520 | gAvrInt_TIMER1_COMPA, // 14 521 | gAvrInt_TIMER1_COMPB, // 15 522 | gAvrInt_TIMER1_OVF, // 16 523 | gAvrInt_TIMER0_COMPA, // 17 524 | gAvrInt_TIMER0_COMPB, // 18 525 | gAvrInt_TIMER0_OVF, // 19 526 | gAvrInt_SPI_STC, // 20 527 | gAvrInt_USART0_RX, // 21 528 | gAvrInt_USART0_UDRE, // 22 529 | gAvrInt_USART0_TX, // 23 530 | gAvrInt_ANALOG_COMP, // 24 531 | gAvrInt_ADC, // 25 532 | gAvrInt_EE_READY, // 26 533 | gAvrInt_TWI, // 27 534 | gAvrInt_SPM_READY, // 28 535 | 536 | #if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644P__) 537 | gAvrInt_USART1_RX, // 29 538 | gAvrInt_USART1_UDRE, // 30 539 | gAvrInt_USART1_TX, // 31 540 | #endif 541 | 542 | }; 543 | 544 | 545 | #endif 546 | 547 | //************************************************************************************************** 548 | #if defined(__AVR_ATmega1284P__ ) 549 | #pragma mark __AVR_ATmega1284P__ 550 | 551 | #define _INTERRUPT_NAMES_DEFINED_ 552 | 553 | PGM_P gInterruptNameTable[] PROGMEM = 554 | { 555 | 556 | gAvrInt_RESET, // 1 557 | gAvrInt_INT0, // 2 558 | gAvrInt_INT1, // 3 559 | gAvrInt_INT2, // 4 560 | gAvrInt_PCINT0, // 5 561 | gAvrInt_PCINT1, // 6 562 | gAvrInt_PCINT2, // 7 563 | gAvrInt_PCINT3, // 8 564 | gAvrInt_WDT, // 9 565 | gAvrInt_TIMER2_COMPA, // 10 566 | gAvrInt_TIMER2_COMPB, // 11 567 | gAvrInt_TIMER2_OVF, // 12 568 | gAvrInt_TIMER1_CAPT, // 13 569 | gAvrInt_TIMER1_COMPA, // 14 570 | gAvrInt_TIMER1_COMPB, // 15 571 | gAvrInt_TIMER1_OVF, // 16 572 | gAvrInt_TIMER0_COMPA, // 17 573 | gAvrInt_TIMER0_COMPB, // 18 574 | gAvrInt_TIMER0_OVF, // 19 575 | gAvrInt_SPI_STC, // 20 576 | gAvrInt_USART0_RX, // 21 577 | gAvrInt_USART0_UDRE, // 22 578 | gAvrInt_USART0_TX, // 23 579 | gAvrInt_ANALOG_COMP, // 24 580 | gAvrInt_ADC, // 25 581 | gAvrInt_EE_READY, // 26 582 | gAvrInt_TWI, // 27 583 | gAvrInt_SPM_READY, // 28 584 | 585 | gAvrInt_USART1_RX, // 29 586 | gAvrInt_USART1_UDRE, // 30 587 | gAvrInt_USART1_TX, // 31 588 | //* these are NOT documented in doc8272.pdf 589 | //* they are in iom1284p.h 590 | gAvrInt_TIMER3_CAPT, // 32 591 | gAvrInt_TIMER3_COMPA, // 33 592 | gAvrInt_TIMER3_COMPB, // 34 593 | gAvrInt_TIMER3_OVF, // 35 594 | 595 | 596 | }; 597 | 598 | 599 | #endif 600 | 601 | 602 | //************************************************************************************************** 603 | #if defined(__AVR_ATmega645__ ) 604 | #pragma mark __AVR_ATmega645__ 605 | 606 | #define _INTERRUPT_NAMES_DEFINED_ 607 | 608 | PGM_P gInterruptNameTable[] PROGMEM = 609 | { 610 | 611 | gAvrInt_RESET, // 1 612 | gAvrInt_INT0, // 2 613 | gAvrInt_PCINT0, // 3 614 | gAvrInt_PCINT1, // 4 615 | gAvrInt_TIMER2_COMP, // 5 616 | gAvrInt_TIMER2_OVF, // 6 617 | gAvrInt_TIMER1_CAPT, // 7 618 | gAvrInt_TIMER1_COMPA, // 8 619 | gAvrInt_TIMER1_COMPB, // 9 620 | gAvrInt_TIMER1_OVF, // 10 621 | gAvrInt_TIMER0_COMP, // 11 622 | gAvrInt_TIMER0_OVF, // 12 623 | gAvrInt_SPI_STC, // 13 624 | gAvrInt_USART0_RX, // 14 625 | gAvrInt_USART0_UDRE, // 15 626 | gAvrInt_USART0_TX, // 16 627 | gAvrInt_USI_START, // 17 628 | gAvrInt_USI_OVERFLOW, // 18 629 | gAvrInt_ANALOG_COMP, // 19 630 | gAvrInt_ADC, // 20 631 | gAvrInt_EE_READY, // 21 632 | gAvrInt_SPM_READY, // 22 633 | gAvrInt_NOT_USED, // 23 634 | 635 | #if defined(__AVR_ATmega3250__) || defined(__AVR_ATmega6450__) 636 | gAvrInt_PCINT2, // 24 637 | gAvrInt_PCINT3, // 25 638 | #endif 639 | }; 640 | 641 | 642 | #endif 643 | 644 | //************************************************************************************************** 645 | #if defined(__AVR_ATmega16__ ) 646 | #pragma mark __AVR_ATmega16__ 647 | 648 | #define _INTERRUPT_NAMES_DEFINED_ 649 | 650 | PGM_P gInterruptNameTable[] PROGMEM = 651 | { 652 | 653 | gAvrInt_RESET, // 1 654 | gAvrInt_INT0, // 2 655 | gAvrInt_INT1, // 3 656 | gAvrInt_TIMER2_COMP, // 4 657 | gAvrInt_TIMER2_OVF, // 5 658 | gAvrInt_TIMER1_CAPT, // 6 659 | gAvrInt_TIMER1_COMPA, // 7 660 | gAvrInt_TIMER1_COMPB, // 8 661 | gAvrInt_TIMER1_OVF, // 9 662 | gAvrInt_TIMER0_OVF, // 10 663 | gAvrInt_SPI_STC, // 11 664 | gAvrInt_USART_RX, // 12 665 | gAvrInt_USART_UDRE, // 13 666 | gAvrInt_USART_TX, // 14 667 | gAvrInt_ADC, // 15 668 | gAvrInt_EE_READY, // 16 669 | gAvrInt_ANALOG_COMP, // 17 670 | gAvrInt_TWI, // 18 671 | gAvrInt_INT2, // 19 672 | gAvrInt_TIMER0_COMP, // 20 673 | gAvrInt_SPM_READY, // 21 674 | 675 | }; 676 | 677 | 678 | #endif 679 | 680 | //************************************************************************************************** 681 | #if defined(__AVR_ATmega32__ ) 682 | #pragma mark __AVR_ATmega32__ 683 | 684 | #define _INTERRUPT_NAMES_DEFINED_ 685 | 686 | PGM_P gInterruptNameTable[] PROGMEM = 687 | { 688 | 689 | gAvrInt_RESET, // 1 690 | gAvrInt_INT0, // 2 691 | gAvrInt_INT1, // 3 692 | gAvrInt_INT2, // 4 693 | gAvrInt_TIMER2_COMP, // 5 694 | gAvrInt_TIMER2_OVF, // 6 695 | gAvrInt_TIMER1_CAPT, // 7 696 | gAvrInt_TIMER1_COMPA, // 8 697 | gAvrInt_TIMER1_COMPB, // 9 698 | gAvrInt_TIMER1_OVF, // 10 699 | gAvrInt_TIMER0_COMP, // 11 700 | gAvrInt_TIMER0_OVF, // 12 701 | gAvrInt_SPI_STC, // 13 702 | gAvrInt_USART_RX, // 14 703 | gAvrInt_USART_UDRE, // 15 704 | gAvrInt_USART_TX, // 16 705 | gAvrInt_ADC, // 17 706 | gAvrInt_EE_READY, // 18 707 | gAvrInt_ANALOG_COMP, // 19 708 | gAvrInt_TWI, // 20 709 | gAvrInt_SPM_READY, // 21 710 | 711 | }; 712 | 713 | 714 | #endif 715 | 716 | //************************************************************************************************** 717 | #if defined(__AVR_ATmega32U4__) 718 | #pragma mark __AVR_ATmega32U4__ 719 | //* teensy 2.0 720 | //* http://www.pjrc.com/teensy/pinout.html 721 | #define _INTERRUPT_NAMES_DEFINED_ 722 | 723 | 724 | PGM_P gInterruptNameTable[] PROGMEM = 725 | { 726 | 727 | gAvrInt_RESET, // 1 728 | gAvrInt_INT0, // 2 729 | gAvrInt_INT1, // 3 730 | gAvrInt_INT2, // 4 731 | gAvrInt_INT3, // 5 732 | gAvrInt_RESERVED, // 6 733 | gAvrInt_RESERVED, // 7 734 | gAvrInt_INT6, // 8 735 | gAvrInt_RESERVED, // 9 736 | gAvrInt_PCINT0, // 10 737 | gAvrInt_USB_General, // 11 738 | gAvrInt_USB_Endpoint, // 12 739 | gAvrInt_WDT, // 13 740 | gAvrInt_RESERVED, // 14 741 | gAvrInt_RESERVED, // 15 742 | gAvrInt_RESERVED, // 16 743 | gAvrInt_TIMER1_CAPT, // 17 744 | gAvrInt_TIMER1_COMPA, // 18 745 | gAvrInt_TIMER1_COMPB, // 19 746 | gAvrInt_TIMER1_COMPC, // 20 747 | gAvrInt_TIMER1_OVF, // 21 748 | gAvrInt_TIMER0_COMPA, // 22 749 | gAvrInt_TIMER0_COMPB, // 23 750 | gAvrInt_TIMER0_OVF, // 24 751 | gAvrInt_SPI_STC, // 25 752 | 753 | gAvrInt_USART1_RX, // 26 754 | gAvrInt_USART1_UDRE, // 27 755 | gAvrInt_USART1_TX, // 28 756 | gAvrInt_ANALOG_COMP, // 29 757 | 758 | gAvrInt_ADC, // 30 759 | gAvrInt_EE_READY, // 31 760 | 761 | gAvrInt_TIMER3_CAPT, // 32 762 | gAvrInt_TIMER3_COMPA, // 33 763 | gAvrInt_TIMER3_COMPB, // 34 764 | gAvrInt_TIMER3_COMPC, // 35 765 | gAvrInt_TIMER3_OVF, // 36 766 | gAvrInt_TWI, // 37 767 | gAvrInt_SPM_READY, // 38 768 | 769 | gAvrInt_TIMER4_COMPA, // 39 770 | gAvrInt_TIMER4_COMPB, // 40 771 | gAvrInt_TIMER4_COMPD, // 41 772 | gAvrInt_TIMER4_OVF, // 42 773 | gAvrInt_TIMER4_FPF, // 43 774 | }; 775 | 776 | #endif 777 | 778 | //************************************************************************************************** 779 | #if defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) 780 | #pragma mark __AVR_AT90USB1286__ 781 | //* teensy++ 2.0 782 | //* http://www.pjrc.com/teensy/pinout.html 783 | #define _INTERRUPT_NAMES_DEFINED_ 784 | 785 | 786 | PGM_P gInterruptNameTable[] PROGMEM = 787 | { 788 | 789 | gAvrInt_RESET, // 1 790 | gAvrInt_INT0, // 2 791 | gAvrInt_INT1, // 3 792 | gAvrInt_INT2, // 4 793 | gAvrInt_INT3, // 5 794 | gAvrInt_INT4, // 6 795 | gAvrInt_INT5, // 7 796 | gAvrInt_INT6, // 8 797 | gAvrInt_INT7, // 9 798 | gAvrInt_PCINT0, // 10 799 | gAvrInt_USB_General, // 11 800 | gAvrInt_USB_Endpoint, // 12 801 | gAvrInt_WDT, // 13 802 | gAvrInt_TIMER2_COMPA, // 14 803 | gAvrInt_TIMER2_COMPB, // 15 804 | gAvrInt_TIMER2_OVF, // 16 805 | gAvrInt_TIMER1_CAPT, // 17 806 | gAvrInt_TIMER1_COMPA, // 18 807 | gAvrInt_TIMER1_COMPB, // 19 808 | gAvrInt_TIMER1_COMPC, // 20 809 | gAvrInt_TIMER1_OVF, // 21 810 | gAvrInt_TIMER0_COMPA, // 22 811 | gAvrInt_TIMER0_COMPB, // 23 812 | gAvrInt_TIMER0_OVF, // 24 813 | gAvrInt_SPI_STC, // 25 814 | 815 | gAvrInt_USART1_RX, // 26 816 | gAvrInt_USART1_UDRE, // 27 817 | gAvrInt_USART1_TX, // 28 818 | gAvrInt_ANALOG_COMP, // 29 819 | 820 | gAvrInt_ADC, // 30 821 | gAvrInt_EE_READY, // 31 822 | 823 | gAvrInt_TIMER3_CAPT, // 32 824 | gAvrInt_TIMER3_COMPA, // 33 825 | gAvrInt_TIMER3_COMPB, // 34 826 | gAvrInt_TIMER3_COMPC, // 35 827 | gAvrInt_TIMER3_OVF, // 36 828 | gAvrInt_TWI, // 37 829 | gAvrInt_SPM_READY, // 38 830 | 831 | }; 832 | 833 | #endif 834 | 835 | 836 | 837 | 838 | //************************************************************************************************** 839 | #if defined(__AVR_ATmega128__) || defined(__AVR_ATmega64__) 840 | #pragma mark __AVR_ATmega64__ __AVR_ATmega128__ 841 | #define _INTERRUPT_NAMES_DEFINED_ 842 | 843 | 844 | PGM_P gInterruptNameTable[] PROGMEM = 845 | { 846 | 847 | gAvrInt_RESET, // 1 848 | gAvrInt_INT0, // 2 849 | gAvrInt_INT1, // 3 850 | gAvrInt_INT2, // 4 851 | gAvrInt_INT3, // 5 852 | gAvrInt_INT4, // 6 853 | gAvrInt_INT5, // 7 854 | gAvrInt_INT6, // 8 855 | gAvrInt_INT7, // 9 856 | gAvrInt_TIMER2_COMP, // 10 857 | gAvrInt_TIMER2_OVF, // 11 858 | gAvrInt_TIMER1_CAPT, // 12 859 | gAvrInt_TIMER1_COMPA, // 13 860 | gAvrInt_TIMER1_COMPB, // 14 861 | gAvrInt_TIMER1_OVF, // 15 862 | gAvrInt_TIMER0_COMP, // 16 863 | gAvrInt_TIMER0_OVF, // 17 864 | gAvrInt_SPI_STC, // 18 865 | gAvrInt_USART0_RX, // 19 866 | gAvrInt_USART0_UDRE, // 20 867 | gAvrInt_USART0_TX, // 21 868 | gAvrInt_ADC, // 22 869 | gAvrInt_EE_READY, // 23 870 | gAvrInt_ANALOG_COMP, // 24 871 | gAvrInt_TIMER1_COMPC, // 25 872 | gAvrInt_TIMER3_CAPT, // 26 873 | gAvrInt_TIMER3_COMPA, // 27 874 | gAvrInt_TIMER3_COMPB, // 28 875 | gAvrInt_TIMER3_COMPC, // 29 876 | gAvrInt_TIMER3_OVF, // 30 877 | gAvrInt_USART1_RX, // 31 878 | gAvrInt_USART1_UDRE, // 32 879 | gAvrInt_USART1_TX, // 33 880 | gAvrInt_TWI, // 34 881 | gAvrInt_SPM_READY, // 35 882 | 883 | }; 884 | 885 | #endif 886 | 887 | //************************************************************************************************** 888 | #if defined(__AVR_AT90CAN32__) || defined(__AVR_AT90CAN64__) || defined(__AVR_AT90CAN128__) 889 | #pragma mark __AVR_AT90CAN32__ __AVR_AT90CAN64__ __AVR_AT90CAN128__ 890 | 891 | #define _INTERRUPT_NAMES_DEFINED_ 892 | 893 | PGM_P gInterruptNameTable[] PROGMEM = 894 | { 895 | 896 | gAvrInt_RESET, // 1 897 | gAvrInt_INT0, // 2 898 | gAvrInt_INT1, // 3 899 | gAvrInt_INT2, // 4 900 | gAvrInt_INT3, // 5 901 | gAvrInt_INT4, // 6 902 | gAvrInt_INT5, // 7 903 | gAvrInt_INT6, // 8 904 | gAvrInt_INT7, // 9 905 | gAvrInt_TIMER2_COMP, // 10 906 | gAvrInt_TIMER2_OVF, // 11 907 | gAvrInt_TIMER1_CAPT, // 12 908 | gAvrInt_TIMER1_COMPA, // 13 909 | gAvrInt_TIMER1_COMPB, // 14 910 | gAvrInt_TIMER1_COMPC, // 15 911 | gAvrInt_TIMER1_OVF, // 16 912 | gAvrInt_TIMER0_COMP, // 17 913 | gAvrInt_TIMER0_OVF, // 18 914 | gAvrInt_CAN_TrafnsferCE, // 19 915 | gAvrInt_CAN_TimerOverRun, // 20 916 | gAvrInt_SPI_STC, // 21 917 | gAvrInt_USART0_RX, // 22 918 | gAvrInt_USART0_UDRE, // 23 919 | gAvrInt_USART0_TX, // 24 920 | gAvrInt_ANALOG_COMP, // 25 921 | gAvrInt_ADC, // 26 922 | gAvrInt_EE_READY, // 27 923 | gAvrInt_TIMER3_CAPT, // 28 924 | gAvrInt_TIMER3_COMPA, // 29 925 | gAvrInt_TIMER3_COMPB, // 30 926 | gAvrInt_TIMER3_COMPC, // 31 927 | gAvrInt_TIMER3_OVF, // 32 928 | gAvrInt_USART1_RX, // 33 929 | gAvrInt_USART1_UDRE, // 34 930 | gAvrInt_USART1_TX, // 35 931 | gAvrInt_TWI, // 36 932 | gAvrInt_SPM_READY, // 37 933 | }; 934 | 935 | #endif 936 | 937 | //************************************************************************************************** 938 | #if defined (__AVR_ATmega128RFA1__) 939 | #pragma mark __AVR_ATmega128RFA1__ 940 | #define _INTERRUPT_NAMES_DEFINED_ 941 | 942 | PGM_P gInterruptNameTable[] PROGMEM = 943 | { 944 | //* Atmel changed the number scheme for interrupt vectors 945 | gAvrInt_RESET, // 0 946 | gAvrInt_INT0, // 1 947 | gAvrInt_INT1, // 2 948 | gAvrInt_INT2, // 3 949 | gAvrInt_INT3, // 4 950 | gAvrInt_INT4, // 5 951 | gAvrInt_INT5, // 6 952 | gAvrInt_INT6, // 7 953 | gAvrInt_INT7, // 8 954 | gAvrInt_PCINT0, // 9 955 | gAvrInt_PCINT1, // 10 956 | gAvrInt_PCINT2, // 11 957 | gAvrInt_WDT, // 12 958 | gAvrInt_TIMER2_COMPA, // 13 959 | gAvrInt_TIMER2_COMPB, // 14 960 | gAvrInt_TIMER2_OVF, // 15 961 | gAvrInt_TIMER1_CAPT, // 16 962 | gAvrInt_TIMER1_COMPA, // 17 963 | gAvrInt_TIMER1_COMPB, // 18 964 | gAvrInt_TIMER1_COMPC, // 19 965 | gAvrInt_TIMER1_OVF, // 20 966 | gAvrInt_TIMER0_COMPA, // 21 967 | gAvrInt_TIMER0_COMPB, // 22 968 | gAvrInt_TIMER0_OVF, // 23 969 | gAvrInt_SPI_STC, // 24 970 | gAvrInt_USART0_RX, // 25 971 | gAvrInt_USART0_UDRE, // 26 972 | gAvrInt_USART0_TX, // 27 973 | gAvrInt_ANALOG_COMP, // 28 974 | gAvrInt_ADC, // 29 975 | gAvrInt_EE_READY, // 30 976 | gAvrInt_TIMER3_CAPT, // 31 977 | gAvrInt_TIMER3_COMPA, // 32 978 | gAvrInt_TIMER3_COMPB, // 33 979 | gAvrInt_TIMER3_COMPC, // 34 980 | gAvrInt_TIMER3_OVF, // 35 981 | gAvrInt_USART1_RX, // 36 982 | gAvrInt_USART1_UDRE, // 37 983 | gAvrInt_USART1_TX, // 38 984 | gAvrInt_TWI, // 39 985 | gAvrInt_SPM_READY, // 40 986 | gAvrInt_TIMER4_CAPT, // 41 987 | gAvrInt_TIMER4_COMPA, // 42 988 | gAvrInt_TIMER4_COMPB, // 43 989 | gAvrInt_TIMER4_COMPC, // 44 990 | gAvrInt_TIMER4_OVF, // 45 991 | gAvrInt_TIMER5_CAPT, // 46 992 | gAvrInt_TIMER5_COMPA, // 47 993 | gAvrInt_TIMER5_COMPB, // 48 994 | gAvrInt_TIMER5_COMPC, // 49 995 | gAvrInt_TIMER5_OVF, // 50 996 | #if 1 997 | gAvrInt_RESERVED, // 51 998 | gAvrInt_RESERVED, // 52 999 | gAvrInt_RESERVED, // 53 1000 | 1001 | gAvrInt_RESERVED, // 54 1002 | gAvrInt_RESERVED, // 55 1003 | gAvrInt_RESERVED, // 56 1004 | 1005 | #else 1006 | gAvrInt_USART2_RX, // 51 1007 | gAvrInt_USART2_UDRE, // 52 1008 | gAvrInt_USART2_TX, // 53 1009 | 1010 | gAvrInt_USART3_RX, // 54 1011 | gAvrInt_USART3_UDRE, // 55 1012 | gAvrInt_USART3_TX, // 56 1013 | #endif 1014 | gAvrInt_TRN_PLL_LOCK, // 57 1015 | gAvrInt_TRN_PLL_UNLOCK, // 58 1016 | gAvrInt_TRN_RX_START, // 59 1017 | gAvrInt_TRN_RX_END, // 60 1018 | gAvrInt_TRN_CAAED_DONE, // 61 1019 | gAvrInt_TRN_FRAME_MATCH,// 62 1020 | gAvrInt_TRN_TX_END, // 63 1021 | gAvrInt_TRN_AWAKE, // 64 1022 | 1023 | gAvrInt_SCNT_CMP1, // 65 1024 | gAvrInt_SCNT_CMP2, // 66 1025 | gAvrInt_SCNT_CMP3, // 67 1026 | gAvrInt_SCNT_OVFL, // 68 1027 | gAvrInt_SCNT_BACKOFF, // 69 1028 | gAvrInt_AES_READY, // 70 1029 | gAvrInt_BAT_LOW, // 71 1030 | 1031 | 1032 | }; 1033 | 1034 | #endif 1035 | 1036 | 1037 | #if !defined(_INTERRUPT_NAMES_DEFINED_) 1038 | #warning No interrupt string defs for this cpu 1039 | #endif 1040 | 1041 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/bins/README.txt: -------------------------------------------------------------------------------- 1 | app.bin is the compiled to .bin setfwname.ino 2 | test.bin is a LED fader on DIG 9 (arduino Ethernet) 3 | 4 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/bins/app.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetProbe/MicroBridge-Arduino-ATMega2560/1aaff1d4fb30c761da0df71cf404aad10e545a5e/hardware/microbridge/avr/bootloaders/microbridge/bins/app.bin -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/bins/test.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetProbe/MicroBridge-Arduino-ATMega2560/1aaff1d4fb30c761da0df71cf404aad10e545a5e/hardware/microbridge/avr/bootloaders/microbridge/bins/test.bin -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/command.h: -------------------------------------------------------------------------------- 1 | //**** ATMEL AVR - A P P L I C A T I O N N O T E ************************ 2 | //* 3 | //* Title: AVR068 - STK500 Communication Protocol 4 | //* Filename: command.h 5 | //* Version: 1.0 6 | //* Last updated: 31.01.2005 7 | //* 8 | //* Support E-mail: avr@atmel.com 9 | //* 10 | //************************************************************************** 11 | 12 | // *****************[ STK message constants ]*************************** 13 | 14 | #define MESSAGE_START 0x1B //= ESC = 27 decimal 15 | #define TOKEN 0x0E 16 | 17 | // *****************[ STK general command constants ]************************** 18 | 19 | #define CMD_SIGN_ON 0x01 20 | #define CMD_SET_PARAMETER 0x02 21 | #define CMD_GET_PARAMETER 0x03 22 | #define CMD_SET_DEVICE_PARAMETERS 0x04 23 | #define CMD_OSCCAL 0x05 24 | #define CMD_LOAD_ADDRESS 0x06 25 | #define CMD_FIRMWARE_UPGRADE 0x07 26 | 27 | 28 | // *****************[ STK ISP command constants ]****************************** 29 | 30 | #define CMD_ENTER_PROGMODE_ISP 0x10 31 | #define CMD_LEAVE_PROGMODE_ISP 0x11 32 | #define CMD_CHIP_ERASE_ISP 0x12 33 | #define CMD_PROGRAM_FLASH_ISP 0x13 34 | #define CMD_READ_FLASH_ISP 0x14 35 | #define CMD_PROGRAM_EEPROM_ISP 0x15 36 | #define CMD_READ_EEPROM_ISP 0x16 37 | #define CMD_PROGRAM_FUSE_ISP 0x17 38 | #define CMD_READ_FUSE_ISP 0x18 39 | #define CMD_PROGRAM_LOCK_ISP 0x19 40 | #define CMD_READ_LOCK_ISP 0x1A 41 | #define CMD_READ_SIGNATURE_ISP 0x1B 42 | #define CMD_READ_OSCCAL_ISP 0x1C 43 | #define CMD_SPI_MULTI 0x1D 44 | 45 | // *****************[ STK PP command constants ]******************************* 46 | 47 | #define CMD_ENTER_PROGMODE_PP 0x20 48 | #define CMD_LEAVE_PROGMODE_PP 0x21 49 | #define CMD_CHIP_ERASE_PP 0x22 50 | #define CMD_PROGRAM_FLASH_PP 0x23 51 | #define CMD_READ_FLASH_PP 0x24 52 | #define CMD_PROGRAM_EEPROM_PP 0x25 53 | #define CMD_READ_EEPROM_PP 0x26 54 | #define CMD_PROGRAM_FUSE_PP 0x27 55 | #define CMD_READ_FUSE_PP 0x28 56 | #define CMD_PROGRAM_LOCK_PP 0x29 57 | #define CMD_READ_LOCK_PP 0x2A 58 | #define CMD_READ_SIGNATURE_PP 0x2B 59 | #define CMD_READ_OSCCAL_PP 0x2C 60 | 61 | #define CMD_SET_CONTROL_STACK 0x2D 62 | 63 | // *****************[ STK HVSP command constants ]***************************** 64 | 65 | #define CMD_ENTER_PROGMODE_HVSP 0x30 66 | #define CMD_LEAVE_PROGMODE_HVSP 0x31 67 | #define CMD_CHIP_ERASE_HVSP 0x32 68 | #define CMD_PROGRAM_FLASH_HVSP ` 0x33 69 | #define CMD_READ_FLASH_HVSP 0x34 70 | #define CMD_PROGRAM_EEPROM_HVSP 0x35 71 | #define CMD_READ_EEPROM_HVSP 0x36 72 | #define CMD_PROGRAM_FUSE_HVSP 0x37 73 | #define CMD_READ_FUSE_HVSP 0x38 74 | #define CMD_PROGRAM_LOCK_HVSP 0x39 75 | #define CMD_READ_LOCK_HVSP 0x3A 76 | #define CMD_READ_SIGNATURE_HVSP 0x3B 77 | #define CMD_READ_OSCCAL_HVSP 0x3C 78 | 79 | // *****************[ STK status constants ]*************************** 80 | 81 | // Success 82 | #define STATUS_CMD_OK 0x00 83 | 84 | // Warnings 85 | #define STATUS_CMD_TOUT 0x80 86 | #define STATUS_RDY_BSY_TOUT 0x81 87 | #define STATUS_SET_PARAM_MISSING 0x82 88 | 89 | // Errors 90 | #define STATUS_CMD_FAILED 0xC0 91 | #define STATUS_CKSUM_ERROR 0xC1 92 | #define STATUS_CMD_UNKNOWN 0xC9 93 | 94 | // *****************[ STK parameter constants ]*************************** 95 | #define PARAM_BUILD_NUMBER_LOW 0x80 96 | #define PARAM_BUILD_NUMBER_HIGH 0x81 97 | #define PARAM_HW_VER 0x90 98 | #define PARAM_SW_MAJOR 0x91 99 | #define PARAM_SW_MINOR 0x92 100 | #define PARAM_VTARGET 0x94 101 | #define PARAM_VADJUST 0x95 102 | #define PARAM_OSC_PSCALE 0x96 103 | #define PARAM_OSC_CMATCH 0x97 104 | #define PARAM_SCK_DURATION 0x98 105 | #define PARAM_TOPCARD_DETECT 0x9A 106 | #define PARAM_STATUS 0x9C 107 | #define PARAM_DATA 0x9D 108 | #define PARAM_RESET_POLARITY 0x9E 109 | #define PARAM_CONTROLLER_INIT 0x9F 110 | 111 | // *****************[ STK answer constants ]*************************** 112 | 113 | #define ANSWER_CKSUM_ERROR 0xB0 114 | 115 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/diskio.h: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------------------------------- 2 | / PFF - Low level disk interface modlue include file (C)ChaN, 2009 3 | /-----------------------------------------------------------------------*/ 4 | 5 | #ifndef _DISKIO 6 | 7 | #include "integer.h" 8 | 9 | 10 | /* Status of Disk Functions */ 11 | typedef BYTE DSTATUS; 12 | 13 | 14 | /* Results of Disk Functions */ 15 | typedef enum { 16 | RES_OK = 0, /* 0: Function succeeded */ 17 | RES_ERROR, /* 1: Disk error */ 18 | RES_NOTRDY, /* 2: Not ready */ 19 | RES_PARERR /* 3: Invalid parameter */ 20 | } DRESULT; 21 | 22 | 23 | /*---------------------------------------*/ 24 | /* Prototypes for disk control functions */ 25 | 26 | DSTATUS disk_initialize (void); 27 | DRESULT disk_readp (BYTE*, DWORD, WORD, WORD); 28 | DRESULT disk_writep (const BYTE*, DWORD); 29 | 30 | #define STA_NOINIT 0x01 /* Drive not initialized */ 31 | #define STA_NODISK 0x02 /* No medium in the drive */ 32 | 33 | /* Card type flags (CardType) */ 34 | #define CT_MMC 0x01 /* MMC ver 3 */ 35 | #define CT_SD1 0x02 /* SD ver 1 */ 36 | #define CT_SD2 0x04 /* SD ver 2 */ 37 | #define CT_SDC (CT_SD1|CT_SD2) /* SD */ 38 | #define CT_BLOCK 0x08 /* Block addressing */ 39 | 40 | #define _DISKIO 41 | #endif 42 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/integer.h: -------------------------------------------------------------------------------- 1 | /*-------------------------------------------*/ 2 | /* Integer type definitions for FatFs module */ 3 | /*-------------------------------------------*/ 4 | 5 | #ifndef _INTEGER 6 | #define _INTEGER 7 | 8 | #ifdef _WIN32 /* FatFs development platform */ 9 | 10 | #include 11 | #include 12 | 13 | #else /* Embedded platform */ 14 | 15 | /* These types must be 16-bit, 32-bit or larger integer */ 16 | typedef int INT; 17 | typedef unsigned int UINT; 18 | 19 | /* These types must be 8-bit integer */ 20 | typedef char CHAR; 21 | typedef unsigned char UCHAR; 22 | typedef unsigned char BYTE; 23 | 24 | /* These types must be 16-bit integer */ 25 | typedef short SHORT; 26 | typedef unsigned short USHORT; 27 | typedef unsigned short WORD; 28 | typedef unsigned short WCHAR; 29 | 30 | /* These types must be 32-bit integer */ 31 | typedef long LONG; 32 | typedef unsigned long ULONG; 33 | typedef unsigned long DWORD; 34 | 35 | #endif 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/mmc.c: -------------------------------------------------------------------------------- 1 | /*-----------------------------------------------------------------------/ 2 | / PFF - Generic low level disk control module (C)ChaN, 2010 3 | /------------------------------------------------------------------------/ 4 | / 5 | / Copyright (C) 2010, ChaN, all right reserved. 6 | / 7 | / * This software is a free software and there is NO WARRANTY. 8 | / * No restriction on use. You can use, modify and redistribute it for 9 | / personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. 10 | / * Redistributions of source code must retain the above copyright notice. 11 | / 12 | /------------------------------------------------------------------------/ 13 | / Dec 6, 2010 First release 14 | */ 15 | 16 | #include "pff.h" 17 | #include "diskio.h" 18 | #include 19 | 20 | void init_spi (void); /* Initialize SPI port (asmfunc.S) */ 21 | void deselect (void); /* Select MMC (asmfunc.S) */ 22 | void select (void); /* Deselect MMC (asmfunc.S) */ 23 | void xmit_spi (BYTE d); /* Send a byte to the MMC (asmfunc.S) */ 24 | BYTE rcv_spi (void); /* Send a 0xFF to the MMC and get the received byte (asmfunc.S) */ 25 | void dly_100us (void); /* Delay 100 microseconds (asmfunc.S) */ 26 | 27 | 28 | 29 | /*-------------------------------------------------------------------------- 30 | 31 | Module Private Functions 32 | 33 | ---------------------------------------------------------------------------*/ 34 | 35 | /* Definitions for MMC/SDC command */ 36 | #define CMD0 (0x40+0) /* GO_IDLE_STATE */ 37 | #define CMD1 (0x40+1) /* SEND_OP_COND (MMC) */ 38 | #define ACMD41 (0xC0+41) /* SEND_OP_COND (SDC) */ 39 | #define CMD8 (0x40+8) /* SEND_IF_COND */ 40 | #define CMD16 (0x40+16) /* SET_BLOCKLEN */ 41 | #define CMD17 (0x40+17) /* READ_SINGLE_BLOCK */ 42 | #define CMD24 (0x40+24) /* WRITE_BLOCK */ 43 | #define CMD55 (0x40+55) /* APP_CMD */ 44 | #define CMD58 (0x40+58) /* READ_OCR */ 45 | 46 | 47 | /* Card type flags (CardType) */ 48 | #define CT_MMC 0x01 /* MMC ver 3 */ 49 | #define CT_SD1 0x02 /* SD ver 1 */ 50 | #define CT_SD2 0x04 /* SD ver 2 */ 51 | #define CT_BLOCK 0x08 /* Block addressing */ 52 | 53 | 54 | static 55 | BYTE CardType; 56 | 57 | 58 | /*-----------------------------------------------------------------------*/ 59 | /* Send a command packet to MMC */ 60 | /*-----------------------------------------------------------------------*/ 61 | 62 | static 63 | BYTE send_cmd ( 64 | BYTE cmd, /* 1st byte (Start + Index) */ 65 | DWORD arg /* Argument (32 bits) */ 66 | ) 67 | { 68 | BYTE n, res; 69 | 70 | 71 | if (cmd & 0x80) { /* ACMD is the command sequense of CMD55-CMD */ 72 | cmd &= 0x7F; 73 | res = send_cmd(CMD55, 0); 74 | if (res > 1) return res; 75 | } 76 | 77 | /* Select the card */ 78 | select(); 79 | 80 | /* Send a command packet */ 81 | xmit_spi(cmd); /* Start + Command index */ 82 | xmit_spi((BYTE)(arg >> 24)); /* Argument[31..24] */ 83 | xmit_spi((BYTE)(arg >> 16)); /* Argument[23..16] */ 84 | xmit_spi((BYTE)(arg >> 8)); /* Argument[15..8] */ 85 | xmit_spi((BYTE)arg); /* Argument[7..0] */ 86 | n = 0x01; /* Dummy CRC + Stop */ 87 | if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) */ 88 | if (cmd == CMD8) n = 0x87; /* Valid CRC for CMD8(0x1AA) */ 89 | xmit_spi(n); 90 | 91 | /* Receive a command response */ 92 | n = 10; /* Wait for a valid response in timeout of 10 attempts */ 93 | do { 94 | res = rcv_spi(); 95 | } while ((res & 0x80) && --n); 96 | 97 | return res; /* Return with the response value */ 98 | } 99 | 100 | 101 | 102 | 103 | /*-------------------------------------------------------------------------- 104 | 105 | Public Functions 106 | 107 | ---------------------------------------------------------------------------*/ 108 | 109 | /*-----------------------------------------------------------------------*/ 110 | /* Initialize Disk Drive */ 111 | /*-----------------------------------------------------------------------*/ 112 | 113 | DSTATUS disk_initialize (void) 114 | { 115 | BYTE n, cmd, ty, ocr[4]; 116 | UINT tmr; 117 | 118 | init_spi(); /* Initialize ports to control MMC */ 119 | for (n = 100; n; n--) dly_100us(); /* 10ms delay */ 120 | for (n = 10; n; n--) deselect(); /* 80 Dummy clocks with CS=H */ 121 | 122 | ty = 0; 123 | if (send_cmd(CMD0, 0) == 1) { /* Enter Idle state */ 124 | if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2 */ 125 | for (n = 0; n < 4; n++) ocr[n] = rcv_spi(); /* Get trailing return value of R7 resp */ 126 | if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */ 127 | for (tmr = 10000; tmr && send_cmd(ACMD41, 1UL << 30); tmr--) dly_100us(); /* Wait for leaving idle state (ACMD41 with HCS bit) */ 128 | if (tmr && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */ 129 | for (n = 0; n < 4; n++) ocr[n] = rcv_spi(); 130 | ty = (ocr[0] & 0x40) ? CT_SD2 | CT_BLOCK : CT_SD2; /* SDv2 (HC or SC) */ 131 | } 132 | } 133 | } else { /* SDv1 or MMCv3 */ 134 | if (send_cmd(ACMD41, 0) <= 1) { 135 | ty = CT_SD1; cmd = ACMD41; /* SDv1 */ 136 | } else { 137 | ty = CT_MMC; cmd = CMD1; /* MMCv3 */ 138 | } 139 | for (tmr = 10000; tmr && send_cmd(cmd, 0); tmr--) dly_100us(); /* Wait for leaving idle state */ 140 | if (!tmr || send_cmd(CMD16, 512) != 0) /* Set R/W block length to 512 */ 141 | ty = 0; 142 | } 143 | } 144 | CardType = ty; 145 | deselect(); 146 | 147 | return ty ? 0 : STA_NOINIT; 148 | } 149 | 150 | 151 | 152 | /*-----------------------------------------------------------------------*/ 153 | /* Read partial sector */ 154 | /*-----------------------------------------------------------------------*/ 155 | 156 | DRESULT disk_readp ( 157 | BYTE *buff, /* Pointer to the read buffer (NULL:Read bytes are forwarded to the stream) */ 158 | DWORD lba, /* Sector number (LBA) */ 159 | WORD ofs, /* Byte offset to read from (0..511) */ 160 | WORD cnt /* Number of bytes to read (ofs + cnt mus be <= 512) */ 161 | ) 162 | { 163 | DRESULT res; 164 | BYTE rc; 165 | WORD bc; 166 | 167 | 168 | if (!(CardType & CT_BLOCK)) lba *= 512; /* Convert to byte address if needed */ 169 | 170 | res = RES_ERROR; 171 | if (send_cmd(CMD17, lba) == 0) { /* READ_SINGLE_BLOCK */ 172 | 173 | bc = 40000; 174 | do { /* Wait for data packet */ 175 | rc = rcv_spi(); 176 | } while (rc == 0xFF && --bc); 177 | 178 | if (rc == 0xFE) { /* A data packet arrived */ 179 | bc = 514 - ofs - cnt; 180 | 181 | /* Skip leading bytes */ 182 | if (ofs) { 183 | do rcv_spi(); while (--ofs); 184 | } 185 | 186 | /* Receive a part of the sector */ 187 | do { 188 | *buff++ = rcv_spi(); 189 | } while (--cnt); 190 | 191 | /* Skip trailing bytes and CRC */ 192 | do rcv_spi(); while (--bc); 193 | 194 | res = RES_OK; 195 | } 196 | } 197 | 198 | deselect(); 199 | 200 | return res; 201 | } 202 | 203 | 204 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/mmc.lst: -------------------------------------------------------------------------------- 1 | 1 .file "mmc.c" 2 | 2 __SREG__ = 0x3f 3 | 3 __SP_H__ = 0x3e 4 | 4 __SP_L__ = 0x3d 5 | 5 __CCP__ = 0x34 6 | 6 __tmp_reg__ = 0 7 | 7 __zero_reg__ = 1 8 | 8 .global __do_copy_data 9 | 9 .global __do_clear_bss 10 | 10 .text 11 | 11 .Ltext0: 12 | 12 .cfi_sections .debug_frame 13 | 14 send_cmd: 14 | 15 .LFB0: 15 | 16 .file 1 "mmc.c" 16 | 1:mmc.c **** /*-----------------------------------------------------------------------/ 17 | 2:mmc.c **** / PFF - Generic low level disk control module (C)ChaN, 2010 18 | 3:mmc.c **** /------------------------------------------------------------------------/ 19 | 4:mmc.c **** / 20 | 5:mmc.c **** / Copyright (C) 2010, ChaN, all right reserved. 21 | 6:mmc.c **** / 22 | 7:mmc.c **** / * This software is a free software and there is NO WARRANTY. 23 | 8:mmc.c **** / * No restriction on use. You can use, modify and redistribute it for 24 | 9:mmc.c **** / personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. 25 | 10:mmc.c **** / * Redistributions of source code must retain the above copyright notice. 26 | 11:mmc.c **** / 27 | 12:mmc.c **** /------------------------------------------------------------------------/ 28 | 13:mmc.c **** / Dec 6, 2010 First release 29 | 14:mmc.c **** */ 30 | 15:mmc.c **** 31 | 16:mmc.c **** #include "pff.h" 32 | 17:mmc.c **** #include "diskio.h" 33 | 18:mmc.c **** #include 34 | 19:mmc.c **** 35 | 20:mmc.c **** void init_spi (void); /* Initialize SPI port (asmfunc.S) */ 36 | 21:mmc.c **** void deselect (void); /* Select MMC (asmfunc.S) */ 37 | 22:mmc.c **** void select (void); /* Deselect MMC (asmfunc.S) */ 38 | 23:mmc.c **** void xmit_spi (BYTE d); /* Send a byte to the MMC (asmfunc.S) */ 39 | 24:mmc.c **** BYTE rcv_spi (void); /* Send a 0xFF to the MMC and get the received byte (asmfunc.S) */ 40 | 25:mmc.c **** void dly_100us (void); /* Delay 100 microseconds (asmfunc.S) */ 41 | 26:mmc.c **** 42 | 27:mmc.c **** 43 | 28:mmc.c **** 44 | 29:mmc.c **** /*-------------------------------------------------------------------------- 45 | 30:mmc.c **** 46 | 31:mmc.c **** Module Private Functions 47 | 32:mmc.c **** 48 | 33:mmc.c **** ---------------------------------------------------------------------------*/ 49 | 34:mmc.c **** 50 | 35:mmc.c **** /* Definitions for MMC/SDC command */ 51 | 36:mmc.c **** #define CMD0 (0x40+0) /* GO_IDLE_STATE */ 52 | 37:mmc.c **** #define CMD1 (0x40+1) /* SEND_OP_COND (MMC) */ 53 | 38:mmc.c **** #define ACMD41 (0xC0+41) /* SEND_OP_COND (SDC) */ 54 | 39:mmc.c **** #define CMD8 (0x40+8) /* SEND_IF_COND */ 55 | 40:mmc.c **** #define CMD16 (0x40+16) /* SET_BLOCKLEN */ 56 | 41:mmc.c **** #define CMD17 (0x40+17) /* READ_SINGLE_BLOCK */ 57 | 42:mmc.c **** #define CMD24 (0x40+24) /* WRITE_BLOCK */ 58 | 43:mmc.c **** #define CMD55 (0x40+55) /* APP_CMD */ 59 | 44:mmc.c **** #define CMD58 (0x40+58) /* READ_OCR */ 60 | 45:mmc.c **** 61 | 46:mmc.c **** 62 | 47:mmc.c **** /* Card type flags (CardType) */ 63 | 48:mmc.c **** #define CT_MMC 0x01 /* MMC ver 3 */ 64 | 49:mmc.c **** #define CT_SD1 0x02 /* SD ver 1 */ 65 | 50:mmc.c **** #define CT_SD2 0x04 /* SD ver 2 */ 66 | 51:mmc.c **** #define CT_BLOCK 0x08 /* Block addressing */ 67 | 52:mmc.c **** 68 | 53:mmc.c **** 69 | 54:mmc.c **** static 70 | 55:mmc.c **** BYTE CardType; 71 | 56:mmc.c **** 72 | 57:mmc.c **** 73 | 58:mmc.c **** /*-----------------------------------------------------------------------*/ 74 | 59:mmc.c **** /* Send a command packet to MMC */ 75 | 60:mmc.c **** /*-----------------------------------------------------------------------*/ 76 | 61:mmc.c **** 77 | 62:mmc.c **** static 78 | 63:mmc.c **** BYTE send_cmd ( 79 | 64:mmc.c **** BYTE cmd, /* 1st byte (Start + Index) */ 80 | 65:mmc.c **** DWORD arg /* Argument (32 bits) */ 81 | 66:mmc.c **** ) 82 | 67:mmc.c **** { 83 | 17 .loc 1 67 0 84 | 18 .cfi_startproc 85 | 19 .LVL0: 86 | 20 0000 FF92 push r15 87 | 21 .LCFI0: 88 | 22 .cfi_def_cfa_offset 4 89 | 23 .cfi_offset 15, -3 90 | 24 0002 0F93 push r16 91 | 25 .LCFI1: 92 | 26 .cfi_def_cfa_offset 5 93 | 27 .cfi_offset 16, -4 94 | 28 0004 1F93 push r17 95 | 29 .LCFI2: 96 | 30 .cfi_def_cfa_offset 6 97 | 31 .cfi_offset 17, -5 98 | 32 0006 CF93 push r28 99 | 33 .LCFI3: 100 | 34 .cfi_def_cfa_offset 7 101 | 35 .cfi_offset 28, -6 102 | 36 0008 DF93 push r29 103 | 37 .LCFI4: 104 | 38 .cfi_def_cfa_offset 8 105 | 39 .cfi_offset 29, -7 106 | 40 /* prologue: function */ 107 | 41 /* frame size = 0 */ 108 | 42 /* stack size = 5 */ 109 | 43 .L__stack_usage = 5 110 | 44 000a C82F mov r28,r24 111 | 45 000c D42F mov r29,r20 112 | 46 000e 152F mov r17,r21 113 | 47 0010 062F mov r16,r22 114 | 48 0012 F72E mov r15,r23 115 | 68:mmc.c **** BYTE n, res; 116 | 69:mmc.c **** 117 | 70:mmc.c **** 118 | 71:mmc.c **** if (cmd & 0x80) { /* ACMD is the command sequense of CMD55-CMD */ 119 | 49 .loc 1 71 0 120 | 50 0014 87FF sbrs r24,7 121 | 51 0016 00C0 rjmp .L2 122 | 52 .LVL1: 123 | 72:mmc.c **** cmd &= 0x7F; 124 | 73:mmc.c **** res = send_cmd(CMD55, 0); 125 | 53 .loc 1 73 0 126 | 54 0018 87E7 ldi r24,lo8(119) 127 | 55 .LVL2: 128 | 56 001a 40E0 ldi r20,lo8(0) 129 | 57 001c 50E0 ldi r21,hi8(0) 130 | 58 001e BA01 movw r22,r20 131 | 59 .LVL3: 132 | 60 0020 0E94 0000 call send_cmd 133 | 61 .LVL4: 134 | 74:mmc.c **** if (res > 1) return res; 135 | 62 .loc 1 74 0 136 | 63 0024 8230 cpi r24,lo8(2) 137 | 64 0026 00F4 brsh .L3 138 | 72:mmc.c **** cmd &= 0x7F; 139 | 65 .loc 1 72 0 140 | 66 0028 CF77 andi r28,lo8(127) 141 | 67 .LVL5: 142 | 68 .L2: 143 | 75:mmc.c **** } 144 | 76:mmc.c **** 145 | 77:mmc.c **** /* Select the card */ 146 | 78:mmc.c **** select(); 147 | 69 .loc 1 78 0 148 | 70 002a 0E94 0000 call select 149 | 79:mmc.c **** 150 | 80:mmc.c **** /* Send a command packet */ 151 | 81:mmc.c **** xmit_spi(cmd); /* Start + Command index */ 152 | 71 .loc 1 81 0 153 | 72 002e 8C2F mov r24,r28 154 | 73 0030 0E94 0000 call xmit_spi 155 | 82:mmc.c **** xmit_spi((BYTE)(arg >> 24)); /* Argument[31..24] */ 156 | 74 .loc 1 82 0 157 | 75 0034 8F2D mov r24,r15 158 | 76 0036 0E94 0000 call xmit_spi 159 | 83:mmc.c **** xmit_spi((BYTE)(arg >> 16)); /* Argument[23..16] */ 160 | 77 .loc 1 83 0 161 | 78 003a 802F mov r24,r16 162 | 79 003c 0E94 0000 call xmit_spi 163 | 84:mmc.c **** xmit_spi((BYTE)(arg >> 8)); /* Argument[15..8] */ 164 | 80 .loc 1 84 0 165 | 81 0040 812F mov r24,r17 166 | 82 0042 0E94 0000 call xmit_spi 167 | 85:mmc.c **** xmit_spi((BYTE)arg); /* Argument[7..0] */ 168 | 83 .loc 1 85 0 169 | 84 0046 8D2F mov r24,r29 170 | 85 0048 0E94 0000 call xmit_spi 171 | 86 .LVL6: 172 | 86:mmc.c **** n = 0x01; /* Dummy CRC + Stop */ 173 | 87:mmc.c **** if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) */ 174 | 87 .loc 1 87 0 175 | 88 004c C034 cpi r28,lo8(64) 176 | 89 004e 01F0 breq .L6 177 | 88:mmc.c **** if (cmd == CMD8) n = 0x87; /* Valid CRC for CMD8(0x1AA) */ 178 | 90 .loc 1 88 0 179 | 91 0050 C834 cpi r28,lo8(72) 180 | 92 0052 01F0 breq .L7 181 | 86:mmc.c **** n = 0x01; /* Dummy CRC + Stop */ 182 | 93 .loc 1 86 0 183 | 94 0054 81E0 ldi r24,lo8(1) 184 | 95 0056 00C0 rjmp .L4 185 | 96 .L6: 186 | 87:mmc.c **** if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) */ 187 | 97 .loc 1 87 0 188 | 98 0058 85E9 ldi r24,lo8(-107) 189 | 99 005a 00C0 rjmp .L4 190 | 100 .L7: 191 | 101 .loc 1 88 0 192 | 102 005c 87E8 ldi r24,lo8(-121) 193 | 103 .L4: 194 | 104 .LVL7: 195 | 89:mmc.c **** xmit_spi(n); 196 | 105 .loc 1 89 0 197 | 106 005e 0E94 0000 call xmit_spi 198 | 107 .LVL8: 199 | 108 0062 CAE0 ldi r28,lo8(10) 200 | 109 .LVL9: 201 | 110 .L5: 202 | 90:mmc.c **** 203 | 91:mmc.c **** /* Receive a command response */ 204 | 92:mmc.c **** n = 10; /* Wait for a valid response in timeout of 10 attempts */ 205 | 93:mmc.c **** do { 206 | 94:mmc.c **** res = rcv_spi(); 207 | 111 .loc 1 94 0 discriminator 1 208 | 112 0064 0E94 0000 call rcv_spi 209 | 113 .LVL10: 210 | 95:mmc.c **** } while ((res & 0x80) && --n); 211 | 114 .loc 1 95 0 discriminator 1 212 | 115 0068 87FF sbrs r24,7 213 | 116 006a 00C0 rjmp .L3 214 | 117 006c C150 subi r28,lo8(-(-1)) 215 | 118 006e 01F4 brne .L5 216 | 119 .L3: 217 | 120 /* epilogue start */ 218 | 96:mmc.c **** 219 | 97:mmc.c **** return res; /* Return with the response value */ 220 | 98:mmc.c **** } 221 | 121 .loc 1 98 0 222 | 122 0070 DF91 pop r29 223 | 123 0072 CF91 pop r28 224 | 124 0074 1F91 pop r17 225 | 125 0076 0F91 pop r16 226 | 126 0078 FF90 pop r15 227 | 127 007a 0895 ret 228 | 128 .cfi_endproc 229 | 129 .LFE0: 230 | 131 .global disk_initialize 231 | 133 disk_initialize: 232 | 134 .LFB1: 233 | 99:mmc.c **** 234 | 100:mmc.c **** 235 | 101:mmc.c **** 236 | 102:mmc.c **** 237 | 103:mmc.c **** /*-------------------------------------------------------------------------- 238 | 104:mmc.c **** 239 | 105:mmc.c **** Public Functions 240 | 106:mmc.c **** 241 | 107:mmc.c **** ---------------------------------------------------------------------------*/ 242 | 108:mmc.c **** 243 | 109:mmc.c **** /*-----------------------------------------------------------------------*/ 244 | 110:mmc.c **** /* Initialize Disk Drive */ 245 | 111:mmc.c **** /*-----------------------------------------------------------------------*/ 246 | 112:mmc.c **** 247 | 113:mmc.c **** DSTATUS disk_initialize (void) 248 | 114:mmc.c **** { 249 | 135 .loc 1 114 0 250 | 136 .cfi_startproc 251 | 137 007c DF92 push r13 252 | 138 .LCFI5: 253 | 139 .cfi_def_cfa_offset 4 254 | 140 .cfi_offset 13, -3 255 | 141 007e EF92 push r14 256 | 142 .LCFI6: 257 | 143 .cfi_def_cfa_offset 5 258 | 144 .cfi_offset 14, -4 259 | 145 0080 FF92 push r15 260 | 146 .LCFI7: 261 | 147 .cfi_def_cfa_offset 6 262 | 148 .cfi_offset 15, -5 263 | 149 0082 0F93 push r16 264 | 150 .LCFI8: 265 | 151 .cfi_def_cfa_offset 7 266 | 152 .cfi_offset 16, -6 267 | 153 0084 1F93 push r17 268 | 154 .LCFI9: 269 | 155 .cfi_def_cfa_offset 8 270 | 156 .cfi_offset 17, -7 271 | 157 0086 CF93 push r28 272 | 158 .LCFI10: 273 | 159 .cfi_def_cfa_offset 9 274 | 160 .cfi_offset 28, -8 275 | 161 0088 DF93 push r29 276 | 162 .LCFI11: 277 | 163 .cfi_def_cfa_offset 10 278 | 164 .cfi_offset 29, -9 279 | 165 008a 00D0 rcall . 280 | 166 008c 0F92 push __tmp_reg__ 281 | 167 008e 0F92 push __tmp_reg__ 282 | 168 .LCFI12: 283 | 169 .cfi_def_cfa_offset 15 284 | 170 0090 CDB7 in r28,__SP_L__ 285 | 171 0092 DEB7 in r29,__SP_H__ 286 | 172 .LCFI13: 287 | 173 .cfi_def_cfa_register 28 288 | 174 /* prologue: function */ 289 | 175 /* frame size = 5 */ 290 | 176 /* stack size = 12 */ 291 | 177 .L__stack_usage = 12 292 | 115:mmc.c **** BYTE n, cmd, ty, ocr[4]; 293 | 116:mmc.c **** UINT tmr; 294 | 117:mmc.c **** 295 | 118:mmc.c **** init_spi(); /* Initialize ports to control MMC */ 296 | 178 .loc 1 118 0 297 | 179 0094 0E94 0000 call init_spi 298 | 180 .LVL11: 299 | 181 0098 04E6 ldi r16,lo8(100) 300 | 182 .LVL12: 301 | 183 .L10: 302 | 119:mmc.c **** for (n = 100; n; n--) dly_100us(); /* 10ms delay */ 303 | 184 .loc 1 119 0 discriminator 2 304 | 185 009a 0E94 0000 call dly_100us 305 | 186 009e 0150 subi r16,lo8(-(-1)) 306 | 187 00a0 01F4 brne .L10 307 | 188 .loc 1 119 0 is_stmt 0 308 | 189 00a2 0AE0 ldi r16,lo8(10) 309 | 190 .L11: 310 | 120:mmc.c **** for (n = 10; n; n--) deselect(); /* 80 Dummy clocks with CS=H */ 311 | 191 .loc 1 120 0 is_stmt 1 discriminator 2 312 | 192 00a4 0E94 0000 call deselect 313 | 193 00a8 0150 subi r16,lo8(-(-1)) 314 | 194 00aa 01F4 brne .L11 315 | 195 .LVL13: 316 | 121:mmc.c **** 317 | 122:mmc.c **** ty = 0; 318 | 123:mmc.c **** if (send_cmd(CMD0, 0) == 1) { /* Enter Idle state */ 319 | 196 .loc 1 123 0 320 | 197 00ac 80E4 ldi r24,lo8(64) 321 | 198 00ae 40E0 ldi r20,lo8(0) 322 | 199 00b0 50E0 ldi r21,hi8(0) 323 | 200 00b2 BA01 movw r22,r20 324 | 201 00b4 0E94 0000 call send_cmd 325 | 202 00b8 8130 cpi r24,lo8(1) 326 | 203 00ba 01F0 breq .+2 327 | 204 00bc 00C0 rjmp .L32 328 | 124:mmc.c **** if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2 */ 329 | 205 .loc 1 124 0 330 | 206 00be 88E4 ldi r24,lo8(72) 331 | 207 00c0 4AEA ldi r20,lo8(426) 332 | 208 00c2 51E0 ldi r21,hi8(426) 333 | 209 00c4 60E0 ldi r22,hlo8(426) 334 | 210 00c6 70E0 ldi r23,hhi8(426) 335 | 211 00c8 0E94 0000 call send_cmd 336 | 212 00cc 8130 cpi r24,lo8(1) 337 | 213 00ce 01F4 brne .L13 338 | 214 00d0 7E01 movw r14,r28 339 | 215 00d2 0894 sec 340 | 216 00d4 E11C adc r14,__zero_reg__ 341 | 217 00d6 F11C adc r15,__zero_reg__ 342 | 218 00d8 8701 movw r16,r14 343 | 219 00da 34E0 ldi r19,lo8(4) 344 | 220 00dc D32E mov r13,r19 345 | 221 .L14: 346 | 125:mmc.c **** for (n = 0; n < 4; n++) ocr[n] = rcv_spi(); /* Get trailing return value of R7 resp */ 347 | 222 .loc 1 125 0 discriminator 2 348 | 223 00de 0E94 0000 call rcv_spi 349 | 224 00e2 F801 movw r30,r16 350 | 225 00e4 8193 st Z+,r24 351 | 226 00e6 8F01 movw r16,r30 352 | 227 00e8 DA94 dec r13 353 | 228 00ea 01F4 brne .L14 354 | 126:mmc.c **** if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */ 355 | 229 .loc 1 126 0 356 | 230 00ec 8B81 ldd r24,Y+3 357 | 231 00ee 8130 cpi r24,lo8(1) 358 | 232 00f0 01F0 breq .+2 359 | 233 00f2 00C0 rjmp .L32 360 | 234 .loc 1 126 0 is_stmt 0 discriminator 1 361 | 235 00f4 8C81 ldd r24,Y+4 362 | 236 00f6 8A3A cpi r24,lo8(-86) 363 | 237 00f8 01F0 breq .+2 364 | 238 00fa 00C0 rjmp .L32 365 | 239 00fc 00C0 rjmp .L26 366 | 240 .L16: 367 | 127:mmc.c **** for (tmr = 10000; tmr && send_cmd(ACMD41, 1UL << 30); tmr--) dly_100us(); /* Wait for leaving i 368 | 241 .loc 1 127 0 is_stmt 1 discriminator 1 369 | 242 00fe 0E94 0000 call dly_100us 370 | 243 0102 0150 subi r16,lo8(-(-1)) 371 | 244 0104 1040 sbci r17,hi8(-(-1)) 372 | 245 0106 01F4 brne .L15 373 | 246 0108 00C0 rjmp .L32 374 | 247 .LVL14: 375 | 248 .L26: 376 | 126:mmc.c **** if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */ 377 | 249 .loc 1 126 0 378 | 250 010a 00E1 ldi r16,lo8(10000) 379 | 251 010c 17E2 ldi r17,hi8(10000) 380 | 252 .L15: 381 | 253 .loc 1 127 0 discriminator 2 382 | 254 010e 89EE ldi r24,lo8(-23) 383 | 255 0110 40E0 ldi r20,lo8(1073741824) 384 | 256 0112 50E0 ldi r21,hi8(1073741824) 385 | 257 0114 60E0 ldi r22,hlo8(1073741824) 386 | 258 0116 70E4 ldi r23,hhi8(1073741824) 387 | 259 0118 0E94 0000 call send_cmd 388 | 260 011c 8823 tst r24 389 | 261 011e 01F4 brne .L16 390 | 262 0120 00C0 rjmp .L39 391 | 263 .L31: 392 | 128:mmc.c **** if (tmr && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */ 393 | 264 .loc 1 128 0 394 | 265 0122 04E0 ldi r16,lo8(4) 395 | 266 .L18: 396 | 129:mmc.c **** for (n = 0; n < 4; n++) ocr[n] = rcv_spi(); 397 | 267 .loc 1 129 0 discriminator 2 398 | 268 0124 0E94 0000 call rcv_spi 399 | 269 0128 F701 movw r30,r14 400 | 270 012a 8193 st Z+,r24 401 | 271 012c 7F01 movw r14,r30 402 | 272 012e 0150 subi r16,lo8(-(-1)) 403 | 273 0130 01F4 brne .L18 404 | 130:mmc.c **** ty = (ocr[0] & 0x40) ? CT_SD2 | CT_BLOCK : CT_SD2; /* SDv2 (HC or SC) */ 405 | 274 .loc 1 130 0 406 | 275 0132 8981 ldd r24,Y+1 407 | 276 0134 86FF sbrs r24,6 408 | 277 0136 00C0 rjmp .L28 409 | 278 0138 9CE0 ldi r25,lo8(12) 410 | 279 013a 00C0 rjmp .L12 411 | 280 .L13: 412 | 131:mmc.c **** } 413 | 132:mmc.c **** } 414 | 133:mmc.c **** } else { /* SDv1 or MMCv3 */ 415 | 134:mmc.c **** if (send_cmd(ACMD41, 0) <= 1) { 416 | 281 .loc 1 134 0 417 | 282 013c 89EE ldi r24,lo8(-23) 418 | 283 013e 40E0 ldi r20,lo8(0) 419 | 284 0140 50E0 ldi r21,hi8(0) 420 | 285 0142 BA01 movw r22,r20 421 | 286 0144 0E94 0000 call send_cmd 422 | 287 0148 8230 cpi r24,lo8(2) 423 | 288 014a 00F4 brsh .L29 424 | 135:mmc.c **** ty = CT_SD1; cmd = ACMD41; /* SDv1 */ 425 | 289 .loc 1 135 0 426 | 290 014c 92E0 ldi r25,lo8(2) 427 | 291 014e 29EE ldi r18,lo8(-23) 428 | 292 0150 E22E mov r14,r18 429 | 293 0152 00C0 rjmp .L19 430 | 294 .L29: 431 | 136:mmc.c **** } else { 432 | 137:mmc.c **** ty = CT_MMC; cmd = CMD1; /* MMCv3 */ 433 | 295 .loc 1 137 0 434 | 296 0154 91E0 ldi r25,lo8(1) 435 | 297 0156 81E4 ldi r24,lo8(65) 436 | 298 0158 E82E mov r14,r24 437 | 299 .L19: 438 | 300 .LVL15: 439 | 301 015a 00E1 ldi r16,lo8(10000) 440 | 302 015c 17E2 ldi r17,hi8(10000) 441 | 303 015e 00C0 rjmp .L20 442 | 304 .LVL16: 443 | 305 .L21: 444 | 138:mmc.c **** } 445 | 139:mmc.c **** for (tmr = 10000; tmr && send_cmd(cmd, 0); tmr--) dly_100us(); /* Wait for leaving idle state */ 446 | 306 .loc 1 139 0 discriminator 1 447 | 307 0160 9D83 std Y+5,r25 448 | 308 0162 0E94 0000 call dly_100us 449 | 309 0166 0150 subi r16,lo8(-(-1)) 450 | 310 0168 1040 sbci r17,hi8(-(-1)) 451 | 311 016a 9D81 ldd r25,Y+5 452 | 312 016c 0115 cp r16,__zero_reg__ 453 | 313 016e 1105 cpc r17,__zero_reg__ 454 | 314 0170 01F0 breq .L32 455 | 315 .L20: 456 | 316 .loc 1 139 0 is_stmt 0 discriminator 2 457 | 317 0172 8E2D mov r24,r14 458 | 318 0174 40E0 ldi r20,lo8(0) 459 | 319 0176 50E0 ldi r21,hi8(0) 460 | 320 0178 BA01 movw r22,r20 461 | 321 017a 9D83 std Y+5,r25 462 | 322 017c 0E94 0000 call send_cmd 463 | 323 0180 9D81 ldd r25,Y+5 464 | 324 0182 8823 tst r24 465 | 325 0184 01F4 brne .L21 466 | 326 0186 00C0 rjmp .L40 467 | 327 .LVL17: 468 | 328 .L28: 469 | 130:mmc.c **** ty = (ocr[0] & 0x40) ? CT_SD2 | CT_BLOCK : CT_SD2; /* SDv2 (HC or SC) */ 470 | 329 .loc 1 130 0 is_stmt 1 471 | 330 0188 94E0 ldi r25,lo8(4) 472 | 331 018a 00C0 rjmp .L12 473 | 332 .LVL18: 474 | 333 .L32: 475 | 140:mmc.c **** if (!tmr || send_cmd(CMD16, 512) != 0) /* Set R/W block length to 512 */ 476 | 141:mmc.c **** ty = 0; 477 | 334 .loc 1 141 0 478 | 335 018c 90E0 ldi r25,lo8(0) 479 | 336 .L12: 480 | 337 .LVL19: 481 | 142:mmc.c **** } 482 | 143:mmc.c **** } 483 | 144:mmc.c **** CardType = ty; 484 | 338 .loc 1 144 0 485 | 339 018e 9093 0000 sts CardType,r25 486 | 145:mmc.c **** deselect(); 487 | 340 .loc 1 145 0 488 | 341 0192 9D83 std Y+5,r25 489 | 342 0194 0E94 0000 call deselect 490 | 343 .LVL20: 491 | 146:mmc.c **** 492 | 147:mmc.c **** return ty ? 0 : STA_NOINIT; 493 | 344 .loc 1 147 0 494 | 345 0198 81E0 ldi r24,lo8(1) 495 | 346 019a 9D81 ldd r25,Y+5 496 | 347 019c 9111 cpse r25,__zero_reg__ 497 | 348 019e 80E0 ldi r24,lo8(0) 498 | 349 .L23: 499 | 350 /* epilogue start */ 500 | 148:mmc.c **** } 501 | 351 .loc 1 148 0 502 | 352 01a0 0F90 pop __tmp_reg__ 503 | 353 01a2 0F90 pop __tmp_reg__ 504 | 354 01a4 0F90 pop __tmp_reg__ 505 | 355 01a6 0F90 pop __tmp_reg__ 506 | 356 01a8 0F90 pop __tmp_reg__ 507 | 357 01aa DF91 pop r29 508 | 358 01ac CF91 pop r28 509 | 359 01ae 1F91 pop r17 510 | 360 01b0 0F91 pop r16 511 | 361 01b2 FF90 pop r15 512 | 362 01b4 EF90 pop r14 513 | 363 01b6 DF90 pop r13 514 | 364 01b8 0895 ret 515 | 365 .LVL21: 516 | 366 .L39: 517 | 128:mmc.c **** if (tmr && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */ 518 | 367 .loc 1 128 0 519 | 368 01ba 8AE7 ldi r24,lo8(122) 520 | 369 01bc 40E0 ldi r20,lo8(0) 521 | 370 01be 50E0 ldi r21,hi8(0) 522 | 371 01c0 BA01 movw r22,r20 523 | 372 01c2 0E94 0000 call send_cmd 524 | 373 01c6 8823 tst r24 525 | 374 01c8 01F4 brne .+2 526 | 375 01ca 00C0 rjmp .L31 527 | 376 01cc 00C0 rjmp .L32 528 | 377 .LVL22: 529 | 378 .L40: 530 | 140:mmc.c **** if (!tmr || send_cmd(CMD16, 512) != 0) /* Set R/W block length to 512 */ 531 | 379 .loc 1 140 0 532 | 380 01ce 80E5 ldi r24,lo8(80) 533 | 381 01d0 40E0 ldi r20,lo8(512) 534 | 382 01d2 52E0 ldi r21,hi8(512) 535 | 383 01d4 60E0 ldi r22,hlo8(512) 536 | 384 01d6 70E0 ldi r23,hhi8(512) 537 | 385 01d8 9D83 std Y+5,r25 538 | 386 01da 0E94 0000 call send_cmd 539 | 387 01de 9D81 ldd r25,Y+5 540 | 388 01e0 8823 tst r24 541 | 389 01e2 01F4 brne .L32 542 | 390 01e4 00C0 rjmp .L12 543 | 391 .cfi_endproc 544 | 392 .LFE1: 545 | 394 .global disk_readp 546 | 396 disk_readp: 547 | 397 .LFB2: 548 | 149:mmc.c **** 549 | 150:mmc.c **** 550 | 151:mmc.c **** 551 | 152:mmc.c **** /*-----------------------------------------------------------------------*/ 552 | 153:mmc.c **** /* Read partial sector */ 553 | 154:mmc.c **** /*-----------------------------------------------------------------------*/ 554 | 155:mmc.c **** 555 | 156:mmc.c **** DRESULT disk_readp ( 556 | 157:mmc.c **** BYTE *buff, /* Pointer to the read buffer (NULL:Read bytes are forwarded to the stream) */ 557 | 158:mmc.c **** DWORD lba, /* Sector number (LBA) */ 558 | 159:mmc.c **** WORD ofs, /* Byte offset to read from (0..511) */ 559 | 160:mmc.c **** WORD cnt /* Number of bytes to read (ofs + cnt mus be <= 512) */ 560 | 161:mmc.c **** ) 561 | 162:mmc.c **** { 562 | 398 .loc 1 162 0 563 | 399 .cfi_startproc 564 | 400 .LVL23: 565 | 401 01e6 AF92 push r10 566 | 402 .LCFI14: 567 | 403 .cfi_def_cfa_offset 4 568 | 404 .cfi_offset 10, -3 569 | 405 01e8 BF92 push r11 570 | 406 .LCFI15: 571 | 407 .cfi_def_cfa_offset 5 572 | 408 .cfi_offset 11, -4 573 | 409 01ea CF92 push r12 574 | 410 .LCFI16: 575 | 411 .cfi_def_cfa_offset 6 576 | 412 .cfi_offset 12, -5 577 | 413 01ec DF92 push r13 578 | 414 .LCFI17: 579 | 415 .cfi_def_cfa_offset 7 580 | 416 .cfi_offset 13, -6 581 | 417 01ee EF92 push r14 582 | 418 .LCFI18: 583 | 419 .cfi_def_cfa_offset 8 584 | 420 .cfi_offset 14, -7 585 | 421 01f0 FF92 push r15 586 | 422 .LCFI19: 587 | 423 .cfi_def_cfa_offset 9 588 | 424 .cfi_offset 15, -8 589 | 425 01f2 0F93 push r16 590 | 426 .LCFI20: 591 | 427 .cfi_def_cfa_offset 10 592 | 428 .cfi_offset 16, -9 593 | 429 01f4 1F93 push r17 594 | 430 .LCFI21: 595 | 431 .cfi_def_cfa_offset 11 596 | 432 .cfi_offset 17, -10 597 | 433 01f6 CF93 push r28 598 | 434 .LCFI22: 599 | 435 .cfi_def_cfa_offset 12 600 | 436 .cfi_offset 28, -11 601 | 437 01f8 DF93 push r29 602 | 438 .LCFI23: 603 | 439 .cfi_def_cfa_offset 13 604 | 440 .cfi_offset 29, -12 605 | 441 01fa 0F92 push __tmp_reg__ 606 | 442 .LCFI24: 607 | 443 .cfi_def_cfa_offset 14 608 | 444 01fc CDB7 in r28,__SP_L__ 609 | 445 01fe DEB7 in r29,__SP_H__ 610 | 446 .LCFI25: 611 | 447 .cfi_def_cfa_register 28 612 | 448 /* prologue: function */ 613 | 449 /* frame size = 1 */ 614 | 450 /* stack size = 11 */ 615 | 451 .L__stack_usage = 11 616 | 452 0200 6C01 movw r12,r24 617 | 453 0202 7901 movw r14,r18 618 | 163:mmc.c **** DRESULT res; 619 | 164:mmc.c **** BYTE rc; 620 | 165:mmc.c **** WORD bc; 621 | 166:mmc.c **** 622 | 167:mmc.c **** 623 | 168:mmc.c **** if (!(CardType & CT_BLOCK)) lba *= 512; /* Convert to byte address if needed */ 624 | 454 .loc 1 168 0 625 | 455 0204 8091 0000 lds r24,CardType 626 | 456 .LVL24: 627 | 457 0208 83FD sbrc r24,3 628 | 458 020a 00C0 rjmp .L42 629 | 459 .LVL25: 630 | 460 .loc 1 168 0 is_stmt 0 discriminator 1 631 | 461 020c E9E0 ldi r30,9 632 | 462 020e 440F 1: lsl r20 633 | 463 0210 551F rol r21 634 | 464 0212 661F rol r22 635 | 465 0214 771F rol r23 636 | 466 0216 EA95 dec r30 637 | 467 0218 01F4 brne 1b 638 | 468 .LVL26: 639 | 469 .L42: 640 | 169:mmc.c **** 641 | 170:mmc.c **** res = RES_ERROR; 642 | 171:mmc.c **** if (send_cmd(CMD17, lba) == 0) { /* READ_SINGLE_BLOCK */ 643 | 470 .loc 1 171 0 is_stmt 1 644 | 471 021a 81E5 ldi r24,lo8(81) 645 | 472 021c 0E94 0000 call send_cmd 646 | 473 .LVL27: 647 | 474 0220 8823 tst r24 648 | 475 0222 01F4 brne .L51 649 | 476 0224 50E4 ldi r21,lo8(-25536) 650 | 477 0226 A52E mov r10,r21 651 | 478 0228 5CE9 ldi r21,hi8(-25536) 652 | 479 022a B52E mov r11,r21 653 | 480 .L45: 654 | 172:mmc.c **** 655 | 173:mmc.c **** bc = 40000; 656 | 174:mmc.c **** do { /* Wait for data packet */ 657 | 175:mmc.c **** rc = rcv_spi(); 658 | 481 .loc 1 175 0 discriminator 1 659 | 482 022c 0E94 0000 call rcv_spi 660 | 483 .LVL28: 661 | 176:mmc.c **** } while (rc == 0xFF && --bc); 662 | 484 .loc 1 176 0 discriminator 1 663 | 485 0230 8F3F cpi r24,lo8(-1) 664 | 486 0232 01F4 brne .L44 665 | 487 0234 0894 sec 666 | 488 0236 A108 sbc r10,__zero_reg__ 667 | 489 0238 B108 sbc r11,__zero_reg__ 668 | 490 023a A114 cp r10,__zero_reg__ 669 | 491 023c B104 cpc r11,__zero_reg__ 670 | 492 023e 01F4 brne .L45 671 | 493 0240 00C0 rjmp .L51 672 | 494 .L44: 673 | 177:mmc.c **** 674 | 178:mmc.c **** if (rc == 0xFE) { /* A data packet arrived */ 675 | 495 .loc 1 178 0 676 | 496 0242 8E3F cpi r24,lo8(-2) 677 | 497 0244 01F4 brne .L51 678 | 179:mmc.c **** bc = 514 - ofs - cnt; 679 | 498 .loc 1 179 0 680 | 499 0246 42E0 ldi r20,lo8(514) 681 | 500 0248 A42E mov r10,r20 682 | 501 024a B42E mov r11,r20 683 | 502 024c AE18 sub r10,r14 684 | 503 024e BF08 sbc r11,r15 685 | 504 0250 A01A sub r10,r16 686 | 505 0252 B10A sbc r11,r17 687 | 506 .LVL29: 688 | 507 .L59: 689 | 180:mmc.c **** 690 | 181:mmc.c **** /* Skip leading bytes */ 691 | 182:mmc.c **** if (ofs) { 692 | 508 .loc 1 182 0 693 | 509 0254 E114 cp r14,__zero_reg__ 694 | 510 0256 F104 cpc r15,__zero_reg__ 695 | 511 0258 01F0 breq .L53 696 | 183:mmc.c **** do rcv_spi(); while (--ofs); 697 | 512 .loc 1 183 0 discriminator 1 698 | 513 025a 0E94 0000 call rcv_spi 699 | 514 025e 0894 sec 700 | 515 0260 E108 sbc r14,__zero_reg__ 701 | 516 0262 F108 sbc r15,__zero_reg__ 702 | 517 .LVL30: 703 | 518 0264 00C0 rjmp .L59 704 | 519 .L53: 705 | 184:mmc.c **** } 706 | 185:mmc.c **** 707 | 186:mmc.c **** /* Receive a part of the sector */ 708 | 187:mmc.c **** do { 709 | 188:mmc.c **** *buff++ = rcv_spi(); 710 | 520 .loc 1 188 0 discriminator 1 711 | 521 0266 0E94 0000 call rcv_spi 712 | 522 026a F601 movw r30,r12 713 | 523 026c 8193 st Z+,r24 714 | 524 026e 6F01 movw r12,r30 715 | 525 .LVL31: 716 | 189:mmc.c **** } while (--cnt); 717 | 526 .loc 1 189 0 discriminator 1 718 | 527 0270 0150 subi r16,lo8(-(-1)) 719 | 528 0272 1040 sbci r17,hi8(-(-1)) 720 | 529 .LVL32: 721 | 530 0274 01F4 brne .L53 722 | 531 .LVL33: 723 | 532 .L52: 724 | 190:mmc.c **** 725 | 191:mmc.c **** /* Skip trailing bytes and CRC */ 726 | 192:mmc.c **** do rcv_spi(); while (--bc); 727 | 533 .loc 1 192 0 discriminator 1 728 | 534 0276 0E94 0000 call rcv_spi 729 | 535 027a 0894 sec 730 | 536 027c A108 sbc r10,__zero_reg__ 731 | 537 027e B108 sbc r11,__zero_reg__ 732 | 538 .LVL34: 733 | 539 0280 A114 cp r10,__zero_reg__ 734 | 540 0282 B104 cpc r11,__zero_reg__ 735 | 541 0284 01F4 brne .L52 736 | 193:mmc.c **** 737 | 194:mmc.c **** res = RES_OK; 738 | 542 .loc 1 194 0 739 | 543 0286 80E0 ldi r24,lo8(0) 740 | 544 0288 00C0 rjmp .L43 741 | 545 .LVL35: 742 | 546 .L51: 743 | 170:mmc.c **** res = RES_ERROR; 744 | 547 .loc 1 170 0 745 | 548 028a 81E0 ldi r24,lo8(1) 746 | 549 .L43: 747 | 550 .LVL36: 748 | 195:mmc.c **** } 749 | 196:mmc.c **** } 750 | 197:mmc.c **** 751 | 198:mmc.c **** deselect(); 752 | 551 .loc 1 198 0 753 | 552 028c 8983 std Y+1,r24 754 | 553 028e 0E94 0000 call deselect 755 | 554 .LVL37: 756 | 199:mmc.c **** 757 | 200:mmc.c **** return res; 758 | 201:mmc.c **** } 759 | 555 .loc 1 201 0 760 | 556 0292 8981 ldd r24,Y+1 761 | 557 /* epilogue start */ 762 | 558 0294 0F90 pop __tmp_reg__ 763 | 559 0296 DF91 pop r29 764 | 560 0298 CF91 pop r28 765 | 561 029a 1F91 pop r17 766 | 562 029c 0F91 pop r16 767 | 563 .LVL38: 768 | 564 029e FF90 pop r15 769 | 565 02a0 EF90 pop r14 770 | 566 .LVL39: 771 | 567 02a2 DF90 pop r13 772 | 568 02a4 CF90 pop r12 773 | 569 .LVL40: 774 | 570 02a6 BF90 pop r11 775 | 571 02a8 AF90 pop r10 776 | 572 02aa 0895 ret 777 | 573 .cfi_endproc 778 | 574 .LFE2: 779 | 576 .lcomm CardType,1 780 | 577 .Letext0: 781 | 578 .file 2 "integer.h" 782 | 579 .file 3 "diskio.h" 783 | DEFINED SYMBOLS 784 | *ABS*:00000000 mmc.c 785 | /var/folders/v_/frz4s8vn63g2ztygqj155f6m0000gn/T//ccNNMJL7.s:2 *ABS*:0000003f __SREG__ 786 | /var/folders/v_/frz4s8vn63g2ztygqj155f6m0000gn/T//ccNNMJL7.s:3 *ABS*:0000003e __SP_H__ 787 | /var/folders/v_/frz4s8vn63g2ztygqj155f6m0000gn/T//ccNNMJL7.s:4 *ABS*:0000003d __SP_L__ 788 | /var/folders/v_/frz4s8vn63g2ztygqj155f6m0000gn/T//ccNNMJL7.s:5 *ABS*:00000034 __CCP__ 789 | /var/folders/v_/frz4s8vn63g2ztygqj155f6m0000gn/T//ccNNMJL7.s:6 *ABS*:00000000 __tmp_reg__ 790 | /var/folders/v_/frz4s8vn63g2ztygqj155f6m0000gn/T//ccNNMJL7.s:7 *ABS*:00000001 __zero_reg__ 791 | /var/folders/v_/frz4s8vn63g2ztygqj155f6m0000gn/T//ccNNMJL7.s:14 .text:00000000 send_cmd 792 | /var/folders/v_/frz4s8vn63g2ztygqj155f6m0000gn/T//ccNNMJL7.s:133 .text:0000007c disk_initialize 793 | .bss:00000000 CardType 794 | /var/folders/v_/frz4s8vn63g2ztygqj155f6m0000gn/T//ccNNMJL7.s:396 .text:000001e6 disk_readp 795 | 796 | UNDEFINED SYMBOLS 797 | __do_copy_data 798 | __do_clear_bss 799 | select 800 | xmit_spi 801 | rcv_spi 802 | init_spi 803 | dly_100us 804 | deselect 805 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/mmc.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetProbe/MicroBridge-Arduino-ATMega2560/1aaff1d4fb30c761da0df71cf404aad10e545a5e/hardware/microbridge/avr/bootloaders/microbridge/mmc.o -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/pff.h: -------------------------------------------------------------------------------- 1 | /*---------------------------------------------------------------------------/ 2 | / Petit FatFs - FAT file system module include file R0.02a (C)ChaN, 2010 3 | /----------------------------------------------------------------------------/ 4 | / Petit FatFs module is an open source software to implement FAT file system to 5 | / small embedded systems. This is a free software and is opened for education, 6 | / research and commercial developments under license policy of following trems. 7 | / 8 | / Copyright (C) 2010, ChaN, all right reserved. 9 | / 10 | / * The Petit FatFs module is a free software and there is NO WARRANTY. 11 | / * No restriction on use. You can use, modify and redistribute it for 12 | / personal, non-profit or commercial use UNDER YOUR RESPONSIBILITY. 13 | / * Redistributions of source code must retain the above copyright notice. 14 | / 15 | /----------------------------------------------------------------------------*/ 16 | 17 | #include "integer.h" 18 | 19 | /*---------------------------------------------------------------------------/ 20 | / Petit FatFs Configuration Options 21 | / 22 | / CAUTION! Do not forget to make clean the project after any changes to 23 | / the configuration options. 24 | / 25 | /----------------------------------------------------------------------------*/ 26 | #ifndef _FATFS 27 | #define _FATFS 28 | 29 | #define _USE_READ 1 /* 1:Enable pf_read() */ 30 | 31 | #define _USE_DIR 0 /* 1:Enable pf_opendir() and pf_readdir() */ 32 | 33 | #define _USE_LSEEK 0 /* 1:Enable pf_lseek() */ 34 | 35 | #define _USE_WRITE 0 /* 1:Enable pf_write() */ 36 | 37 | #define _FS_FAT12 0 /* 1:Enable FAT12 support */ 38 | #define _FS_FAT32 1 /* 1:Enable FAT32 support */ 39 | 40 | 41 | #define _CODE_PAGE 1 42 | /* Defines which code page is used for path name. Supported code pages are: 43 | / 932, 936, 949, 950, 437, 720, 737, 775, 850, 852, 855, 857, 858, 862, 866, 44 | / 874, 1250, 1251, 1252, 1253, 1254, 1255, 1257, 1258 and 1 (ASCII only). 45 | / SBCS code pages except for 1 requiers a case conversion table. This 46 | / might occupy 128 bytes on the RAM on some platforms, e.g. avr-gcc. */ 47 | 48 | 49 | #define _WORD_ACCESS 1 50 | /* The _WORD_ACCESS option defines which access method is used to the word 51 | / data in the FAT structure. 52 | / 53 | / 0: Byte-by-byte access. Always compatible with all platforms. 54 | / 1: Word access. Do not choose this unless following condition is met. 55 | / 56 | / When the byte order on the memory is big-endian or address miss-aligned 57 | / word access results incorrect behavior, the _WORD_ACCESS must be set to 0. 58 | / If it is not the case, the value can also be set to 1 to improve the 59 | / performance and code efficiency. */ 60 | 61 | 62 | /* End of configuration options. Do not change followings without care. */ 63 | /*--------------------------------------------------------------------------*/ 64 | 65 | 66 | 67 | #if _FS_FAT32 68 | #define CLUST DWORD 69 | #else 70 | #define CLUST WORD 71 | #endif 72 | 73 | 74 | /* File system object structure */ 75 | 76 | typedef struct { 77 | BYTE fs_type; /* FAT sub type */ 78 | BYTE flag; /* File status flags */ 79 | BYTE csize; /* Number of sectors per cluster */ 80 | BYTE pad1; 81 | WORD n_rootdir; /* Number of root directory entries (0 on FAT32) */ 82 | CLUST n_fatent; /* Number of FAT entries (= number of clusters + 2) */ 83 | DWORD fatbase; /* FAT start sector */ 84 | DWORD dirbase; /* Root directory start sector (Cluster# on FAT32) */ 85 | DWORD database; /* Data start sector */ 86 | DWORD fptr; /* File R/W pointer */ 87 | DWORD fsize; /* File size */ 88 | CLUST org_clust; /* File start cluster */ 89 | CLUST curr_clust; /* File current cluster */ 90 | DWORD dsect; /* File current data sector */ 91 | } FATFS; 92 | 93 | 94 | 95 | /* Directory object structure */ 96 | 97 | typedef struct { 98 | WORD index; /* Current read/write index number */ 99 | BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ 100 | CLUST sclust; /* Table start cluster (0:Static table) */ 101 | CLUST clust; /* Current cluster */ 102 | DWORD sect; /* Current sector */ 103 | } DIR; 104 | 105 | 106 | 107 | /* File status structure */ 108 | 109 | typedef struct { 110 | DWORD fsize; /* File size */ 111 | WORD fdate; /* Last modified date */ 112 | WORD ftime; /* Last modified time */ 113 | BYTE fattrib; /* Attribute */ 114 | char fname[13]; /* File name */ 115 | } FILINFO; 116 | 117 | 118 | 119 | /* File function return code (FRESULT) */ 120 | 121 | typedef enum { 122 | FR_OK = 0, /* 0 */ 123 | FR_DISK_ERR, /* 1 */ 124 | FR_NOT_READY, /* 2 */ 125 | FR_NO_FILE, /* 3 */ 126 | FR_NO_PATH, /* 4 */ 127 | FR_NOT_OPENED, /* 5 */ 128 | FR_NOT_ENABLED, /* 6 */ 129 | FR_NO_FILESYSTEM /* 7 */ 130 | } FRESULT; 131 | 132 | 133 | 134 | /*--------------------------------------------------------------*/ 135 | /* Petit FatFs module application interface */ 136 | 137 | FRESULT pf_mount (FATFS*); /* Mount/Unmount a logical drive */ 138 | FRESULT pf_open (const char*); /* Open a file */ 139 | FRESULT pf_read (void*, WORD, WORD*); /* Read data from the open file */ 140 | FRESULT pf_write (const void*, WORD, WORD*); /* Write data to the open file */ 141 | FRESULT pf_lseek (DWORD); /* Move file pointer of the open file */ 142 | FRESULT pf_opendir (DIR*, const char*); /* Open a directory */ 143 | FRESULT pf_readdir (DIR*, FILINFO*); /* Read a directory item from the open directory */ 144 | 145 | 146 | 147 | /*--------------------------------------------------------------*/ 148 | /* Flags and offset address */ 149 | 150 | /* File status flag (FATFS.flag) */ 151 | 152 | #define FA_OPENED 0x01 153 | #define FA_WPRT 0x02 154 | #define FA__WIP 0x40 155 | 156 | 157 | /* FAT sub type (FATFS.fs_type) */ 158 | 159 | #define FS_FAT12 1 160 | #define FS_FAT16 2 161 | #define FS_FAT32 3 162 | 163 | 164 | /* File attribute bits for directory entry */ 165 | 166 | #define AM_RDO 0x01 /* Read only */ 167 | #define AM_HID 0x02 /* Hidden */ 168 | #define AM_SYS 0x04 /* System */ 169 | #define AM_VOL 0x08 /* Volume label */ 170 | #define AM_LFN 0x0F /* LFN entry */ 171 | #define AM_DIR 0x10 /* Directory */ 172 | #define AM_ARC 0x20 /* Archive */ 173 | #define AM_MASK 0x3F /* Mask of defined bits */ 174 | 175 | 176 | /*--------------------------------*/ 177 | /* Multi-byte word access macros */ 178 | 179 | #if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */ 180 | #define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr)) 181 | #define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr)) 182 | #define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val) 183 | #define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val) 184 | #else /* Use byte-by-byte access to the FAT structure */ 185 | #define LD_WORD(ptr) (WORD)(((WORD)*((BYTE*)(ptr)+1)<<8)|(WORD)*(BYTE*)(ptr)) 186 | #define LD_DWORD(ptr) (DWORD)(((DWORD)*((BYTE*)(ptr)+3)<<24)|((DWORD)*((BYTE*)(ptr)+2)<<16)|((WORD)*((BYTE*)(ptr)+1)<<8)|*(BYTE*)(ptr)) 187 | #define ST_WORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8) 188 | #define ST_DWORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8); *((BYTE*)(ptr)+2)=(BYTE)((DWORD)(val)>>16); *((BYTE*)(ptr)+3)=(BYTE)((DWORD)(val)>>24) 189 | #endif 190 | 191 | 192 | #endif /* _FATFS */ 193 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/pff.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetProbe/MicroBridge-Arduino-ATMega2560/1aaff1d4fb30c761da0df71cf404aad10e545a5e/hardware/microbridge/avr/bootloaders/microbridge/pff.o -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/stk500boot.eep: -------------------------------------------------------------------------------- 1 | :040000033000E000E9 2 | :00000001FF 3 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/stk500boot.elf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetProbe/MicroBridge-Arduino-ATMega2560/1aaff1d4fb30c761da0df71cf404aad10e545a5e/hardware/microbridge/avr/bootloaders/microbridge/stk500boot.elf -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/stk500boot.hex: -------------------------------------------------------------------------------- 1 | :020000023000CC 2 | :10E0000077C000009DC000009BC0000099C00000C8 3 | :10E0100097C0000095C0000093C0000091C00000B0 4 | :10E020008FC000008DC000008BC0000089C00000C0 5 | :10E0300087C0000085C0000083C0000081C00000D0 6 | :10E040007FC000007DC000007BC0000079C00000E0 7 | :10E0500077C0000075C0000073C0000071C00000F0 8 | :10E060006FC000006DC000006BC0000069C0000000 9 | :10E0700067C0000065C0000063C0000061C0000010 10 | :10E080005FC000005DC000005BC0000059C0000020 11 | :10E0900057C0000055C0000053C0000051C0000030 12 | :10E0A0004FC000004DC000004BC0000049C0000040 13 | :10E0B00047C0000045C0000043C0000041C0000050 14 | :10E0C0003FC000003DC000003BC0000039C0000060 15 | :10E0D00037C0000035C0000033C0000031C0000070 16 | :10E0E0002FC0000041546D65676132353630000045 17 | :10E0F00011241FBECFEFD1E2DEBFCDBF01E00CBFC8 18 | :10E1000012E0A0E0B2E0E2EDF7EF03E00BBF02C0E7 19 | :10E1100007900D92A231B107D9F71BBE13E0A2E11F 20 | :10E12000B2E001C01D92AD34B107E1F7BCD60D9449 21 | :10E13000E7FB01E20EBF0FEF0DBF11241FBEB3C6F8 22 | :10E140005FCF8093C6008091C00086FFFCCF809196 23 | :10E15000C00080648093C000089520E030E008C0D3 24 | :10E16000EFECF7E03197F1F700C000002F5F3F4F71 25 | :10E1700028173907A9F70895CF93DF93EC01C60F4D 26 | :10E18000D11DCE01A0E0B0E02196ABBFFC0187918C 27 | :10E19000882311F0D6DFF5CFDF91CF9108958DE080 28 | :10E1A000D0DF8AE0CECFE8DFFACFCF93DF93EC0168 29 | :10E1B0008991882311F0C5DFFBCFDF91CF910895BE 30 | :10E1C000CF93C82F982F92959F70892F805D8A33A7 31 | :10E1D00008F0895FB6DFCF708C2F805D8A3308F03E 32 | :10E1E000895FAFDFCF9108950F931F93CF93DF9394 33 | :10E1F000EC018B01853691051CF46330710544F008 34 | :10E20000CE0164E670E00F9481FB862F805D99DF7C 35 | :10E21000CB30D1051CF40230110564F0CE0164E668 36 | :10E2200070E00F9481FB6AE070E00F9481FB862F11 37 | :10E23000805D87DFCE016AE070E00F9481FB805D36 38 | :10E2400080DFDF91CF911F910F9108950F931F935E 39 | :10E25000CF93DF93C0911402D091150262507040A9 40 | :10E26000804090400E811F812885398502501040E2 41 | :10E2700020403040601771078207930788F42A8195 42 | :10E2800030E040E050E00F9462FB8B019C018A89F2 43 | :10E290009B89AC89BD89080F191F2A1F3B1F03C02A 44 | :10E2A00000E010E09801B801C901DF91CF911F9102 45 | :10E2B0000F910895CF93DF93EC01E0911402F09158 46 | :10E2C0001502198218828C819D81AE81BF818130B7 47 | :10E2D0009105A105B10561F1468157816085718580 48 | :10E2E00084179507A607B70718F50097A105B1058C 49 | :10E2F00039F42081233021F486859785A089B1895E 50 | :10E3000088879987AA87BB870097A105B10531F057 51 | :10E31000BC01CD019BDFDC01CB0104C08685978564 52 | :10E32000A089B1898C879D87AE87BF8780E001C0B7 53 | :10E3300081E0DF91CF9108950F931F93CF93DF93E7 54 | :10E3400000D00F92CDB7DEB7DC01CB01E091140213 55 | :10E35000F091150282309105A105B10508F452C073 56 | :10E36000468157816085718584179507A607B70791 57 | :10E3700008F048C02081223021F0233009F042C04B 58 | :10E380001CC0492F5A2F6B2F7727028513852485B0 59 | :10E390003585400F511F621F731F9C013070220F83 60 | :10E3A000331FCE01019602E010E0D3D4882351F54B 61 | :10E3B00009811A8120E030E029C0AC01BD0127E0CD 62 | :10E3C00076956795579547952A95D1F702851385D8 63 | :10E3D00024853585400F511F621F731F9C012F77C5 64 | :10E3E0003070220F331F220F331FCE01019604E03D 65 | :10E3F00010E0AFD4882331F409811A812B813C814C 66 | :10E400003F7004C001E010E020E030E0B801C90135 67 | :10E410000F900F900F900F90DF91CF911F910F9160 68 | :10E420000895CF92DF92EF92FF920F931F93CF93B5 69 | :10E43000DF93EC016A017B012EEF31E002E010E096 70 | :10E4400088D4882341F5888199812AEA8535920705 71 | :10E4500021F5CE01B701A60126E330E07AD4882366 72 | :10E4600031F48881998121E486349207C1F0CE018C 73 | :10E47000B701A60122E530E002E010E06AD488236B 74 | :10E4800041F481E02881398191E42634390741F44F 75 | :10E4900006C081E005C083E003C082E001C080E0E7 76 | :10E4A000DF91CF911F910F91FF90EF90DF90CF9070 77 | :10E4B00008954F925F926F927F92AF92BF92CF92E8 78 | :10E4C000DF92EF92FF920F931F93CF93DF93CDB71D 79 | :10E4D000DEB7A8970FB6F894DEBF0FBECDBF5C01C4 80 | :10E4E0001092150210921402009709F4E2C08BD327 81 | :10E4F00080FDE1C0CE01019640E050E0BA0191DF1D 82 | :10E500008130D9F4CE01019640E050E0BA012EEB03 83 | :10E5100031E000E110E01DD4882309F0CEC08D81E8 84 | :10E52000882309F4CCC0C984DA84EB84FC84CE014E 85 | :10E530000196B701A60175DF03C0CC24DD24760166 86 | :10E54000833009F4BAC0882309F0B9C0CE0101961E 87 | :10E55000B701A6012DE030E004E210E0FAD38823F1 88 | :10E5600009F0ABC06A857B8580E090E0611571059C 89 | :10E570008105910521F4688D798D8A8D9B8D2C8183 90 | :10E5800030E040E050E00F9462FB6DA37EA38FA3C8 91 | :10E5900098A74A815B8160E070E026013701440E54 92 | :10E5A000551E661E771ED5011A964D925D926D928C 93 | :10E5B0007C921D97298112962C931297CD80DE8034 94 | :10E5C0001596DC92CE9214978F819885A0E0B0E0EA 95 | :10E5D0000097A105B10521F48C899D89AE89BF8979 96 | :10E5E00034E0D694C7943A95E1F7EE24FF24841BD7 97 | :10E5F000950BA60BB70B4DA15EA16FA178A5841B4F 98 | :10E60000950BA60BB70B8C199D09AE09BF0930E01D 99 | :10E6100040E050E0BC01CD010F9494FB89019A01C8 100 | :10E620000E5F1F4F2F4F3F4FD50116960D931D9331 101 | :10E630002D933C931997073FBFE01B07B0E02B07D2 102 | :10E64000B0E03B07E0F1073FEFEF1E07E0E02E07E9 103 | :10E65000E0E03E0710F482E001C083E0D5018C9336 104 | :10E66000833029F488A199A1AAA1BBA108C08DA1DA 105 | :10E670009EA1AFA1B8A5840D951DA61DB71DF501DE 106 | :10E6800086879787A08BB18BC40CD51CE61CF71C22 107 | :10E690004DA15EA16FA178A5C40ED51EE61EF71E82 108 | :10E6A000C28AD38AE48AF58A1182B0921502A092B6 109 | :10E6B000140280E005C082E003C081E001C087E071 110 | :10E6C000A8960FB6F894DEBF0FBECDBFDF91CF91F5 111 | :10E6D0001F910F91FF90EF90DF90CF90BF90AF9080 112 | :10E6E0007F906F905F904F9008958F929F92AF921E 113 | :10E6F000BF92CF92DF92EF92FF920F931F93CF932F 114 | :10E70000DF93CDB7DEB7EC970FB6F894DEBF0FBE40 115 | :10E71000CDBF80901402909015028114910409F4E9 116 | :10E720003CC1F40111829E012F5F3F4F388B2F8730 117 | :10E730009C015901F90180812F5F3F4F8032C9F35D 118 | :10E740008F3209F45901198A1A8A1B8A1C8AF50129 119 | :10E750008081813240F4CE010D96ACDD1D8E882380 120 | :10E7600009F4F1C01DC110E2E12EEF85F889DF0147 121 | :10E770008BE090E001C0ED9201972FEF8F3F920761 122 | :10E78000D1F790E0FF2428E0D501AF0DB11D8C91A9 123 | :10E79000F3948132C0F08F32B1F08E3211F09217C3 124 | :10E7A00038F0283081F48E3271F498E02BE0ECCF11 125 | :10E7B000382F31563A3108F48052DF01A90FB11DCC 126 | :10E7C0008C939F5FE1CF91E0813208F090E09387D6 127 | :10E7D000CE010D966FDD882309F093C0498D5A8DC7 128 | :10E7E0006B8D7C8D2D853E852F703070B5E0220FAE 129 | :10E7F000331FBA95E1F7CE014D9600E210E0A9D2A1 130 | :10E80000882309F0E7C08D8D882309F47DC048A5D1 131 | :10E8100043FD14C0AF85B8899E01235E3F4FCD01F3 132 | :10E820000B968D010817190709F4CDC0F901619104 133 | :10E830009F01F80151918F016517A1F3C090140257 134 | :10E84000D09015020D851E850F5F1F4F09F45CC027 135 | :10E85000898D9A8DAB8DBC8D0097A105B10509F40A 136 | :10E8600053C098012F7030702115310509F046C052 137 | :10E870000196A11DB11D898F9A8FAB8FBC8F4D89D9 138 | :10E880005E896F89788DF601411551056105710525 139 | :10E8900031F48481958108171907B0F52FC0828162 140 | :10E8A00090E001979801A4E036952795AA95E1F7A5 141 | :10E8B00082239323009711F5CB01BA013DDDAB0113 142 | :10E8C000BC01423051056105710508F483C0F601B1 143 | :10E8D00086819781A085B185481759076A077B070C 144 | :10E8E00098F44D8B5E8B6F8B788FCB01BA01AEDCC9 145 | :10E8F000DC01CB01898F9A8FAB8FBC8F1E870D8770 146 | :10E900006DCF833009F04CC0EF85F889838588236B 147 | :10E9100009F462C044C044FF5FC0AF0CB11C49A9F8 148 | :10E920005AA960E070E0BA01552744278FA998AD35 149 | :10E93000A0E0B0E0482B592B6A2B7B2B498B5A8BDC 150 | :10E940006B8B7C8B12CF8D8D882349F188A584FD3C 151 | :10E9500026C049A95AA960E070E0BA0155274427AA 152 | :10E960008FA998ADA0E0B0E0482B592B6A2B7B2BE8 153 | :10E97000F401468F578F60A371A389AD9AADABADFB 154 | :10E98000BCAD828F938FA48FB58F168A178A108E95 155 | :10E99000118E81E0818380E003C086E001C083E0C6 156 | :10E9A000EC960FB6F894DEBF0FBECDBFDF91CF91CE 157 | :10E9B0001F910F91FF90EF90DF90CF90BF90AF909D 158 | :10E9C0009F908F9008951B968C911B97882309F434 159 | :10E9D000A2CFB9CF81E0E4CF84E0E2CF4F925F9243 160 | :10E9E0006F927F928F929F92AF92BF92CF92DF925F 161 | :10E9F000EF92FF920F931F93CF93DF933C016B0134 162 | :10EA00004A01E0901402F0901502FA01118210827E 163 | :10EA1000E114F10409F4AEC0F701818180FFACC0BC 164 | :10EA2000428D538D648D758D86899789A08DB18DAA 165 | :10EA3000481B590B6A0B7B0BC601A0E0B0E04817DE 166 | :10EA400059076A077B0708F46A015301412C82E0E9 167 | :10EA5000582E86C0F70146895789608D718DDB017C 168 | :10EA6000CA019170A070B0700097A105B10509F0BE 169 | :10EA700040C0DB01CA0109E0B695A7959795879537 170 | :10EA80000A95D1F7C281C150C823E9F44115510557 171 | :10EA90006105710529F4868D978DA0A1B1A108C0EB 172 | :10EAA000F70162A173A184A195A146DCDC01CB0131 173 | :10EAB00082309105A105B10508F458C0F70182A381 174 | :10EAC00093A3A4A3B5A3F70162A173A184A195A107 175 | :10EAD000BDDBDC01CB010097A105B10509F446C0FF 176 | :10EAE0008C0F911DA11DB11DF70186A397A3A0A7AF 177 | :10EAF000B1A7F701268937893170C201821B930BB8 178 | :10EB0000E6018C159D0508F4EC016114710419F4FB 179 | :10EB100080E090E001C0C501F70146A157A160A5C2 180 | :10EB200071A58E0116D1882309F5AE0160E070E071 181 | :10EB3000F70186899789A08DB18D840F951FA61F37 182 | :10EB4000B71F868B978BA08FB18FAC0EBD1ECC1AD2 183 | :10EB5000DD0AF401808191818C0F9D1F9183808358 184 | :10EB6000C114D10409F076CF80E007C0F70111820B 185 | :10EB700081E003C086E001C085E0DF91CF911F9165 186 | :10EB80000F91FF90EF90DF90CF90BF90AF909F904C 187 | :10EB90008F907F906F905F904F900895FF920F93AA 188 | :10EBA0001F93CF93DF93C82FD42F152F062FF72E47 189 | :10EBB00087FF08C087E740E050E0BA01EFDF82300E 190 | :10EBC000E0F4CF7730D18C2F33D18F2D31D1802FFE 191 | :10EBD0002FD1812F2DD18D2F2BD1C03421F0C834CE 192 | :10EBE00021F081E003C085E901C087E821D1CAE0B6 193 | :10EBF0001ED187FF02C0C150D9F7DF91CF911F917D 194 | :10EC00000F91FF900895DF92EF92FF920F931F9361 195 | :10EC1000CF93DF9300D00F920F92CDB7DEB7F6D02F 196 | :10EC200004E6F9D00150E9F70AE000D10150E9F714 197 | :10EC300080E440E050E0BA01B1DF813009F05FC00C 198 | :10EC400088E44AEA51E060E070E0A8DF813091F5A5 199 | :10EC50007E010894E11CF11C870134E0D32EE7D03B 200 | :10EC6000F80181938F01DA94D1F78B81813009F01B 201 | :10EC700046C08C818A3A09F042C005C0CCD0015010 202 | :10EC8000104019F43CC000E117E289EE40E050E08A 203 | :10EC900060E070E483DF882389F747C004E0C7D0D1 204 | :10ECA000F70181937F010150D1F7898186FF25C04B 205 | :10ECB0009CE026C089EE40E050E0BA016FDF823070 206 | :10ECC00020F492E029EEE22E03C091E081E4E82EE8 207 | :10ECD00000E117E208C09D839ED0015010409D8145 208 | :10ECE0000115110561F08E2D40E050E0BA019D83C1 209 | :10ECF00055DF9D81882379F721C094E001C090E021 210 | :10ED0000909316029D8392D081E09D81911180E0C5 211 | :10ED10000F900F900F900F900F90DF91CF911F9158 212 | :10ED20000F91FF90EF90DF9008958AE740E050E068 213 | :10ED3000BA0134DF882309F4B1CFE1CF80E540E0A8 214 | :10ED400052E060E070E09D8329DF9D818823B9F661 215 | :10ED5000D7CFAF92BF92CF92DF92EF92FF920F93F5 216 | :10ED60001F93CF93DF930F92CDB7DEB76C0179017C 217 | :10ED70008091160283FD07C0E9E0440F551F661F0E 218 | :10ED8000771FEA95D1F781E509DF882379F550E40B 219 | :10ED9000A52E5CE9B52E4BD08F3F39F40894A1081D 220 | :10EDA000B108A114B104B9F721C08E3FF9F442E0D3 221 | :10EDB000A42EB42EAE18BF08A01AB10AE114F104B3 222 | :10EDC00029F035D00894E108F108F8CF30D0F601E9 223 | :10EDD00081936F0101501040C9F729D00894A10810 224 | :10EDE000B108A114B104C9F780E001C081E08983B2 225 | :10EDF0001DD089810F90DF91CF911F910F91FF90CE 226 | :10EE0000EF90DF90CF90BF90AF900895209A229A14 227 | :10EE1000219A2B9A089580EA319731973197000013 228 | :10EE20008A95D1F7089502D0289801C0289A8FEFCB 229 | :10EE300098E087FD2A9A87FF2A98880F1B99839567 230 | :10EE4000299A29989A95A9F70895FB018BBF83E029 231 | :10EE500080935700E8958091570080FDFCCF81E1B9 232 | :10EE600080935700E89508950F921F928BBFFB0186 233 | :10EE7000DA0190E80D901D9081E080935700E895AD 234 | :10EE800032969A95B9F7FB0185E080935700E89593 235 | :10EE90008091570080FDFCCF81E180935700E89579 236 | :10EEA0001F900F900895CF93DF93CDB7DEB7C15376 237 | :10EEB000D1400FB6F894DEBF0FBECDBF01E20EBF4A 238 | :10EEC0000FEF0DBF94B7F894A89514BE8091600021 239 | :10EED00088618093600010926000789493FF05C071 240 | :10EEE000E0911202F09113021995279A2F9A8091BE 241 | :10EEF000C00082608093C00080E18093C40088E1FC 242 | :10EF00008093C100000088249924540117ECC12E7D 243 | :10EF10001BE1D12EE12CF12C00E010E024C025E013 244 | :10EF20002A95F1F700000894811C911CA11CB11CCA 245 | :10EF300001E010E031E283163EE4930630E0A306E0 246 | :10EF400030E0B30610F400E010E0C501B401A70101 247 | :10EF50009601EAD3DC01CB010097A105B10519F4B4 248 | :10EF600085B1805885B98091C00087FD03C0011527 249 | :10EF70001105A9F2C80101968130910509F030C34D 250 | :10EF8000ECC280E090E081309105C9F41FC0019689 251 | :10EF9000A11DB11D8130E2E19E07EAE7AE07E0E086 252 | :10EFA000BE0780F0C05DDE4F88819981C053D1409B 253 | :10EFB000AFEF8F3F9A0719F0EE27FF27099480E003 254 | :10EFC00090E0DC013091C00037FFE1CF3091C60006 255 | :10EFD0000894C11CD11C3132F1F4BAE0CB16D10433 256 | :10EFE000D0F40F5F1F4F03301105B9F4CA5DDE4F37 257 | :10EFF000D982C882C652D140C85DDE4F798368830A 258 | :10F00000C852D140CC5DDE4F19821882C452D14023 259 | :10F010002224239457C000E010E02330D9F024309C 260 | :10F0200028F4213071F0223080F407C0253009F136 261 | :10F030002530B8F0263081F52BC03B3109F0A1CF47 262 | :10F0400039C3E326332E22E09CCF532F40E0E32642 263 | :10F0500023E097CF832F90E0482B592BE32624E021 264 | :10F0600090CF3E3009F02AC3E32660E070E025E04F 265 | :10F0700088CFE3E0F0E0EC0FFD1FE60FF71F3083D1 266 | :10F080006F5F7F4FE3266417750709F07ACF18C3C7 267 | :10F090003E1509F013C303C0273009F072CFCC5DD1 268 | :10F0A000DE4F19830883C452D140CA5DDE4FD98236 269 | :10F0B000C882C652D140C85DDE4F79836883C8528A 270 | :10F0C000D14022248B81833109F402C18431C8F4F8 271 | :10F0D000863009F4D0C0873050F4823009F4F6C08D 272 | :10F0E000833009F46AC0813009F0FEC14FC081311C 273 | :10F0F00009F470C0823108F0B0C0803109F0F4C169 274 | :10F10000E5C0883109F483C0893150F4853109F4B0 275 | :10F11000DFC0853108F488C1863109F0E5C184C1BA 276 | :10F120008A3109F467C08A3108F485C08B3109F44B 277 | :10F1300054C08D3109F0D8C18F81803339F499855D 278 | :10F140009923A9F09130A9F4E8E916C0982F907599 279 | :10F1500091F0803519F4E0E0F0E004C0883559F40E 280 | :10F16000E3E0F0E099E090935700E49105C0EEE110 281 | :10F1700003C0E1E001C0E0E01C821D828E831F829B 282 | :10F18000E8871986B7E0CB2ED12CB3C11C8288E06A 283 | :10F190008D8381E48E8386E58F8382E5888789E489 284 | :10F1A000898783E58A8780E58B878FE58C8782E373 285 | :10F1B0008D87ABE0CA2ED12C9CC1EC81E059E330A5 286 | :10F1C00028F4F0E0E25FFD4F808101C080E01C8206 287 | :10F1D0008D833FC02224239479C08F81882321F01E 288 | :10F1E000813021F488E903C08EE101C081E01C82F6 289 | :10F1F0008D8308C01C82E1E0F0E089E08093570035 290 | :10F20000E491ED831E82F4E0CF2ED12C72C18D816A 291 | :10F21000803549F48E81883019F4E2E0F0E005C0D1 292 | :10F22000E0E0F0E002C0E3E0F0E089E08093570026 293 | :10F23000E4911C82E6CF8F81836C99E0E1E0F0E0FD 294 | :10F24000082E90935700E89507B600FCFDCF1C826E 295 | :10F250001D82E3E0CE2ED12C4CC180EC8C8372E079 296 | :10F26000C72ED12CC05EDE4F188219821A821B82F3 297 | :10F27000C052D1403EC18C8190E0A0E0B0E0782E39 298 | :10F280006624552444248D8190E0A0E0B0E0DC01A8 299 | :10F2900099278827482A592A6A2A7B2A8F8190E051 300 | :10F2A000A0E0B0E0482A592A6A2A7B2A8E8190E0A1 301 | :10F2B000A0E0B0E0BA2FA92F982F8827482A592A12 302 | :10F2C0006A2A7B2A440C551C661C771C1C820EC1C2 303 | :10F2D000EC81C55DDE4FE883CB52D140C65DDE4F89 304 | :10F2E0001882CA52D140CD80DD24C65DDE4F288110 305 | :10F2F0003981CA52D140C22AD32A833109F06CC065 306 | :10F30000C05EDE4F288139814A815B81C052D14085 307 | :10F31000203080EC380783E0480780E05807F0F49D 308 | :10F3200083E0F90140935B0080935700E89507B6AE 309 | :10F3300000FCFDCFC05EDE4F288139814A815B81B0 310 | :10F34000C052D14020503F4F4F4F5F4FC05EDE4F05 311 | :10F35000288339834A835B83C052D1408D85DE0187 312 | :10F360001F969301820141E0B601FD013197508162 313 | :10F37000C35DDE4F5883CD52D140C45DDE4F18824D 314 | :10F38000CC52D14090E0C45DDE4FE881F981CC528F 315 | :10F39000D1408E2B9F2B0C01F80120935B004093F2 316 | :10F3A0005700E89511240E5F1F4F2F4F3F4F6250BB 317 | :10F3B000704019F08C911296D8CF85E0F2016092DE 318 | :10F3C0005B0080935700E89507B600FCFDCF81E114 319 | :10F3D00080935700E89524C053014201B694A79446 320 | :10F3E0009794879400E010E02DE0E22EF12CEC0ED3 321 | :10F3F000FD1E09C0D7016D917D01C801880D991DC1 322 | :10F40000D8D10F5F1F4F0C151D05A1F720E030E08C 323 | :10F41000000F111F221F331F040D151D261D371D40 324 | :10F420001C822801390162C0BC81C15DDE4FB883F6 325 | :10F43000CF52D140C25DDE4F1882CE52D1402D81D5 326 | :10F4400030E0C25DDE4FE881F981CE52D1402E2BF3 327 | :10F450003F2BB3E0CB2ED12CC20ED31E1C828431A5 328 | :10F46000C9F4DE011596A9019D01D301C201ABBF0C 329 | :10F47000FC0167917691F901608371832E5F3F4FA4 330 | :10F480000296A11DB11D4250504089F72C013D014B 331 | :10F49000D90128C0F901B301A2018E010B5F1F4FF2 332 | :10F4A00041BDBB27A72F962F852F82BD4F5F5F4F92 333 | :10F4B0006F4F7F4FF89A80B5D8018D938D013197AA 334 | :10F4C00079F7C9010197A0E0B0E00196A11DB11D37 335 | :10F4D000480E591E6A1E7B1EA5E0B0E0AC0FBD1F92 336 | :10F4E000A20FB31F1C9205C080EC8C8332E0C32EA8 337 | :10F4F000D12C8BE10F94A1F0832D0F94A1F08D2DD1 338 | :10F500000F94A1F08C2D0F94A1F08EE00F94A1F038 339 | :10F5100095E1E92EE324EC24ED2423E0822E912CC6 340 | :10F520008C0E9D1E0AC0F40111914F01812F0F9482 341 | :10F53000A1F0E1260894C108D108C114D10499F7BB 342 | :10F540008E2D0F94A1F0339485B1805885B9222077 343 | :10F5500009F0A2C080E090E02DC0CA5DDE4F1982A4 344 | :10F560001882C652D140CC5DDE4F19821882C45237 345 | :10F57000D140332410E0C85DDE4F19821882C85292 346 | :10F58000D140C05EDE4F188219821A821B82C0529F 347 | :10F59000D14044245524320120E030E0A9014BBF82 348 | :10F5A000F90147915691C05DDE4F59834883C0539E 349 | :10F5B000D140E12E40E050E020E0CC5DDE4F0881FC 350 | :10F5C0001981C452D140CA5DDE4FC880D980C6526D 351 | :10F5D000D140C85DDE4F68817981C852D140D3CC1B 352 | :10F5E0008230910509F058C08FEF91E0DAD0803F6A 353 | :10F5F00009F052C087E192E00F9459F280E092E066 354 | :10F6000074D8882309F048C08DE00F94A1F08AE0F7 355 | :10F610000F94A1F088249924540185B1805885B9AC 356 | :10F6200082E390E00F94ADF0C501B4010EDC89E4F3 357 | :10F6300092E06FEF70E040E051E0ACD089E492E0FE 358 | :10F6400060E071E0AE014F5F5F4FC8D989819A8158 359 | :10F65000009729F0C501B40149E452E005DC80E0DF 360 | :10F6600091E0A0E0B0E0880E991EAA1EBB1E90E0BB 361 | :10F67000891690EE990693E0A90690E0B90669F61E 362 | :10F680008DE00F94A1F08AE00F94A1F010920D028A 363 | :10F690008FEF91E06FEF8DD000008091C0008D7FE3 364 | :10F6A0008093C00081E180935700E895EE27FF2703 365 | :10F6B0000994FFCF8BE1E82E21E063CC20E061CC00 366 | :10F6C00026E05FCC629FD001739FF001829FE00D26 367 | :10F6D000F11D649FE00DF11D929FF00D839FF00DD1 368 | :10F6E000749FF00D659FF00D9927729FB00DE11D7D 369 | :10F6F000F91F639FB00DE11DF91FBD01CF0111245A 370 | :10F70000089597FB092E07260AD077FD04D02ED046 371 | :10F7100006D000201AF4709561957F4F0895F6F792 372 | :10F72000909581959F4F0895A1E21A2EAA1BBB1BAD 373 | :10F73000FD010DC0AA1FBB1FEE1FFF1FA217B307BD 374 | :10F74000E407F50720F0A21BB30BE40BF50B661FD3 375 | :10F75000771F881F991F1A9469F760957095809597 376 | :10F7600090959B01AC01BD01CF010895AA1BBB1B65 377 | :10F7700051E107C0AA1FBB1FA617B70710F0A61BB1 378 | :10F78000B70B881F991F5A95A9F780959095BC01D2 379 | :10F79000CD010895DC0101C06D9341505040E0F768 380 | :10F7A0000895F999FECF92BD81BDF89A992780B549 381 | :10F7B0000895262FF999FECF1FBA92BD81BD20BDB5 382 | :10F7C0000FB6F894FA9AF99A0FBE01960895F89434 383 | :02F7D000FFCF69 384 | :10F7D2006669726D776172652E62696E00010F0251 385 | :02F7E2000A001B 386 | :040000033000E000E9 387 | :00000001FF 388 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/stk500boot.map: -------------------------------------------------------------------------------- 1 | Archive member included because of file (symbol) 2 | 3 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_mulsi3.o) 4 | pff.o (__mulsi3) 5 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 6 | stk500boot.o (__divmodhi4) 7 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodsi4.o) 8 | stk500boot.o (__udivmodsi4) 9 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 10 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o (exit) 11 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 12 | stk500boot.o (__do_copy_data) 13 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 14 | stk500boot.o (__do_clear_bss) 15 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodhi4.o) 16 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) (__udivmodhi4) 17 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(memset.o) 18 | stk500boot.o (memset) 19 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eerd_byte_atmega2560.o) 20 | stk500boot.o (__eerd_byte_m2560) 21 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eewr_byte_atmega2560.o) 22 | stk500boot.o (__eewr_byte_m2560) 23 | 24 | Allocating common symbols 25 | Common symbol size file 26 | 27 | Fatfs 0x2a stk500boot.o 28 | gEepromIndex 0x4 stk500boot.o 29 | gFlashIndex 0x4 stk500boot.o 30 | Buff 0x100 stk500boot.o 31 | gRamIndex 0x4 stk500boot.o 32 | 33 | Memory Configuration 34 | 35 | Name Origin Length Attributes 36 | text 0x00000000 0x00100000 xr 37 | data 0x00800200 0x0000fe00 rw !x 38 | eeprom 0x00810000 0x00010000 rw !x 39 | fuse 0x00820000 0x00000400 rw !x 40 | lock 0x00830000 0x00000400 rw !x 41 | signature 0x00840000 0x00000400 rw !x 42 | *default* 0x00000000 0xffffffff 43 | 44 | Linker script and memory map 45 | 46 | Address of section .data set to 0x800200 47 | LOAD /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 48 | LOAD stk500boot.o 49 | LOAD pff.o 50 | LOAD mmc.o 51 | LOAD asmfunc.o 52 | LOAD /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libm.a 53 | Address of section .text set to 0x3e000 54 | LOAD /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a 55 | LOAD /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a 56 | LOAD /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a 57 | 58 | .hash 59 | *(.hash) 60 | 61 | .dynsym 62 | *(.dynsym) 63 | 64 | .dynstr 65 | *(.dynstr) 66 | 67 | .gnu.version 68 | *(.gnu.version) 69 | 70 | .gnu.version_d 71 | *(.gnu.version_d) 72 | 73 | .gnu.version_r 74 | *(.gnu.version_r) 75 | 76 | .rel.init 77 | *(.rel.init) 78 | 79 | .rela.init 80 | *(.rela.init) 81 | 82 | .rel.text 83 | *(.rel.text) 84 | *(.rel.text.*) 85 | *(.rel.gnu.linkonce.t*) 86 | 87 | .rela.text 88 | *(.rela.text) 89 | *(.rela.text.*) 90 | *(.rela.gnu.linkonce.t*) 91 | 92 | .rel.fini 93 | *(.rel.fini) 94 | 95 | .rela.fini 96 | *(.rela.fini) 97 | 98 | .rel.rodata 99 | *(.rel.rodata) 100 | *(.rel.rodata.*) 101 | *(.rel.gnu.linkonce.r*) 102 | 103 | .rela.rodata 104 | *(.rela.rodata) 105 | *(.rela.rodata.*) 106 | *(.rela.gnu.linkonce.r*) 107 | 108 | .rel.data 109 | *(.rel.data) 110 | *(.rel.data.*) 111 | *(.rel.gnu.linkonce.d*) 112 | 113 | .rela.data 114 | *(.rela.data) 115 | *(.rela.data.*) 116 | *(.rela.gnu.linkonce.d*) 117 | 118 | .rel.ctors 119 | *(.rel.ctors) 120 | 121 | .rela.ctors 122 | *(.rela.ctors) 123 | 124 | .rel.dtors 125 | *(.rel.dtors) 126 | 127 | .rela.dtors 128 | *(.rela.dtors) 129 | 130 | .rel.got 131 | *(.rel.got) 132 | 133 | .rela.got 134 | *(.rela.got) 135 | 136 | .rel.bss 137 | *(.rel.bss) 138 | 139 | .rela.bss 140 | *(.rela.bss) 141 | 142 | .rel.plt 143 | *(.rel.plt) 144 | 145 | .rela.plt 146 | *(.rela.plt) 147 | 148 | .text 0x0003e000 0x17d2 149 | *(.vectors) 150 | .vectors 0x0003e000 0xe4 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 151 | 0x0003e000 __vectors 152 | 0x0003e000 __vector_default 153 | *(.vectors) 154 | *(.progmem.gcc*) 155 | *(.progmem*) 156 | .progmem.data 0x0003e0e4 0xb stk500boot.o 157 | 0x0003e0e4 gTextMsg_CPU_Name 158 | 0x0003e0f0 . = ALIGN (0x2) 159 | *fill* 0x0003e0ef 0x1 00 160 | 0x0003e0f0 __trampolines_start = . 161 | *(.trampolines) 162 | .trampolines 0x0003e0f0 0x0 linker stubs 163 | *(.trampolines*) 164 | 0x0003e0f0 __trampolines_end = . 165 | *(.jumptables) 166 | *(.jumptables*) 167 | *(.lowtext) 168 | *(.lowtext*) 169 | 0x0003e0f0 __ctors_start = . 170 | *(.ctors) 171 | 0x0003e0f0 __ctors_end = . 172 | 0x0003e0f0 __dtors_start = . 173 | *(.dtors) 174 | 0x0003e0f0 __dtors_end = . 175 | SORT(*)(.ctors) 176 | SORT(*)(.dtors) 177 | *(.init0) 178 | .init0 0x0003e0f0 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 179 | 0x0003e0f0 __init 180 | *(.init0) 181 | *(.init1) 182 | *(.init1) 183 | *(.init2) 184 | .init2 0x0003e0f0 0x10 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 185 | *(.init2) 186 | *(.init3) 187 | *(.init3) 188 | *(.init4) 189 | .init4 0x0003e100 0x1c /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 190 | 0x0003e100 __do_copy_data 191 | .init4 0x0003e11c 0x10 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 192 | 0x0003e11c __do_clear_bss 193 | *(.init4) 194 | *(.init5) 195 | *(.init5) 196 | *(.init6) 197 | *(.init6) 198 | *(.init7) 199 | *(.init7) 200 | *(.init8) 201 | *(.init8) 202 | *(.init9) 203 | .init9 0x0003e12c 0x6 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 204 | .init9 0x0003e132 0xe stk500boot.o 205 | 0x0003e132 __jumpMain 206 | *(.init9) 207 | *(.text) 208 | .text 0x0003e140 0x2 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 209 | 0x0003e140 __vector_42 210 | 0x0003e140 __vector_22 211 | 0x0003e140 __vector_28 212 | 0x0003e140 __vector_1 213 | 0x0003e140 __vector_32 214 | 0x0003e140 __vector_34 215 | 0x0003e140 __vector_24 216 | 0x0003e140 __vector_12 217 | 0x0003e140 __vector_55 218 | 0x0003e140 __vector_46 219 | 0x0003e140 __bad_interrupt 220 | 0x0003e140 __vector_6 221 | 0x0003e140 __vector_31 222 | 0x0003e140 __vector_35 223 | 0x0003e140 __vector_39 224 | 0x0003e140 __vector_3 225 | 0x0003e140 __vector_23 226 | 0x0003e140 __vector_30 227 | 0x0003e140 __vector_45 228 | 0x0003e140 __vector_25 229 | 0x0003e140 __vector_11 230 | 0x0003e140 __vector_54 231 | 0x0003e140 __vector_13 232 | 0x0003e140 __vector_17 233 | 0x0003e140 __vector_19 234 | 0x0003e140 __vector_56 235 | 0x0003e140 __vector_7 236 | 0x0003e140 __vector_49 237 | 0x0003e140 __vector_41 238 | 0x0003e140 __vector_43 239 | 0x0003e140 __vector_27 240 | 0x0003e140 __vector_5 241 | 0x0003e140 __vector_33 242 | 0x0003e140 __vector_47 243 | 0x0003e140 __vector_52 244 | 0x0003e140 __vector_37 245 | 0x0003e140 __vector_4 246 | 0x0003e140 __vector_44 247 | 0x0003e140 __vector_51 248 | 0x0003e140 __vector_9 249 | 0x0003e140 __vector_2 250 | 0x0003e140 __vector_21 251 | 0x0003e140 __vector_15 252 | 0x0003e140 __vector_36 253 | 0x0003e140 __vector_29 254 | 0x0003e140 __vector_40 255 | 0x0003e140 __vector_8 256 | 0x0003e140 __vector_26 257 | 0x0003e140 __vector_48 258 | 0x0003e140 __vector_14 259 | 0x0003e140 __vector_53 260 | 0x0003e140 __vector_10 261 | 0x0003e140 __vector_50 262 | 0x0003e140 __vector_16 263 | 0x0003e140 __vector_18 264 | 0x0003e140 __vector_20 265 | 0x0003e140 __vector_38 266 | .text 0x0003e142 0x10a stk500boot.o 267 | 0x0003e15a delay_ms 268 | 0x0003e178 PrintFromPROGMEM 269 | 0x0003e19e PrintNewLine 270 | 0x0003e1a6 PrintFromPROGMEMln 271 | 0x0003e1aa PrintString 272 | 0x0003e1c0 PrintHexByte 273 | 0x0003e1e8 PrintDecInt 274 | .text 0x0003e24c 0x950 pff.o 275 | 0x0003e4b2 pf_mount 276 | 0x0003e6ea pf_open 277 | 0x0003e9dc pf_read 278 | .text 0x0003eb9c 0x270 mmc.o 279 | 0x0003ec06 disk_initialize 280 | 0x0003ed52 disk_readp 281 | .text 0x0003ee0c 0x9a asmfunc.o 282 | 0x0003ee0c init_spi 283 | 0x0003ee16 dly_100us 284 | 0x0003ee26 select 285 | 0x0003ee2c deselect 286 | 0x0003ee2e rcv_spi 287 | 0x0003ee30 xmit_spi 288 | 0x0003ee4a flash_erase 289 | 0x0003ee68 flash_write 290 | .text 0x0003eea6 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_mulsi3.o) 291 | .text 0x0003eea6 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 292 | .text 0x0003eea6 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodsi4.o) 293 | .text 0x0003eea6 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 294 | .text 0x0003eea6 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 295 | .text 0x0003eea6 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 296 | .text 0x0003eea6 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodhi4.o) 297 | .text 0x0003eea6 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(memset.o) 298 | .text 0x0003eea6 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eerd_byte_atmega2560.o) 299 | .text 0x0003eea6 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eewr_byte_atmega2560.o) 300 | 0x0003eea6 . = ALIGN (0x2) 301 | *(.text.*) 302 | .text.startup 0x0003eea6 0x81e stk500boot.o 303 | 0x0003eea6 main 304 | .text.libgcc 0x0003f6c4 0x3e /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_mulsi3.o) 305 | 0x0003f6c4 __mulsi3 306 | .text.libgcc 0x0003f702 0x26 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 307 | 0x0003f702 __divmodhi4 308 | 0x0003f702 _div 309 | .text.libgcc 0x0003f728 0x44 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodsi4.o) 310 | 0x0003f728 __udivmodsi4 311 | .text.libgcc 0x0003f76c 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 312 | .text.libgcc 0x0003f76c 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 313 | .text.libgcc 0x0003f76c 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 314 | .text.libgcc 0x0003f76c 0x28 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodhi4.o) 315 | 0x0003f76c __udivmodhi4 316 | .text.avr-libc 317 | 0x0003f794 0xe /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(memset.o) 318 | 0x0003f794 memset 319 | .text.avr-libc 320 | 0x0003f7a2 0x10 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eerd_byte_atmega2560.o) 321 | 0x0003f7a2 __eerd_byte_m2560 322 | .text.avr-libc 323 | 0x0003f7b2 0x1c /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eewr_byte_atmega2560.o) 324 | 0x0003f7b2 __eewr_byte_m2560 325 | 0x0003f7b4 __eewr_r18_m2560 326 | 0x0003f7ce . = ALIGN (0x2) 327 | *(.fini9) 328 | .fini9 0x0003f7ce 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 329 | 0x0003f7ce exit 330 | 0x0003f7ce _exit 331 | *(.fini9) 332 | *(.fini8) 333 | *(.fini8) 334 | *(.fini7) 335 | *(.fini7) 336 | *(.fini6) 337 | *(.fini6) 338 | *(.fini5) 339 | *(.fini5) 340 | *(.fini4) 341 | *(.fini4) 342 | *(.fini3) 343 | *(.fini3) 344 | *(.fini2) 345 | *(.fini2) 346 | *(.fini1) 347 | *(.fini1) 348 | *(.fini0) 349 | .fini0 0x0003f7ce 0x4 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 350 | *(.fini0) 351 | 0x0003f7d2 _etext = . 352 | 353 | .data 0x00800200 0x12 load address 0x0003f7d2 354 | 0x00800200 PROVIDE (__data_start, .) 355 | *(.data) 356 | .data 0x00800200 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 357 | .data 0x00800200 0x11 stk500boot.o 358 | 0x0080020d check 359 | .data 0x00800211 0x0 pff.o 360 | .data 0x00800211 0x0 mmc.o 361 | .data 0x00800211 0x0 asmfunc.o 362 | .data 0x00800211 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_mulsi3.o) 363 | .data 0x00800211 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 364 | .data 0x00800211 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodsi4.o) 365 | .data 0x00800211 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 366 | .data 0x00800211 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 367 | .data 0x00800211 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 368 | .data 0x00800211 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodhi4.o) 369 | .data 0x00800211 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(memset.o) 370 | .data 0x00800211 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eerd_byte_atmega2560.o) 371 | .data 0x00800211 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eewr_byte_atmega2560.o) 372 | *(.data*) 373 | *(.rodata) 374 | *(.rodata*) 375 | *(.gnu.linkonce.d*) 376 | 0x00800212 . = ALIGN (0x2) 377 | *fill* 0x00800211 0x1 00 378 | 0x00800212 _edata = . 379 | 0x00800212 PROVIDE (__data_end, .) 380 | 381 | .bss 0x00800212 0x13b 382 | 0x00800212 PROVIDE (__bss_start, .) 383 | *(.bss) 384 | .bss 0x00800212 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 385 | .bss 0x00800212 0x2 stk500boot.o 386 | 0x00800212 app_start 387 | .bss 0x00800214 0x2 pff.o 388 | .bss 0x00800216 0x1 mmc.o 389 | .bss 0x00800217 0x0 asmfunc.o 390 | .bss 0x00800217 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_mulsi3.o) 391 | .bss 0x00800217 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 392 | .bss 0x00800217 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodsi4.o) 393 | .bss 0x00800217 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 394 | .bss 0x00800217 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 395 | .bss 0x00800217 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 396 | .bss 0x00800217 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodhi4.o) 397 | .bss 0x00800217 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(memset.o) 398 | .bss 0x00800217 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eerd_byte_atmega2560.o) 399 | .bss 0x00800217 0x0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eewr_byte_atmega2560.o) 400 | *(.bss*) 401 | *(COMMON) 402 | COMMON 0x00800217 0x136 stk500boot.o 403 | 0x00800217 Fatfs 404 | 0x00800241 gEepromIndex 405 | 0x00800245 gFlashIndex 406 | 0x00800249 Buff 407 | 0x00800349 gRamIndex 408 | 0x0080034d PROVIDE (__bss_end, .) 409 | 0x0003f7d2 __data_load_start = LOADADDR (.data) 410 | 0x0003f7e4 __data_load_end = (__data_load_start + SIZEOF (.data)) 411 | 412 | .noinit 0x0080034d 0x0 413 | 0x0080034d PROVIDE (__noinit_start, .) 414 | *(.noinit*) 415 | 0x0080034d PROVIDE (__noinit_end, .) 416 | 0x0080034d _end = . 417 | 0x0080034d PROVIDE (__heap_start, .) 418 | 419 | .eeprom 0x00810000 0x0 420 | *(.eeprom*) 421 | 0x00810000 __eeprom_end = . 422 | 423 | .fuse 424 | *(.fuse) 425 | *(.lfuse) 426 | *(.hfuse) 427 | *(.efuse) 428 | 429 | .lock 430 | *(.lock*) 431 | 432 | .signature 433 | *(.signature*) 434 | 435 | .stab 0x00000000 0xcf0 436 | *(.stab) 437 | .stab 0x00000000 0x6e4 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 438 | .stab 0x000006e4 0x42c asmfunc.o 439 | 0x438 (size before relaxing) 440 | .stab 0x00000b10 0x6c /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(memset.o) 441 | 0x78 (size before relaxing) 442 | .stab 0x00000b7c 0x90 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eerd_byte_atmega2560.o) 443 | 0x9c (size before relaxing) 444 | .stab 0x00000c0c 0xe4 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eewr_byte_atmega2560.o) 445 | 0xf0 (size before relaxing) 446 | 447 | .stabstr 0x00000000 0x23f 448 | *(.stabstr) 449 | .stabstr 0x00000000 0x23f /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 450 | 451 | .stab.excl 452 | *(.stab.excl) 453 | 454 | .stab.exclstr 455 | *(.stab.exclstr) 456 | 457 | .stab.index 458 | *(.stab.index) 459 | 460 | .stab.indexstr 461 | *(.stab.indexstr) 462 | 463 | .comment 464 | *(.comment) 465 | 466 | .debug 467 | *(.debug) 468 | 469 | .line 470 | *(.line) 471 | 472 | .debug_srcinfo 473 | *(.debug_srcinfo) 474 | 475 | .debug_sfnames 476 | *(.debug_sfnames) 477 | 478 | .debug_aranges 0x00000000 0x150 479 | *(.debug_aranges) 480 | .debug_aranges 481 | 0x00000000 0x30 stk500boot.o 482 | .debug_aranges 483 | 0x00000030 0x20 pff.o 484 | .debug_aranges 485 | 0x00000050 0x20 mmc.o 486 | .debug_aranges 487 | 0x00000070 0x20 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_mulsi3.o) 488 | .debug_aranges 489 | 0x00000090 0x20 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 490 | .debug_aranges 491 | 0x000000b0 0x20 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodsi4.o) 492 | .debug_aranges 493 | 0x000000d0 0x20 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 494 | .debug_aranges 495 | 0x000000f0 0x20 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 496 | .debug_aranges 497 | 0x00000110 0x20 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 498 | .debug_aranges 499 | 0x00000130 0x20 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodhi4.o) 500 | 501 | .debug_pubnames 502 | *(.debug_pubnames) 503 | 504 | .debug_info 0x00000000 0x1b23 505 | *(.debug_info) 506 | .debug_info 0x00000000 0xa52 stk500boot.o 507 | .debug_info 0x00000a52 0x953 pff.o 508 | .debug_info 0x000013a5 0x23e mmc.o 509 | .debug_info 0x000015e3 0xc0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_mulsi3.o) 510 | .debug_info 0x000016a3 0xc0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 511 | .debug_info 0x00001763 0xc0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodsi4.o) 512 | .debug_info 0x00001823 0xc0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 513 | .debug_info 0x000018e3 0xc0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 514 | .debug_info 0x000019a3 0xc0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 515 | .debug_info 0x00001a63 0xc0 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodhi4.o) 516 | *(.gnu.linkonce.wi.*) 517 | 518 | .debug_abbrev 0x00000000 0x631 519 | *(.debug_abbrev) 520 | .debug_abbrev 0x00000000 0x2a1 stk500boot.o 521 | .debug_abbrev 0x000002a1 0x221 pff.o 522 | .debug_abbrev 0x000004c2 0xe3 mmc.o 523 | .debug_abbrev 0x000005a5 0x14 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_mulsi3.o) 524 | .debug_abbrev 0x000005b9 0x14 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 525 | .debug_abbrev 0x000005cd 0x14 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodsi4.o) 526 | .debug_abbrev 0x000005e1 0x14 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 527 | .debug_abbrev 0x000005f5 0x14 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 528 | .debug_abbrev 0x00000609 0x14 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 529 | .debug_abbrev 0x0000061d 0x14 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodhi4.o) 530 | 531 | .debug_line 0x00000000 0x999 532 | *(.debug_line) 533 | .debug_line 0x00000000 0x3bb stk500boot.o 534 | .debug_line 0x000003bb 0x1f9 pff.o 535 | .debug_line 0x000005b4 0xed mmc.o 536 | .debug_line 0x000006a1 0x79 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_mulsi3.o) 537 | .debug_line 0x0000071a 0x6d /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 538 | .debug_line 0x00000787 0x7c /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodsi4.o) 539 | .debug_line 0x00000803 0x5c /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 540 | .debug_line 0x0000085f 0x6a /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 541 | .debug_line 0x000008c9 0x62 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 542 | .debug_line 0x0000092b 0x6e /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodhi4.o) 543 | 544 | .debug_frame 0x00000000 0x3d4 545 | *(.debug_frame) 546 | .debug_frame 0x00000000 0x100 stk500boot.o 547 | .debug_frame 0x00000100 0x1fc pff.o 548 | .debug_frame 0x000002fc 0xd8 mmc.o 549 | 550 | .debug_str 0x00000000 0x570 551 | *(.debug_str) 552 | .debug_str 0x00000000 0x439 stk500boot.o 553 | 0x492 (size before relaxing) 554 | .debug_str 0x00000439 0xf7 pff.o 555 | 0x2ab (size before relaxing) 556 | .debug_str 0x00000530 0x40 mmc.o 557 | 0x16c (size before relaxing) 558 | 559 | .debug_loc 0x00000000 0x1f24 560 | *(.debug_loc) 561 | .debug_loc 0x00000000 0xe7a stk500boot.o 562 | .debug_loc 0x00000e7a 0xcfb pff.o 563 | .debug_loc 0x00001b75 0x3af mmc.o 564 | 565 | .debug_macinfo 566 | *(.debug_macinfo) 567 | OUTPUT(stk500boot.elf elf32-avr) 568 | LOAD linker stubs 569 | 570 | .debug_ranges 0x00000000 0x1f0 571 | .debug_ranges 0x00000000 0xd8 stk500boot.o 572 | .debug_ranges 0x000000d8 0x118 pff.o 573 | 574 | Cross Reference Table 575 | 576 | Symbol File 577 | Buff stk500boot.o 578 | Fatfs stk500boot.o 579 | PrintDecInt stk500boot.o 580 | PrintFromPROGMEM stk500boot.o 581 | PrintFromPROGMEMln stk500boot.o 582 | PrintHexByte stk500boot.o 583 | PrintNewLine stk500boot.o 584 | PrintString stk500boot.o 585 | __bad_interrupt /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 586 | __bss_end /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 587 | __bss_start /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 588 | __data_end /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 589 | __data_load_start /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 590 | __data_start /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 591 | __divmodhi4 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 592 | stk500boot.o 593 | __do_clear_bss /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_clear_bss.o) 594 | mmc.o 595 | pff.o 596 | stk500boot.o 597 | __do_copy_data /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_copy_data.o) 598 | mmc.o 599 | pff.o 600 | stk500boot.o 601 | __eerd_byte_m2560 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eerd_byte_atmega2560.o) 602 | stk500boot.o 603 | __eewr_byte_m2560 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eewr_byte_atmega2560.o) 604 | stk500boot.o 605 | __eewr_r18_m2560 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(eewr_byte_atmega2560.o) 606 | __heap_end /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 607 | __init /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 608 | __jumpMain stk500boot.o 609 | __mulsi3 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_mulsi3.o) 610 | pff.o 611 | __stack /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 612 | __udivmodhi4 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodhi4.o) 613 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 614 | __udivmodsi4 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_udivmodsi4.o) 615 | pff.o 616 | stk500boot.o 617 | __vector_1 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 618 | __vector_10 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 619 | __vector_11 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 620 | __vector_12 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 621 | __vector_13 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 622 | __vector_14 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 623 | __vector_15 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 624 | __vector_16 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 625 | __vector_17 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 626 | __vector_18 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 627 | __vector_19 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 628 | __vector_2 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 629 | __vector_20 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 630 | __vector_21 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 631 | __vector_22 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 632 | __vector_23 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 633 | __vector_24 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 634 | __vector_25 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 635 | __vector_26 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 636 | __vector_27 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 637 | __vector_28 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 638 | __vector_29 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 639 | __vector_3 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 640 | __vector_30 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 641 | __vector_31 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 642 | __vector_32 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 643 | __vector_33 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 644 | __vector_34 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 645 | __vector_35 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 646 | __vector_36 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 647 | __vector_37 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 648 | __vector_38 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 649 | __vector_39 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 650 | __vector_4 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 651 | __vector_40 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 652 | __vector_41 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 653 | __vector_42 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 654 | __vector_43 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 655 | __vector_44 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 656 | __vector_45 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 657 | __vector_46 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 658 | __vector_47 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 659 | __vector_48 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 660 | __vector_49 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 661 | __vector_5 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 662 | __vector_50 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 663 | __vector_51 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 664 | __vector_52 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 665 | __vector_53 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 666 | __vector_54 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 667 | __vector_55 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 668 | __vector_56 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 669 | __vector_6 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 670 | __vector_7 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 671 | __vector_8 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 672 | __vector_9 /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 673 | __vector_default /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 674 | __vectors /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 675 | _div /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_divmodhi4.o) 676 | _exit /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 677 | app_start stk500boot.o 678 | check stk500boot.o 679 | delay_ms stk500boot.o 680 | deselect asmfunc.o 681 | mmc.o 682 | disk_initialize mmc.o 683 | pff.o 684 | disk_readp mmc.o 685 | pff.o 686 | dly_100us asmfunc.o 687 | mmc.o 688 | exit /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/avr6/libgcc.a(_exit.o) 689 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 690 | flash_erase asmfunc.o 691 | stk500boot.o 692 | flash_write asmfunc.o 693 | stk500boot.o 694 | gEepromIndex stk500boot.o 695 | gFlashIndex stk500boot.o 696 | gRamIndex stk500boot.o 697 | gTextMsg_CPU_Name stk500boot.o 698 | init_spi asmfunc.o 699 | mmc.o 700 | main stk500boot.o 701 | /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/crtm2560.o 702 | memset /usr/local/CrossPack-AVR-20130212/lib/gcc/avr/4.6.2/../../../../avr/lib/avr6/libc.a(memset.o) 703 | stk500boot.o 704 | pf_mount pff.o 705 | stk500boot.o 706 | pf_open pff.o 707 | stk500boot.o 708 | pf_read pff.o 709 | stk500boot.o 710 | rcv_spi asmfunc.o 711 | mmc.o 712 | select asmfunc.o 713 | mmc.o 714 | xmit_spi asmfunc.o 715 | mmc.o 716 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/stk500boot.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetProbe/MicroBridge-Arduino-ATMega2560/1aaff1d4fb30c761da0df71cf404aad10e545a5e/hardware/microbridge/avr/bootloaders/microbridge/stk500boot.o -------------------------------------------------------------------------------- /hardware/microbridge/avr/bootloaders/microbridge/stk500boot.sym: -------------------------------------------------------------------------------- 1 | 00000000 W __heap_end 2 | 00000000 a __tmp_reg__ 3 | 00000000 a __tmp_reg__ 4 | 00000000 a __tmp_reg__ 5 | 00000001 a __zero_reg__ 6 | 00000001 a __zero_reg__ 7 | 00000001 a __zero_reg__ 8 | 00000034 a __CCP__ 9 | 00000034 a __CCP__ 10 | 00000034 a __CCP__ 11 | 0000003d a __SP_L__ 12 | 0000003d a __SP_L__ 13 | 0000003d a __SP_L__ 14 | 0000003e a __SP_H__ 15 | 0000003e a __SP_H__ 16 | 0000003e a __SP_H__ 17 | 0000003f a __SREG__ 18 | 0000003f a __SREG__ 19 | 0000003f a __SREG__ 20 | 000021ff W __stack 21 | 000021ff a __stack 22 | 0003e000 W __vector_default 23 | 0003e000 T __vectors 24 | 0003e0e4 T gTextMsg_CPU_Name 25 | 0003e0f0 T __ctors_end 26 | 0003e0f0 T __ctors_start 27 | 0003e0f0 T __dtors_end 28 | 0003e0f0 T __dtors_start 29 | 0003e0f0 W __init 30 | 0003e0f0 T __trampolines_end 31 | 0003e0f0 T __trampolines_start 32 | 0003e100 T __do_copy_data 33 | 0003e11c T __do_clear_bss 34 | 0003e124 t .do_clear_bss_loop 35 | 0003e126 t .do_clear_bss_start 36 | 0003e132 T __jumpMain 37 | 0003e140 T __bad_interrupt 38 | 0003e140 W __vector_1 39 | 0003e140 W __vector_10 40 | 0003e140 W __vector_11 41 | 0003e140 W __vector_12 42 | 0003e140 W __vector_13 43 | 0003e140 W __vector_14 44 | 0003e140 W __vector_15 45 | 0003e140 W __vector_16 46 | 0003e140 W __vector_17 47 | 0003e140 W __vector_18 48 | 0003e140 W __vector_19 49 | 0003e140 W __vector_2 50 | 0003e140 W __vector_20 51 | 0003e140 W __vector_21 52 | 0003e140 W __vector_22 53 | 0003e140 W __vector_23 54 | 0003e140 W __vector_24 55 | 0003e140 W __vector_25 56 | 0003e140 W __vector_26 57 | 0003e140 W __vector_27 58 | 0003e140 W __vector_28 59 | 0003e140 W __vector_29 60 | 0003e140 W __vector_3 61 | 0003e140 W __vector_30 62 | 0003e140 W __vector_31 63 | 0003e140 W __vector_32 64 | 0003e140 W __vector_33 65 | 0003e140 W __vector_34 66 | 0003e140 W __vector_35 67 | 0003e140 W __vector_36 68 | 0003e140 W __vector_37 69 | 0003e140 W __vector_38 70 | 0003e140 W __vector_39 71 | 0003e140 W __vector_4 72 | 0003e140 W __vector_40 73 | 0003e140 W __vector_41 74 | 0003e140 W __vector_42 75 | 0003e140 W __vector_43 76 | 0003e140 W __vector_44 77 | 0003e140 W __vector_45 78 | 0003e140 W __vector_46 79 | 0003e140 W __vector_47 80 | 0003e140 W __vector_48 81 | 0003e140 W __vector_49 82 | 0003e140 W __vector_5 83 | 0003e140 W __vector_50 84 | 0003e140 W __vector_51 85 | 0003e140 W __vector_52 86 | 0003e140 W __vector_53 87 | 0003e140 W __vector_54 88 | 0003e140 W __vector_55 89 | 0003e140 W __vector_56 90 | 0003e140 W __vector_6 91 | 0003e140 W __vector_7 92 | 0003e140 W __vector_8 93 | 0003e140 W __vector_9 94 | 0003e142 t sendchar 95 | 0003e15a T delay_ms 96 | 0003e178 T PrintFromPROGMEM 97 | 0003e19e T PrintNewLine 98 | 0003e1a6 T PrintFromPROGMEMln 99 | 0003e1aa T PrintString 100 | 0003e1c0 T PrintHexByte 101 | 0003e1e8 T PrintDecInt 102 | 0003e24c t clust2sect 103 | 0003e2b4 t dir_rewind 104 | 0003e338 t get_fat 105 | 0003e422 t check_fs 106 | 0003e4b2 T pf_mount 107 | 0003e6ea T pf_open 108 | 0003e9dc T pf_read 109 | 0003eb9c t send_cmd 110 | 0003ec06 T disk_initialize 111 | 0003ed52 T disk_readp 112 | 0003ee0c T init_spi 113 | 0003ee16 T dly_100us 114 | 0003ee26 T select 115 | 0003ee2c T deselect 116 | 0003ee2e T rcv_spi 117 | 0003ee30 T xmit_spi 118 | 0003ee4a T flash_erase 119 | 0003ee68 T flash_write 120 | 0003eea6 T main 121 | 0003f6c4 T __mulsi3 122 | 0003f702 T __divmodhi4 123 | 0003f702 T _div 124 | 0003f716 t __divmodhi4_neg2 125 | 0003f71c t __divmodhi4_exit 126 | 0003f71e t __divmodhi4_neg1 127 | 0003f728 T __udivmodsi4 128 | 0003f734 t __udivmodsi4_loop 129 | 0003f74e t __udivmodsi4_ep 130 | 0003f76c T __udivmodhi4 131 | 0003f774 t __udivmodhi4_loop 132 | 0003f782 t __udivmodhi4_ep 133 | 0003f794 T memset 134 | 0003f7a2 T __eerd_byte_m2560 135 | 0003f7b2 T __eewr_byte_m2560 136 | 0003f7b4 T __eewr_r18_m2560 137 | 0003f7ce T _exit 138 | 0003f7ce W exit 139 | 0003f7d0 t __stop_program 140 | 0003f7d2 A __data_load_start 141 | 0003f7d2 T _etext 142 | 0003f7e4 A __data_load_end 143 | 00800200 D __data_start 144 | 0080020d D check 145 | 0080020e d CSWTCH.14 146 | 00800212 B __bss_start 147 | 00800212 D __data_end 148 | 00800212 D _edata 149 | 00800212 B app_start 150 | 00800214 b FatFs 151 | 00800216 b CardType 152 | 00800217 B Fatfs 153 | 00800241 B gEepromIndex 154 | 00800245 B gFlashIndex 155 | 00800249 B Buff 156 | 00800349 B gRamIndex 157 | 0080034d B __bss_end 158 | 0080034d N _end 159 | 00810000 N __eeprom_end 160 | -------------------------------------------------------------------------------- /hardware/microbridge/avr/programmers.txt: -------------------------------------------------------------------------------- 1 | avrdragon.name=AVR Dragon ISP 2 | avrdragon.communication=usb 3 | avrdragon.protocol=dragon_isp 4 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | USB and SDCARD Firmware flashing for the ARDUINO ATMEGA 2560 and ADK 2 | --------------------------------------------------------------------- 3 | 4 | master branch is sdcard flash 5 | bootloader_from_flash is flash from an spi chip 6 | 7 | 8 | mechanics : 9 | 10 | The bootloader looks for byte in eeprom at address 0x1FF: 11 | 12 | -if it is set to 0xF0 bootloader will look for a bin file on the sdcard named 13 | firmware.bin and use it to flash the firmware then reset the byte to 0xFF so it 14 | does this only once 15 | 16 | -otherwise no action is taken and bootloader works as a arduino bootloader except 17 | some of the debugging functions are missing 18 | 19 | Setup 20 | ADAFruit micro sdcard 5V ready: 21 | 22 | SDCARD on ATMEGA 2560 or ADK 23 | 24 | pin 50 - DO 25 | 26 | pin 51 - DI 27 | 28 | pin 52 - CLK 29 | 30 | pin 53 - CS 31 | 32 | if you have an sd card shield which is different from this setup you need to change 33 | the pinout in asmfunc.S and recompile the bootloader !!! 34 | 35 | Flashing bootloader : 36 | 37 | - copy the entire 'hardware' folder to your mydocuments/arduino folder 38 | 39 | - restart arduino ide 40 | 41 | - you should now see under tools -> boards -> Arduino mega 2560 (Dual sd bootloader) (select this) 42 | 43 | - set the appropriate programmer 44 | 45 | - burn bootloader 46 | 47 | Using arduino ISP bootloader : 48 | 49 | - connect arduino atmega 2560 50 | 51 | - upload sketch 'Arduino ISP' (found in file -> examples) 52 | 53 | Atmega2560 to Atmega 2560 connections: 54 | programmer - receiver 55 | pin 50 pin 50 56 | pin 51 pin 51 57 | pin 52 pin 52 58 | pin 53 reset 59 | 5v 5v 60 | ground ground 61 | aditionally on programmer you have to put a capacitor between reset and ground (2.2microf works) 62 | if you don't do this it won't work !!! 63 | 64 | Compile bootloader: 65 | 66 | MacOS: 67 | 68 | 1) install Crosspack (http://www.obdev.at/products/crosspack/index.html) 69 | 70 | 2) Navigate to My Documents/arduino/hardware/microbridge/bootladers/microbridge/ 71 | 72 | Windows: 73 | 74 | 1) Install WinAVR (https://sourceforge.net/projects/winavr/) 75 | 76 | 2) Patch WinAVR to run on newer Windows Versions by extracting msys-1.0.dll 77 | from http://www.madwizard.org/download/electronics/msys-1.0-vista64.zip 78 | to c:\WinAVR-20100110\utils\bin and overwriting existing file. 79 | 80 | 3) Go to hardware\microbridge\avr\bootloaders\microbridge and issue: 81 | md .dep 82 | 83 | 84 | 85 | then issue : 86 | 87 | - make clean 88 | 89 | - make all 90 | 91 | bootloader output : 92 | 93 | Size after: 94 | AVR Memory Usage 95 | ---------------- 96 | Device: atmega2560 97 | 98 | Program: 6116 bytes (2.3% Full) 99 | (.text + .data + .bootloader) 100 | 101 | Data: 333 bytes (4.1% Full) 102 | (.data + .bss + .noinit) 103 | 104 | 105 | Generate BIN file: 106 | 107 | To generate a bin file you need issue the following command on you apps elf executable : 108 | 109 | avr-objcopy -I elf32-avr -O binary firmware.cpp.elf firmware.bin 110 | 111 | this generates firmware.bin which can be put on the sd for flashing your firmware. You can find the elf 112 | file in you apps build directory. 113 | 114 | Using olimex usb to upload bootloader: 115 | avrdude -c stk500v2 -p m2560 -P /dev/tty.usbmodemfd131 -B 500 -e -u -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xD8:m -U efuse:w:0xFF:m -F 116 | 117 | avrdude -p m2560 -c stk500v2 -P /dev/tty.usbmodemfa131 -F -U flash:w:stk500boot.hex -b 115200 -B1 -U lock:w:0x0F:m 118 | 119 | avrdude -p m168 -c usbtiny -e -u -U lock:w:0x3f:m -U efuse:w:0x00:m -U hfuse:w:0xDD:m -U lfuse:w:0xFF:m 120 | 121 | 122 | avrdude -p m2560 -c stk500v2 -P /dev/tty.usbmodemfd131 -U flash:w:stk500boot_v2_mega2560.hex -U lock:w:0x0F:m -v 123 | avrdude -c stk500v2 -p m2560 -P /dev/tty.usbmodemfd131 -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xD8:m -U lfuse:w:0xFF:m -e -v 124 | --------------------------------------------------------------------------------