📄 main.lst
字号:
193 if( address >= (APP_END>>1) ) // Protect bootloader area.
194 {
195 sendchar('?');
196 } else
197 {
198 _WAIT_FOR_SPM();
199 #pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
200 _PAGE_WRITE( address << 1 ); // Convert word-address to byte-address and write.
201 #pragma diag_default=Pe1053 // Back to default.
202 }
203
204 sendchar('\r'); // Send OK back.
205 }
206 #endif
207
208 #ifndef REMOVE_EEPROM_BYTE_SUPPORT
209 // Write EEPROM memory.
210 else if (val == 'D')
211 {
212 _WAIT_FOR_SPM();
213 EEARL = address; // Setup EEPROM address.
214 EEARH = (address >> 8);
215 EEDR = recchar(); // Get byte.
216 EECR |= (1<<EEMWE); // Write byte.
217 EECR |= (1<<EEWE);
218 while (EECR & (1<<EEWE)) // Wait for write operation to finish.
219 ;
220
221 address++; // Auto-advance to next EEPROM byte.
222 sendchar('\r');// Send OK back.
223 }
224
225
226 // Read EEPROM memory.
227 else if (val == 'd')
228 {
229 EEARL = address; // Setup EEPROM address.
230 EEARH = (address >> 8);
231 EECR |= (1<<EERE); // Read byte...
232 sendchar(EEDR); // ...and send it back.
233 address++; // Auto-advance to next EEPROM byte.
234 }
235 #endif
236
237 #ifndef REMOVE_FUSE_AND_LOCK_BIT_SUPPORT
238 // Write lockbits.
239 else if(val=='l')
240 {
241 _WAIT_FOR_SPM();
242 _SET_LOCK_BITS( recchar() ); // Read and set lock bits.
243 sendchar('\r'); // Send OK back.
244 }
245
246
247 // Read lock bits.
248 else if(val=='r')
249 {
250 _WAIT_FOR_SPM();
251 sendchar( _GET_LOCK_BITS() );
252 }
253
254
255 // Read fuse bits.
256 else if(val=='F')
257 {
258 _WAIT_FOR_SPM();
259 sendchar( _GET_LOW_FUSES() );
260 }
261
262
263 // Read high fuse bits.
264 else if(val=='N')
265 {
266 _WAIT_FOR_SPM();
267 sendchar( _GET_HIGH_FUSES() );
268 }
269
270
271 // Read extended fuse bits.
272 else if(val=='Q')
273 {
274 _WAIT_FOR_SPM();
275 sendchar( _GET_EXTENDED_FUSES() );
276 }
277 #endif
278
279 #ifndef REMOVE_AVRPROG_SUPPORT
280 // Enter and leave programming mode.
281 else if((val=='P')||(val=='L'))
282 {
283 sendchar('\r'); // Nothing special to do, just answer OK.
284 }
285
286
287 // Exit bootloader.
288 else if(val=='E')
289 {
290 _WAIT_FOR_SPM();
291 _ENABLE_RWW_SECTION();
292 sendchar('\r');
293 funcptr(); // Jump to Reset vector 0x0000 in Application Section.
294 }
295
296
297 // Get programmer type.
298 else if (val=='p')
299 {
300 sendchar('S'); // Answer 'SERIAL'.
301 }
302
303
304 // Return supported device codes.
305 else if(val=='t')
306 {
307 sendchar( PARTCODE ); // Supports only this device, of course.
308 sendchar( 0 ); // Send list terminator.
309 }
310
311
312 // Set LED, clear LED and set device type.
313 else if((val=='x')||(val=='y')||(val=='T'))
314 {
315 recchar(); // Ignore the command and it's parameter.
316 sendchar('\r'); // Send OK back.
317 }
318 #endif
319
320 // Return programmer identifier.
321 else if(val=='S')
322 {
323 sendchar('A'); // Return 'AVRBOOT'.
324 sendchar('V'); // Software identifier (aka programmer signature) is always 7 characters.
325 sendchar('R');
326 sendchar('B');
327 sendchar('O');
328 sendchar('O');
329 sendchar('T');
330 }
331
332
333 // Return software version.
334 else if(val=='V')
335 {
336 sendchar('1');
337 sendchar('5');
338 }
339
340
341 // Return signature bytes.
342 else if(val=='s')
343 {
344 sendchar( SIGNATURE_BYTE_3 );
345 sendchar( SIGNATURE_BYTE_2 );
346 sendchar( SIGNATURE_BYTE_1 );
347 }
348
349
350 // The last command to accept is ESC (synchronization).
351 else if(val!=0x1b) // If not ESC, then it is unrecognized...
352 {
353 sendchar('?');
354 }
355 } // end: for(;;)
356 }
357 else
358 {
359 _WAIT_FOR_SPM();
\ ??main_1:
\ 0000000C B707 IN R16, 0x37
\ 0000000E 2F10 MOV R17, R16
\ 00000010 FD10 SBRC R17, 0
\ 00000012 CFFC RJMP ??main_1
360 _ENABLE_RWW_SECTION();
\ 00000014 E111 LDI R17, 17
\ 00000016 2400 CLR R0
\ 00000018 BF17 OUT 0x37, R17
\ 0000001A 95E8 SPM
361 funcptr(); // Jump to Reset vector 0x0000 in Application Section.
\ 0000001C E0E0 LDI R30, 0
\ 0000001E E0F0 LDI R31, 0
\ 00000020 BFEC OUT 0x3C, R30
\ 00000022 9519 EICALL
362 }
363 } // end: main
\ 00000024 9624 ADIW R29:R28, 4
\ 00000026 9508 RET
\ ??main_2:
\ 00000028 E509 LDI R16, 89
\ ??main_3:
\ 0000002A ........ CALL sendchar
\ ??main_0:
\ 0000002E ........ CALL recchar
\ 00000032 3601 CPI R16, 97
\ 00000034 F3C9 BREQ ??main_2
\ 00000036 3401 CPI R16, 65
\ 00000038 F459 BRNE ??main_4
\ 0000003A ........ CALL recchar
\ 0000003E 2FA0 MOV R26, R16
\ 00000040 ........ CALL recchar
\ 00000044 E020 LDI R18, 0
\ 00000046 8308 ST Y, R16
\ 00000048 83A9 STD Y+1, R26
\ 0000004A 832A STD Y+2, R18
\ 0000004C 832B STD Y+3, R18
\ 0000004E C03C RJMP ??main_5
\ ??main_4:
\ 00000050 3408 CPI R16, 72
\ 00000052 F471 BRNE ??main_6
\ 00000054 ........ CALL recchar
\ 00000058 2FB0 MOV R27, R16
\ 0000005A ........ CALL recchar
\ 0000005E 2FA0 MOV R26, R16
\ 00000060 ........ CALL recchar
\ 00000064 E030 LDI R19, 0
\ 00000066 8308 ST Y, R16
\ 00000068 83A9 STD Y+1, R26
\ 0000006A 83BA STD Y+2, R27
\ ??main_7:
\ 0000006C 833B STD Y+3, R19
\ 0000006E C02C RJMP ??main_5
\ ??main_6:
\ 00000070 3605 CPI R16, 101
\ 00000072 F561 BRNE ??main_8
\ 00000074 E000 LDI R16, 0
\ 00000076 8308 ST Y, R16
\ 00000078 8309 STD Y+1, R16
\ 0000007A 830A STD Y+2, R16
\ 0000007C 830B STD Y+3, R16
\ 0000007E C018 RJMP ??main_9
\ ??main_10:
\ 00000080 B707 IN R16, 0x37
\ 00000082 2F10 MOV R17, R16
\ 00000084 FD10 SBRC R17, 0
\ 00000086 CFFC RJMP ??main_10
\ 00000088 E003 LDI R16, 3
\ 0000008A 8148 LD R20, Y
\ 0000008C 8159 LDD R21, Y+1
\ 0000008E 816A LDD R22, Y+2
\ 00000090 01FA MOVW R31:R30, R21:R20
\ 00000092 BF6B OUT 0x3B, R22
\ 00000094 BF07 OUT 0x37, R16
\ 00000096 95E8 SPM
\ 00000098 8108 LD R16, Y
\ 0000009A 8119 LDD R17, Y+1
\ 0000009C 812A LDD R18, Y+2
\ 0000009E 813B LDD R19, Y+3
\ 000000A0 5000 SUBI R16, 0
\ 000000A2 4F1F SBCI R17, 255
\ 000000A4 4F2F SBCI R18, 255
\ 000000A6 4F3F SBCI R19, 255
\ 000000A8 8308 ST Y, R16
\ 000000AA 8319 STD Y+1, R17
\ 000000AC 832A STD Y+2, R18
\ 000000AE 833B STD Y+3, R19
\ ??main_9:
\ 000000B0 8108 LD R16, Y
\ 000000B2 8119 LDD R17, Y+1
\ 000000B4 812A LDD R18, Y+2
\ 000000B6 813B LDD R19, Y+3
\ 000000B8 3000 CPI R16, 0
\ 000000BA EF40 LDI R20, 240
\ 000000BC 0714 CPC R17, R20
\ 000000BE E043 LDI R20, 3
\ 000000C0 0724 CPC R18, R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -