📄 main.lis
字号:
0344 3324 clr R3
0346 4424 clr R4
0348 5524 clr R5
034A 2101 movw R4,R2
034C 2224 clr R2
034E 3324 clr R3
0350 3801 movw R6,R16
0352 4901 movw R8,R18
0354 6228 or R6,R2
0356 7328 or R7,R3
0358 8428 or R8,R4
035A 9528 or R9,R5
035C 70920100 sts _address+1,R7
0360 60920000 sts _address,R6
0364 90920300 sts _address+2+1,R9
0368 80920200 sts _address+2,R8
036C .dbline 301
036C ; address |= ((unsigned long)msg_buffer[3])<<8;
036C 88E0 ldi R24,8
036E 90E0 ldi R25,0
0370 00910B00 lds R16,_msg_buffer+3
0374 1127 clr R17
0376 2227 clr R18
0378 3327 clr R19
037A 8A93 st -y,R24
037C 0E940000 xcall lsl32
0380 40900200 lds R4,_address+2
0384 50900300 lds R5,_address+2+1
0388 20900000 lds R2,_address
038C 30900100 lds R3,_address+1
0390 202A or R2,R16
0392 312A or R3,R17
0394 422A or R4,R18
0396 532A or R5,R19
0398 30920100 sts _address+1,R3
039C 20920000 sts _address,R2
03A0 50920300 sts _address+2+1,R5
03A4 40920200 sts _address+2,R4
03A8 .dbline 302
03A8 ; address |= ((unsigned long)msg_buffer[4]);
03A8 20900C00 lds R2,_msg_buffer+4
03AC 3324 clr R3
03AE 4424 clr R4
03B0 5524 clr R5
03B2 80900200 lds R8,_address+2
03B6 90900300 lds R9,_address+2+1
03BA 60900000 lds R6,_address
03BE 70900100 lds R7,_address+1
03C2 6228 or R6,R2
03C4 7328 or R7,R3
03C6 8428 or R8,R4
03C8 9528 or R9,R5
03CA 70920100 sts _address+1,R7
03CE 60920000 sts _address,R6
03D2 90920300 sts _address+2+1,R9
03D6 80920200 sts _address+2,R8
03DA .dbline 304
03DA ;
03DA ; num_bytes = 2;
03DA 82E0 ldi R24,2
03DC 90E0 ldi R25,0
03DE 5C01 movw R10,R24
03E0 .dbline 305
03E0 ; msg_buffer[0] = CMD_LOAD_ADDRESS;
03E0 86E0 ldi R24,6
03E2 80930800 sts _msg_buffer,R24
03E6 .dbline 306
03E6 ; msg_buffer[1] = STATUS_CMD_OK;
03E6 2224 clr R2
03E8 20920900 sts _msg_buffer+1,R2
03EC .dbline 307
03EC ; }
03EC E4C6 xjmp L99
03EE L98:
03EE .dbline 311
03EE ; //////////////////////////////////////
03EE ; //CMD_ENTER_PROGMODE_ISP
03EE ; //////////////////////////////////////
03EE ; else if (cmd==CMD_ENTER_PROGMODE_ISP)
03EE 8A85 ldd R24,y+10
03F0 8031 cpi R24,16
03F2 09F0 breq X141
03F4 7FC0 xjmp L105
03F6 X141:
03F6 X43:
03F6 .dbline 312
03F6 ; {
03F6 .dbline 325
03F6 ; //msg_buffer[1] //timeout //Command time-out (in ms)
03F6 ; //msg_buffer[2] //stabDelay //Delay (in ms) used for pin stabilization
03F6 ; //msg_buffer[3] //cmdexeDelay //Delay (in ms) in connection with the EnterProgMode command execution
03F6 ; //msg_buffer[4] //synchLoops //Number of synchronization loops
03F6 ; //msg_buffer[5] //byteDelay //Delay (in ms) between each byte in the EnterProgMode command.
03F6 ; //msg_buffer[6] //pollValue //Poll value: 0x53 for AVR, 0x69 for AT89xx
03F6 ; //msg_buffer[7] //pollIndex //Start address, received byte: 0 = no polling, 3 = AVR, 4 = AT89xx
03F6 ; //msg_buffer[8] //cmd1 //Command Byte # 1 to be transmitted
03F6 ; //msg_buffer[9] //cmd2 //Command Byte # 2 to be transmitted
03F6 ; //msg_buffer[10]//cmd3 //Command Byte # 3 to be transmitted
03F6 ; //msg_buffer[11]//cmd4 //Command Byte # 4 to be transmitted
03F6 ;
03F6 ; prgmode=1;
03F6 81E0 ldi R24,1
03F8 80930400 sts _prgmode,R24
03FC .dbline 327
03FC ;
03FC ; spi_enable();
03FC 0E940000 xcall _spi_enable
0400 .dbline 329
0400 ;
0400 ; wait_ms(msg_buffer[2]);
0400 00910A00 lds R16,_msg_buffer+2
0404 1127 clr R17
0406 0E940000 xcall _wait_ms
040A .dbline 331
040A ;
040A ; LED_GN_ON;
040A 929A sbi 0x12,2
040C .dbline 332
040C ; LED_RT_ON;
040C 939A sbi 0x12,3
040E .dbline 335
040E ;
040E ; //Try to get connection with the target chip
040E ; for (i=0;i<msg_buffer[4];i++)
040E CC24 clr R12
0410 DD24 clr R13
0412 56C0 xjmp L111
0414 L108:
0414 .dbline 336
0414 ; {
0414 .dbline 338
0414 ; //spi_transfer_16(0xAC53);
0414 ; spi_transfer_8(msg_buffer[8]);
0414 00911000 lds R16,_msg_buffer+8
0418 0E940000 xcall _spi_transfer_8
041C .dbline 339
041C ; wait_ms(msg_buffer[5]);
041C 00910D00 lds R16,_msg_buffer+5
0420 1127 clr R17
0422 0E940000 xcall _wait_ms
0426 .dbline 340
0426 ; spi_transfer_8(msg_buffer[9]);
0426 00911100 lds R16,_msg_buffer+9
042A 0E940000 xcall _spi_transfer_8
042E .dbline 341
042E ; wait_ms(msg_buffer[5]);
042E 00910D00 lds R16,_msg_buffer+5
0432 1127 clr R17
0434 0E940000 xcall _wait_ms
0438 .dbline 343
0438 ;
0438 ; if (msg_buffer[7]==3)
0438 80910F00 lds R24,_msg_buffer+7
043C 8330 cpi R24,3
043E A1F4 brne L117
0440 X44:
0440 .dbline 344
0440 ; {
0440 .dbline 345
0440 ; tmp=spi_transfer_8(msg_buffer[10]);
0440 00911200 lds R16,_msg_buffer+10
0444 0E940000 xcall _spi_transfer_8
0448 E02E mov R14,R16
044A .dbline 346
044A ; wait_ms(msg_buffer[5]);
044A 00910D00 lds R16,_msg_buffer+5
044E 1127 clr R17
0450 0E940000 xcall _wait_ms
0454 .dbline 347
0454 ; spi_transfer_8(msg_buffer[11]);
0454 00911300 lds R16,_msg_buffer+11
0458 0E940000 xcall _spi_transfer_8
045C .dbline 348
045C ; wait_ms(msg_buffer[5]);
045C 00910D00 lds R16,_msg_buffer+5
0460 1127 clr R17
0462 0E940000 xcall _wait_ms
0466 .dbline 349
0466 ; }
0466 15C0 xjmp L118
0468 L117:
0468 .dbline 351
0468 ; else
0468 ; {
0468 .dbline 352
0468 ; spi_transfer_8(msg_buffer[10]);
0468 00911200 lds R16,_msg_buffer+10
046C 0E940000 xcall _spi_transfer_8
0470 .dbline 353
0470 ; wait_ms(msg_buffer[5]);
0470 00910D00 lds R16,_msg_buffer+5
0474 1127 clr R17
0476 0E940000 xcall _wait_ms
047A .dbline 354
047A ; tmp=spi_transfer_8(msg_buffer[11]);
047A 00911300 lds R16,_msg_buffer+11
047E 0E940000 xcall _spi_transfer_8
0482 1F87 std y+15,R17
0484 0E87 std y+14,R16
0486 7801 movw R14,R16
0488 .dbline 355
0488 ; wait_ms(msg_buffer[5]);
0488 00910D00 lds R16,_msg_buffer+5
048C 1127 clr R17
048E 0E940000 xcall _wait_ms
0492 .dbline 356
0492 ; }
0492 L118:
0492 .dbline 358
0492 ;
0492 ; if ((tmp==msg_buffer[6])||(msg_buffer[7]==0))
0492 20900E00 lds R2,_msg_buffer+6
0496 E214 cp R14,R2
0498 21F0 breq L132
049A X45:
049A 20900F00 lds R2,_msg_buffer+7
049E 2220 tst R2
04A0 51F4 brne L128
04A2 X46:
04A2 L132:
04A2 .dbline 359
04A2 ; {
04A2 .dbline 360
04A2 ; LED_GN_OFF;
04A2 8BEF ldi R24,-5
04A4 9FEF ldi R25,-1
04A6 22B2 in R2,0x12
04A8 2822 and R2,R24
04AA 22BA out 0x12,R2
04AC .dbline 361
04AC ; LED_RT_ON;
04AC 939A sbi 0x12,3
04AE .dbline 362
04AE ; i=0xFF;
04AE 8FEF ldi R24,255
04B0 90E0 ldi R25,0
04B2 6C01 movw R12,R24
04B4 .dbline 363
04B4 ; break;
04B4 0CC0 xjmp L110
04B6 L128:
04B6 .dbline 366
04B6 ; }
04B6 ;
04B6 ; spi_clock_pulse();
04B6 0E940000 xcall _spi_clock_pulse
04BA .dbline 367
04BA ; }
04BA L109:
04BA .dbline 335
04BA C601 movw R24,R12
04BC 0196 adiw R24,1
04BE 6C01 movw R12,R24
04C0 L111:
04C0 .dbline 335
04C0 20900C00 lds R2,_msg_buffer+4
04C4 3324 clr R3
04C6 C214 cp R12,R2
04C8 D304 cpc R13,R3
04CA 08F4 brsh X142
04CC A3CF xjmp L108
04CE X142:
04CE X47:
04CE L110:
04CE .dbline 369
04CE ;
04CE ; num_bytes = 2;
04CE 82E0 ldi R24,2
04D0 90E0 ldi R25,0
04D2 5C01 movw R10,R24
04D4 .dbline 370
04D4 ; msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
04D4 80E1 ldi R24,16
04D6 80930800 sts _msg_buffer,R24
04DA .dbline 372
04DA ;
04DA ; if (i==0xFF)
04DA C601 movw R24,R12
04DC 8F3F cpi R24,255
04DE E0E0 ldi R30,0
04E0 9E07 cpc R25,R30
04E2 21F4 brne L133
04E4 X48:
04E4 .dbline 373
04E4 ; {
04E4 .dbline 374
04E4 ; msg_buffer[1] = STATUS_CMD_OK;
04E4 2224 clr R2
04E6 20920900 sts _msg_buffer+1,R2
04EA .dbline 375
04EA ; }
04EA 65C6 xjmp L106
04EC L133:
04EC .dbline 377
04EC ; else
04EC ; {
04EC .dbline 378
04EC ; msg_buffer[1] = STATUS_CMD_FAILED;
04EC 80EC ldi R24,192
04EE 80930900 sts _msg_buffer+1,R24
04F2 .dbline 379
04F2 ; }
04F2 .dbline 380
04F2 ; }
04F2 61C6 xjmp L106
04F4 L105:
04F4 .dbline 384
04F4 ; //////////////////////////////////////
04F4 ; //CMD_LEAVE_PROGMODE_ISP
04F4 ; //////////////////////////////////////
04F4 ; else if (cmd==CMD_LEAVE_PROGMODE_ISP)
04F4 8A85 ldd R24,y+10
04F6 8131 cpi R24,17
04F8 A9F4 brne L137
04FA X49:
04FA .dbline 385
04FA ; {
04FA .dbline 386
04FA ; prgmode=0;
04FA 2224 clr R2
04FC 20920400 sts _prgmode,R2
0500 .dbline 388
0500 ;
0500 ; spi_disable();
0500 0E940000 xcall _spi_disable
0504 .dbline 390
0504 ;
0504 ; LED_RT_OFF;
0504 87EF ldi R24,-9
0506 9FEF ldi R25,-1
0508 22B2 in R2,0x12
050A 2822 and R2,R24
050C 22BA out 0x12,R2
050E .dbline 391
050E ; LED_GN_ON;
050E 929A sbi 0x12,2
0510 .dbline 393
0510 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -