├── .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 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
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 |
--------------------------------------------------------------------------------