📄 main.lis
字号:
050A 299A sbi 0x5,1
050C .dbline 335
050C ; i=0xFF;
050C 8FEF ldi R24,255
050E 90E0 ldi R25,0
0510 6C01 movw R12,R24
0512 .dbline 336
0512 ; break;
0512 0BC0 rjmp L110
0514 L128:
0514 .dbline 339
0514 00D0 rcall _spi_clock_pulse
0516 .dbline 340
0516 L109:
0516 .dbline 308
0516 C601 movw R24,R12
0518 0196 adiw R24,1
051A 6C01 movw R12,R24
051C L111:
051C .dbline 308
051C 20900C00 lds R2,_msg_buffer+4
0520 3324 clr R3
0522 C214 cp R12,R2
0524 D304 cpc R13,R3
0526 08F4 brsh X14
0528 B1CF rjmp L108
052A X14:
052A L110:
052A .dbline 342
052A ; }
052A ;
052A ; spi_clock_pulse();
052A ; }
052A ;
052A ; num_bytes = 2;
052A 82E0 ldi R24,2
052C 90E0 ldi R25,0
052E 9B87 std y+11,R25
0530 8A87 std y+10,R24
0532 .dbline 343
0532 ; msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
0532 80E1 ldi R24,16
0534 80930800 sts _msg_buffer,R24
0538 .dbline 345
0538 ;
0538 ; if(i==0xFF)
0538 C601 movw R24,R12
053A 8F3F cpi R24,255
053C E0E0 ldi R30,0
053E 9E07 cpc R25,R30
0540 21F4 brne L133
0542 .dbline 346
0542 ; {
0542 .dbline 347
0542 ; msg_buffer[1] = STATUS_CMD_OK;
0542 2224 clr R2
0544 20920900 sts _msg_buffer+1,R2
0548 .dbline 348
0548 ; }
0548 79C5 rjmp L106
054A L133:
054A .dbline 350
054A ; else
054A ; {
054A .dbline 351
054A ; msg_buffer[1] = STATUS_CMD_FAILED;
054A 80EC ldi R24,192
054C 80930900 sts _msg_buffer+1,R24
0550 .dbline 352
0550 ; }
0550 .dbline 353
0550 ; }
0550 75C5 rjmp L106
0552 L105:
0552 .dbline 357
0552 ; //////////////////////////////////////
0552 ; //CMD_LEAVE_PROGMODE_ISP
0552 ; //////////////////////////////////////
0552 ; else if(cmd==CMD_LEAVE_PROGMODE_ISP)
0552 8C85 ldd R24,y+12
0554 8131 cpi R24,17
0556 A9F4 brne L137
0558 .dbline 358
0558 ; {
0558 .dbline 359
0558 ; prgmode=0;
0558 2224 clr R2
055A 20920400 sts _prgmode,R2
055E .dbline 361
055E ;
055E ; spi_disable();
055E 00D0 rcall _spi_disable
0560 .dbline 363
0560 ;
0560 ; LED_RT_OFF;
0560 8DEF ldi R24,-3
0562 9FEF ldi R25,-1
0564 25B0 in R2,0x5
0566 2822 and R2,R24
0568 25B8 out 0x5,R2
056A .dbline 364
056A ; LED_GN_ON;
056A 289A sbi 0x5,0
056C .dbline 366
056C ;
056C ; num_bytes = 2;
056C 82E0 ldi R24,2
056E 90E0 ldi R25,0
0570 9B87 std y+11,R25
0572 8A87 std y+10,R24
0574 .dbline 367
0574 ; msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
0574 81E1 ldi R24,17
0576 80930800 sts _msg_buffer,R24
057A .dbline 368
057A ; msg_buffer[1] = STATUS_CMD_OK;
057A 2224 clr R2
057C 20920900 sts _msg_buffer+1,R2
0580 .dbline 369
0580 ; }
0580 5DC5 rjmp L138
0582 L137:
0582 .dbline 373
0582 ; //////////////////////////////////////
0582 ; //CMD_CHIP_ERASE_ISP
0582 ; //////////////////////////////////////
0582 ; else if(cmd==CMD_CHIP_ERASE_ISP)
0582 8C85 ldd R24,y+12
0584 8231 cpi R24,18
0586 39F5 brne L140
0588 .dbline 374
0588 ; {
0588 .dbline 375
0588 ; spi_transfer_8(msg_buffer[3]);
0588 00910B00 lds R16,_msg_buffer+3
058C 00D0 rcall _spi_transfer_8
058E .dbline 376
058E ; spi_transfer_8(msg_buffer[4]);
058E 00910C00 lds R16,_msg_buffer+4
0592 00D0 rcall _spi_transfer_8
0594 .dbline 377
0594 ; spi_transfer_8(msg_buffer[5]);
0594 00910D00 lds R16,_msg_buffer+5
0598 00D0 rcall _spi_transfer_8
059A .dbline 378
059A ; spi_transfer_8(msg_buffer[6]);
059A 00910E00 lds R16,_msg_buffer+6
059E 00D0 rcall _spi_transfer_8
05A0 .dbline 382
05A0 ;
05A0 ; //Newer AVR's seems to have a busy bit
05A0 ; //cant test this because I don't have any of these new chips
05A0 ; if(msg_buffer[2]==0)
05A0 20900A00 lds R2,_msg_buffer+2
05A4 2220 tst R2
05A6 29F4 brne L151
05A8 .dbline 383
05A8 ; {
05A8 .dbline 384
05A8 ; wait_ms(msg_buffer[1]);
05A8 00910900 lds R16,_msg_buffer+1
05AC 1127 clr R17
05AE 00D0 rcall _wait_ms
05B0 .dbline 385
05B0 ; }
05B0 07C0 rjmp L147
05B2 X5:
05B2 .dbline 387
05B2 ; else //if(msg_buffer[2]==1)
05B2 ; {
05B2 L150:
05B2 .dbline 388
05B2 L151:
05B2 .dbline 388
05B2 ; while(spi_transfer_32(0xF0000000)&1);
05B2 00E0 ldi R16,0
05B4 10E0 ldi R17,0
05B6 20E0 ldi R18,0
05B8 30EF ldi R19,240
05BA 00D0 rcall _spi_transfer_32
05BC 00FD sbrc R16,0
05BE F9CF rjmp L150
05C0 .dbline 389
05C0 ; }
05C0 L147:
05C0 .dbline 391
05C0 ;
05C0 ; num_bytes = 2;
05C0 82E0 ldi R24,2
05C2 90E0 ldi R25,0
05C4 9B87 std y+11,R25
05C6 8A87 std y+10,R24
05C8 .dbline 392
05C8 ; msg_buffer[0] = CMD_CHIP_ERASE_ISP;
05C8 82E1 ldi R24,18
05CA 80930800 sts _msg_buffer,R24
05CE .dbline 393
05CE ; msg_buffer[1] = STATUS_CMD_OK;
05CE 2224 clr R2
05D0 20920900 sts _msg_buffer+1,R2
05D4 .dbline 394
05D4 ; }
05D4 33C5 rjmp L141
05D6 L140:
05D6 .dbline 398
05D6 ; //////////////////////////////////////
05D6 ; //CMD_PROGRAM_FLASH_ISP
05D6 ; //////////////////////////////////////
05D6 ; else if(cmd==CMD_PROGRAM_FLASH_ISP)
05D6 8C85 ldd R24,y+12
05D8 8331 cpi R24,19
05DA 09F0 breq X15
05DC BCC1 rjmp L154
05DE X15:
05DE .dbline 399
05DE ; {
05DE .dbline 400
05DE ; block_size = ((unsigned int)msg_buffer[1])<<8;
05DE A0900900 lds R10,_msg_buffer+1
05E2 BB24 clr R11
05E4 BA2C mov R11,R10
05E6 AA24 clr R10
05E8 .dbline 401
05E8 ; block_size |= msg_buffer[2];
05E8 20900A00 lds R2,_msg_buffer+2
05EC 3324 clr R3
05EE A228 or R10,R2
05F0 B328 or R11,R3
05F2 .dbline 402
05F2 ; mode = msg_buffer[3];
05F2 E0900B00 lds R14,_msg_buffer+3
05F6 .dbline 405
05F6 ;
05F6 ; //Word Mode
05F6 ; if((mode&1) == 0)
05F6 E0FC sbrc R14,0
05F8 A2C0 rjmp L159
05FA .dbline 406
05FA ; {
05FA .dbline 407
05FA ; for(i=0;i<block_size;i++)
05FA CC24 clr R12
05FC DD24 clr R13
05FE 9AC0 rjmp L164
0600 L161:
0600 .dbline 408
0600 ; {
0600 .dbline 411
0600 ; //If we have an uneven byte programm the
0600 ; //high byte
0600 ; if(i&1)
0600 C0FE sbrs R12,0
0602 05C0 rjmp L165
0604 .dbline 412
0604 ; {
0604 .dbline 413
0604 ; spi_transfer_8(msg_buffer[5]|(1<<3));
0604 00910D00 lds R16,_msg_buffer+5
0608 0860 ori R16,8
060A 00D0 rcall _spi_transfer_8
060C .dbline 414
060C ; }
060C 03C0 rjmp L166
060E L165:
060E .dbline 416
060E ; else
060E ; {
060E .dbline 417
060E ; spi_transfer_8(msg_buffer[5]);
060E 00910D00 lds R16,_msg_buffer+5
0612 00D0 rcall _spi_transfer_8
0614 .dbline 418
0614 ; }
0614 L166:
0614 .dbline 420
0614 ;
0614 ; spi_transfer_16(address&0xFFFF);
0614 4FEF ldi R20,255
0616 5FEF ldi R21,255
0618 60E0 ldi R22,0
061A 70E0 ldi R23,0
061C 40900200 lds R4,_address+2
0620 50900300 lds R5,_address+2+1
0624 20900000 lds R2,_address
0628 30900100 lds R3,_address+1
062C 2422 and R2,R20
062E 3522 and R3,R21
0630 4622 and R4,R22
0632 5722 and R5,R23
0634 8101 movw R16,R2
0636 00D0 rcall _spi_transfer_16
0638 .dbline 421
0638 ; spi_transfer_8(msg_buffer[i+10]);
0638 80E0 ldi R24,<_msg_buffer
063A 90E0 ldi R25,>_msg_buffer
063C F601 movw R30,R12
063E 3A96 adiw R30,10
0640 E80F add R30,R24
0642 F91F adc R31,R25
0644 0081 ldd R16,z+0
0646 00D0 rcall _spi_transfer_8
0648 .dbline 424
0648 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -