📄 main.lis
字号:
04AC .dbline 365
04AC ; }
04AC 5DC5 rjmp L110
04AE L109:
04AE .dbline 369
04AE ; //////////////////////////////////////
04AE ; //CMD_CHIP_ERASE_ISP
04AE ; //////////////////////////////////////
04AE ; else if(cmd==CMD_CHIP_ERASE_ISP)
04AE 8C85 ldd R24,y+12
04B0 8231 cpi R24,18
04B2 39F5 brne L112
04B4 .dbline 370
04B4 ; {
04B4 .dbline 371
04B4 ; spi_transfer_8(msg_buffer[3]);
04B4 00910B00 lds R16,_msg_buffer+3
04B8 00D0 rcall _spi_transfer_8
04BA .dbline 372
04BA ; spi_transfer_8(msg_buffer[4]);
04BA 00910C00 lds R16,_msg_buffer+4
04BE 00D0 rcall _spi_transfer_8
04C0 .dbline 373
04C0 ; spi_transfer_8(msg_buffer[5]);
04C0 00910D00 lds R16,_msg_buffer+5
04C4 00D0 rcall _spi_transfer_8
04C6 .dbline 374
04C6 ; spi_transfer_8(msg_buffer[6]);
04C6 00910E00 lds R16,_msg_buffer+6
04CA 00D0 rcall _spi_transfer_8
04CC .dbline 378
04CC ;
04CC ; //Newer AVR's seems to have a busy bit
04CC ; //cant test this because I don't have any of these new chips
04CC ; if(msg_buffer[2]==0)
04CC 20900A00 lds R2,_msg_buffer+2
04D0 2220 tst R2
04D2 29F4 brne L123
04D4 .dbline 379
04D4 ; {
04D4 .dbline 380
04D4 ; wait_ms(msg_buffer[1]);
04D4 00910900 lds R16,_msg_buffer+1
04D8 1127 clr R17
04DA 00D0 rcall _wait_ms
04DC .dbline 381
04DC ; }
04DC 07C0 rjmp L119
04DE X5:
04DE .dbline 383
04DE ; else //if(msg_buffer[2]==1)
04DE ; {
04DE L122:
04DE .dbline 384
04DE L123:
04DE .dbline 384
04DE ; while(spi_transfer_32(0xF0000000)&1);
04DE 00E0 ldi R16,0
04E0 10E0 ldi R17,0
04E2 20E0 ldi R18,0
04E4 30EF ldi R19,240
04E6 00D0 rcall _spi_transfer_32
04E8 00FD sbrc R16,0
04EA F9CF rjmp L122
04EC .dbline 385
04EC ; }
04EC L119:
04EC .dbline 387
04EC ;
04EC ; num_bytes = 2;
04EC 82E0 ldi R24,2
04EE 90E0 ldi R25,0
04F0 9B87 std y+11,R25
04F2 8A87 std y+10,R24
04F4 .dbline 388
04F4 ; msg_buffer[0] = CMD_CHIP_ERASE_ISP;
04F4 82E1 ldi R24,18
04F6 80930800 sts _msg_buffer,R24
04FA .dbline 389
04FA ; msg_buffer[1] = STATUS_CMD_OK;
04FA 2224 clr R2
04FC 20920900 sts _msg_buffer+1,R2
0500 .dbline 390
0500 ; }
0500 33C5 rjmp L113
0502 L112:
0502 .dbline 394
0502 ; //////////////////////////////////////
0502 ; //CMD_PROGRAM_FLASH_ISP
0502 ; //////////////////////////////////////
0502 ; else if(cmd==CMD_PROGRAM_FLASH_ISP)
0502 8C85 ldd R24,y+12
0504 8331 cpi R24,19
0506 09F0 breq X11
0508 BCC1 rjmp L126
050A X11:
050A .dbline 395
050A ; {
050A .dbline 396
050A ; block_size = ((unsigned int)msg_buffer[1])<<8;
050A A0900900 lds R10,_msg_buffer+1
050E BB24 clr R11
0510 BA2C mov R11,R10
0512 AA24 clr R10
0514 .dbline 397
0514 ; block_size |= msg_buffer[2];
0514 20900A00 lds R2,_msg_buffer+2
0518 3324 clr R3
051A A228 or R10,R2
051C B328 or R11,R3
051E .dbline 398
051E ; mode = msg_buffer[3];
051E E0900B00 lds R14,_msg_buffer+3
0522 .dbline 401
0522 ;
0522 ; //Word Mode
0522 ; if((mode&1) == 0)
0522 E0FC sbrc R14,0
0524 A2C0 rjmp L131
0526 .dbline 402
0526 ; {
0526 .dbline 403
0526 ; for(i=0;i<block_size;i++)
0526 CC24 clr R12
0528 DD24 clr R13
052A 9AC0 rjmp L136
052C L133:
052C .dbline 404
052C ; {
052C .dbline 407
052C ; //If we have an uneven byte programm the
052C ; //high byte
052C ; if(i&1)
052C C0FE sbrs R12,0
052E 05C0 rjmp L137
0530 .dbline 408
0530 ; {
0530 .dbline 409
0530 ; spi_transfer_8(msg_buffer[5]|(1<<3));
0530 00910D00 lds R16,_msg_buffer+5
0534 0860 ori R16,8
0536 00D0 rcall _spi_transfer_8
0538 .dbline 410
0538 ; }
0538 03C0 rjmp L138
053A L137:
053A .dbline 412
053A ; else
053A ; {
053A .dbline 413
053A ; spi_transfer_8(msg_buffer[5]);
053A 00910D00 lds R16,_msg_buffer+5
053E 00D0 rcall _spi_transfer_8
0540 .dbline 414
0540 ; }
0540 L138:
0540 .dbline 416
0540 ;
0540 ; spi_transfer_16(address&0xFFFF);
0540 4FEF ldi R20,255
0542 5FEF ldi R21,255
0544 60E0 ldi R22,0
0546 70E0 ldi R23,0
0548 40900200 lds R4,_address+2
054C 50900300 lds R5,_address+2+1
0550 20900000 lds R2,_address
0554 30900100 lds R3,_address+1
0558 2422 and R2,R20
055A 3522 and R3,R21
055C 4622 and R4,R22
055E 5722 and R5,R23
0560 8101 movw R16,R2
0562 00D0 rcall _spi_transfer_16
0564 .dbline 417
0564 ; spi_transfer_8(msg_buffer[i+10]);
0564 80E0 ldi R24,<_msg_buffer
0566 90E0 ldi R25,>_msg_buffer
0568 F601 movw R30,R12
056A 3A96 adiw R30,10
056C E80F add R30,R24
056E F91F adc R31,R25
0570 0081 ldd R16,z+0
0572 00D0 rcall _spi_transfer_8
0574 .dbline 420
0574 ;
0574 ; //Check if we can do polling
0574 ; if(msg_buffer[8]!=msg_buffer[i+10])
0574 80E0 ldi R24,<_msg_buffer
0576 90E0 ldi R25,>_msg_buffer
0578 F601 movw R30,R12
057A 3A96 adiw R30,10
057C E80F add R30,R24
057E F91F adc R31,R25
0580 2080 ldd R2,z+0
0582 30901000 lds R3,_msg_buffer+8
0586 3214 cp R3,R2
0588 B1F0 breq L141
058A .dbline 421
058A ; {
058A .dbline 422
058A ; polling_address = address&0xFFFF;
058A 4FEF ldi R20,255
058C 5FEF ldi R21,255
058E 60E0 ldi R22,0
0590 70E0 ldi R23,0
0592 40900200 lds R4,_address+2
0596 50900300 lds R5,_address+2+1
059A 20900000 lds R2,_address
059E 30900100 lds R3,_address+1
05A2 2422 and R2,R20
05A4 3522 and R3,R21
05A6 4622 and R4,R22
05A8 5722 and R5,R23
05AA FE01 movw R30,R28
05AC 2282 std z+2,R2
05AE 3382 std z+3,R3
05B0 4482 std z+4,R4
05B2 5582 std z+5,R5
05B4 .dbline 423
05B4 ; }
05B4 04C0 rjmp L142
05B6 L141:
05B6 .dbline 426
05B6 ; //If not switch the mode hard waiting
05B6 ; else
05B6 ; {
05B6 .dbline 427
05B6 ; mode = (mode&(~0x0E)) | 0x02;
05B6 8E2D mov R24,R14
05B8 817F andi R24,241
05BA 8260 ori R24,2
05BC E82E mov R14,R24
05BE .dbline 428
05BE ; }
05BE L142:
05BE .dbline 432
05BE ;
05BE ; //Different polling methods
05BE ; //Hard waiting
05BE ; if((mode&0x0E) == 0x02)
05BE 8E2D mov R24,R14
05C0 8E70 andi R24,14
05C2 8230 cpi R24,2
05C4 29F4 brne L144
05C6 .dbline 433
05C6 ; {
05C6 .dbline 434
05C6 ; wait_ms(msg_buffer[4]);
05C6 00910C00 lds R16,_msg_buffer+4
05CA 1127 clr R17
05CC 00D0 rcall _wait_ms
05CE .dbline 435
05CE ; }
05CE 2BC0 rjmp L145
05D0 L144:
05D0 .dbline 437
05D0 ; //Data polling
05D0 ; else if((mode&0x0E) == 0x04)
05D0 8E2D mov R24,R14
05D2 8E70 andi R24,14
05D4 8430 cpi R24,4
05D6 B9F4 brne L147
05D8 .dbline 438
05D8 ; {
05D8 L149:
05D8 .dbline 439
05D8 ; do{
05D8 .dbline 442
05D8 ; //If we have an uneven byte read the
05D8 ; //high byte
05D8 ; if(i&1)
05D8 C0FE sbrs R12,0
05DA 05C0 rjmp L152
05DC .dbline 443
05DC ; {
05DC .dbline 444
05DC ; spi_transfer_8(msg_buffer[7]|(1<<3));
05DC 00910F00 lds R16,_msg_buffer+7
05E0 0860 ori R16,8
05E2 00D0 rcall _spi_transfer_8
05E4 .dbline 445
05E4 ; }
05E4 03C0 rjmp L153
05E6 L152:
05E6 .dbline 447
05E6 ; else
05E6 ; {
05E6 .dbline 448
05E6 ; spi_transfer_8(msg_buffer[7]);
05E6 00910F00 lds R16,_msg_buffer+7
05EA 00D0 rcall _spi_transfer_8
05EC .dbline 449
05EC ; }
05EC L153:
05EC .dbline 450
05EC ; spi_transfer_16(polling_address);
05EC FE01 movw R30,R28
05EE 0281
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -