📄 main.s
字号:
adiw R24,1
movw R14,R24
L283:
.dbline 691
ldd R0,y+12
ldd R1,y+13
cp R14,R0
cpc R15,R1
brsh X151
xjmp L280
X151:
X95:
.dbline 708
;
; //If this page is complete the bit 7 of mode will be set and we programm the page
; if (mode&0x80)
ldd R24,y+14
andi R24,128
brne X152
xjmp L289
X152:
X96:
.dbline 709
; {
.dbline 710
; spi_transfer_8(msg_buffer[6]);
lds R16,_msg_buffer+6
xcall _spi_transfer_8
.dbline 711
; spi_transfer_16(start_address&0xFFFF);
ldi R20,255
ldi R21,255
ldi R22,0
ldi R23,0
ldd R2,y+6
ldd R3,y+7
ldd R4,y+8
ldd R5,y+9
and R2,R20
and R3,R21
and R4,R22
and R5,R23
movw R16,R2
xcall _spi_transfer_16
.dbline 712
; spi_transfer_8(0);
clr R16
xcall _spi_transfer_8
.dbline 715
;
; //If we have no valid polling address switch to simple wait mode
; if (polling_address==0)
ldd R2,y+2
ldd R3,y+3
ldd R4,y+4
ldd R5,y+5
clc
tst R2
cpc R3,R2
cpc R4,R2
cpc R5,R2
brne L292
X97:
.dbline 716
; {
.dbline 717
; mode = (mode&(~0x70)) | 0x10;
ldd R24,y+14
andi R24,143
ori R24,16
std y+14,R24
.dbline 718
; }
L292:
.dbline 722
;
; //Different polling methods
; //Hard waiting
; if ((mode&0x70) == 0x10)
ldd R24,y+14
clr R25
andi R24,112
andi R25,0
std y+15,R25
std y+14,R24
cpi R24,16
ldi R30,0
cpc R25,R30
brne L294
X98:
.dbline 723
; {
.dbline 724
; wait_ms(msg_buffer[4]);
lds R16,_msg_buffer+4
clr R17
xcall _wait_ms
.dbline 725
; }
xjmp L295
L294:
.dbline 727
; //Data polling
; else if ((mode&0x70) == 0x20)
ldd R24,y+14
ldd R25,y+15
cpi R24,32
ldi R30,0
cpc R25,R30
brne L297
X99:
.dbline 728
; {
L299:
.dbline 730
; do
; {
.dbline 733
; //If we have an uneven byte read the
; //high byte
; if (i&1)
sbrs R14,0
rjmp L302
X100:
.dbline 734
; {
.dbline 735
; spi_transfer_8(msg_buffer[7]|(1<<3));
lds R16,_msg_buffer+7
ori R16,8
xcall _spi_transfer_8
.dbline 736
; }
xjmp L303
L302:
.dbline 738
; else
; {
.dbline 739
; spi_transfer_8(msg_buffer[7]);
lds R16,_msg_buffer+7
xcall _spi_transfer_8
.dbline 740
; }
L303:
.dbline 741
; spi_transfer_16(polling_address);
ldd R16,y+2
ldd R17,y+3
xcall _spi_transfer_16
.dbline 742
; tmp=spi_transfer_8(0x00);
clr R16
xcall _spi_transfer_8
mov R12,R16
.dbline 743
; }
L300:
.dbline 744
; while (tmp==msg_buffer[8]);
lds R2,_msg_buffer+8
cp R12,R2
breq L299
X101:
.dbline 745
; }
xjmp L298
L297:
.dbline 747
; //RDY/BSY polling
; else if ((mode&0x70) == 0x40)
ldd R24,y+14
ldd R25,y+15
cpi R24,64
ldi R30,0
cpc R25,R30
brne L307
X102:
.dbline 748
; {
L309:
.dbline 749
; while (spi_transfer_32(0xF0000000)&1);
L310:
.dbline 749
ldi R16,0
ldi R17,0
ldi R18,0
ldi R19,240
xcall _spi_transfer_32
mov R12,R16
sbrc R16,0
rjmp L309
X103:
.dbline 750
; }
xjmp L308
L307:
.dbline 754
; //If something was not correct with the given mode do
; //hard waiting. Should never reach this point
; else
; {
.dbline 755
; wait_ms(msg_buffer[4]);
lds R16,_msg_buffer+4
clr R17
xcall _wait_ms
.dbline 756
; }
L308:
L298:
L295:
.dbline 757
; }
L289:
.dbline 758
; }
L253:
.dbline 760
;
; num_bytes = 2;
ldi R24,2
ldi R25,0
movw R10,R24
.dbline 761
; msg_buffer[0] = CMD_PROGRAM_EEPROM_ISP;
ldi R24,21
sts _msg_buffer,R24
.dbline 762
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 763
; }
xjmp L248
L247:
.dbline 768
;
; //////////////////////////////////////
; //CMD_READ_EEPROM_ISP
; //////////////////////////////////////
; else if (cmd==CMD_READ_EEPROM_ISP)
ldd R24,y+10
cpi R24,22
breq X153
xjmp L314
X153:
X104:
.dbline 769
; {
.dbline 770
; block_size = ((unsigned int)msg_buffer[1])<<8;
lds R2,_msg_buffer+1
clr R3
mov R3,R2
clr R2
std y+15,R3
std y+14,R2
.dbline 771
; block_size |= msg_buffer[2];
lds R2,_msg_buffer+2
clr R3
ldd R0,y+14
ldd R1,y+15
or R0,R2
or R1,R3
std y+15,R1
std y+14,R0
.dbline 772
; tmp = msg_buffer[3];
lds R2,_msg_buffer+3
std y+12,R2
.dbline 774
;
; for (i=0;i<block_size;i++)
clr R12
clr R13
xjmp L322
L319:
.dbline 775
; {
.dbline 777
; //Select Low or High-Byte
; spi_transfer_8(tmp);
ldd R16,y+12
xcall _spi_transfer_8
.dbline 778
; spi_transfer_16(address&0xFFFF);
ldi R20,255
ldi R21,255
ldi R22,0
ldi R23,0
lds R4,_address+2
lds R5,_address+2+1
lds R2,_address
lds R3,_address+1
and R2,R20
and R3,R21
and R4,R22
and R5,R23
movw R16,R2
xcall _spi_transfer_16
.dbline 779
; msg_buffer[i+2] = spi_transfer_8(0);
clr R16
xcall _spi_transfer_8
mov R14,R16
ldi R24,<_msg_buffer
ldi R25,>_msg_buffer
movw R30,R12
adiw R30,2
add R30,R24
adc R31,R25
std z+0,R14
.dbline 782
;
; //increment address
; address++;
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_address+2
lds R5,_address+2+1
lds R2,_address
lds R3,_address+1
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
sts _address+1,R3
sts _address,R2
sts _address+2+1,R5
sts _address+2,R4
.dbline 783
; }
L320:
.dbline 774
movw R24,R12
adiw R24,1
movw R12,R24
L322:
.dbline 774
ldd R0,y+14
ldd R1,y+15
cp R12,R0
cpc R13,R1
brsh X154
xjmp L319
X154:
X105:
.dbline 785
;
; num_bytes = block_size+3;
movw R24,R0
adiw R24,3
movw R10,R24
.dbline 786
; msg_buffer[0] = CMD_READ_EEPROM_ISP;
ldi R24,22
sts _msg_buffer,R24
.dbline 787
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 788
; msg_buffer[block_size+2] = STATUS_CMD_OK;
ldi R24,<_msg_buffer
ldi R25,>_msg_buffer
movw R30,R0
adiw R30,2
add R30,R24
adc R31,R25
std z+0,R2
.dbline 789
; }
xjmp L315
L314:
.dbline 795
;
;
; //////////////////////////////////////
; //CMD_PROGRAM_FUSE_ISP
; //////////////////////////////////////
; else if (cmd==CMD_PROGRAM_FUSE_ISP)
ldd R24,y+10
cpi R24,23
brne L324
X106:
.dbline 796
; {
.dbline 797
; tmp = spi_transfer_8(msg_buffer[1]);
lds R16,_msg_buffer+1
xcall _spi_transfer_8
.dbline 798
; tmp = spi_transfer_8(msg_buffer[2]);
lds R16,_msg_buffer+2
xcall _spi_transfer_8
.dbline 799
; tmp = spi_transfer_8(msg_buffer[3]);
lds R16,_msg_buffer+3
xcall _spi_transfer_8
.dbline 800
; tmp = spi_transfer_8(msg_buffer[4]);
lds R16,_msg_buffer+4
xcall _spi_transfer_8
.dbline 802
;
; num_bytes = 3;
ldi R24,3
ldi R25,0
movw R10,R24
.dbline 803
; msg_buffer[0] = CMD_PROGRAM_FUSE_ISP;
ldi R24,23
sts _msg_buffer,R24
.dbline 804
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 805
; msg_buffer[2] = STATUS_CMD_OK;
sts _msg_buffer+2,R2
.dbline 806
; }
xjmp L325
L324:
.dbline 810
; //////////////////////////////////////
; //CMD_READ_FUSE_ISP
; //////////////////////////////////////
; else if (cmd==CMD_READ_FUSE_ISP)
ldd R24,y+10
cpi R24,24
brne L332
X107:
.dbline 811
; {
.dbline 812
; tmp = spi_transfer_8(msg_buffer[2]);
lds R16,_msg_buffer+2
xcall _spi_transfer_8
mov R14,R16
.dbline 813
; if (msg_buffer[1] == 1) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,1
brne L335
X108:
.dbline 813
sts _msg_buffer+2,R14
L335:
.dbline 814
; tmp = spi_transfer_8(msg_buffer[3]);
lds R16,_msg_buffer+3
xcall _spi_transfer_8
mov R14,R16
.dbline 815
; if (msg_buffer[1] == 2) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,2
brne L340
X109:
.dbline 815
sts _msg_buffer+2,R14
L340:
.dbline 816
; tmp = spi_transfer_8(msg_buffer[4]);
lds R16,_msg_buffer+4
xcall _spi_transfer_8
mov R14,R16
.dbline 817
; if (msg_buffer[1] == 3) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,3
brne L345
X110:
.dbline 817
sts _msg_buffer+2,R14
L345:
.dbline 818
; tmp = spi_transfer_8(msg_buffer[5]);
lds R16,_msg_buffer+5
xcall _spi_transfer_8
mov R14,R16
.dbline 819
; if (msg_buffer[1] == 4) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,4
brne L350
X111:
.dbline 819
sts _msg_buffer+2,R14
L350:
.dbline 821
;
; num_bytes = 4;
ldi R24,4
ldi R25,0
movw R10,R24
.dbline 822
; msg_buffer[0] = CMD_READ_FUSE_ISP;
ldi R24,24
sts _msg_buffer,R24
.dbline 823
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 824
; msg_buffer[3] = STATUS_CMD_OK;
sts _msg_buffer+3,R2
.dbline 825
; }
xjmp L333
L332:
.dbline 829
; //////////////////////////////////////
; //CMD_PROGRAM_LOCK_ISP
; //////////////////////////////////////
; else if (cmd==CMD_PROGRAM_LOCK_ISP)
ldd R24,y+10
cpi R24,25
brne L356
X112:
.dbline 830
; {
.dbline 831
; tmp = spi_transfer_8(msg_buffer[1]);
lds R16,_msg_buffer+1
xcall _spi_transfer_8
.dbline 832
; tmp = spi_transfer_8(msg_buffer[2]);
lds R16,_msg_buffer+2
xcall _spi_transfer_8
.dbline 833
; tmp = spi_transfer_8(msg_buffer[3]);
lds R16,_msg_buffer+3
xcall _spi_transfer_8
.dbline 834
; tmp = spi_transfer_8(msg_buffer[4]);
lds R16,_msg_buffer+4
xcall _spi_transfer_8
.dbline 836
;
; num_bytes = 3;
ldi R24,3
ldi R25,0
movw R10,R24
.dbline 837
; msg_buffer[0] = CMD_PROGRAM_LOCK_ISP;
ldi R24,25
sts _msg_buffer,R24
.dbline 838
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 839
; msg_buffer[2] = STATUS_CMD_OK;
sts _msg_buffer+2,R2
.dbline 840
; }
xjmp L357
L356:
.dbline 844
; //////////////////////////////////////
; //CMD_READ_LOCK_ISP
; //////////////////////////////////////
; else if (cmd==CMD_READ_LOCK_ISP)
ldd R24,y+10
cpi R24,26
brne L364
X113:
.dbline 845
; {
.dbline 846
; tmp = spi_transfer_8(msg_buffer[2]);
lds R16,_msg_buffer+2
xcall _spi_transfer_8
mov R14,R16
.dbline 847
; if (msg_buffer[1] == 1) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,1
brne L367
X114:
.dbline 847
sts _msg_buffer+2,R14
L367:
.dbline 848
; tmp = spi_transfer_8(msg_buffer[3]);
lds R16,_msg_buffer+3
xcall _spi_transfer_8
mov R14,R16
.dbline 849
; if (msg_buffer[1] == 2) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,2
brne L372
X115:
.dbline 849
sts _msg_buffer+2,R14
L372:
.dbline 850
; tmp = spi_transfer_8(msg_buffer[4]);
lds R16,_msg_buffer+4
xcall _spi_transfer_8
mov R14,R16
.dbline 851
; if (msg_buffer[1] == 3) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,3
brne L377
X116:
.dbline 851
sts _msg_buffer+2,R14
L377:
.dbline 852
; tmp = spi_transfer_8(msg_buffer[5]);
lds R16,_msg_buffer+5
xcall _spi_transfer_8
mov R14,R16
.dbline 853
; if (msg_buffer[1] == 4) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,4
brne L382
X117:
.dbline 853
sts _msg_buffer+2,R14
L382:
.dbline 855
;
; num_bytes = 4;
ldi R24,4
ldi R25,0
movw R10,R24
.dbline 856
; msg_buffer[0] = CMD_READ_LOCK_ISP;
ldi R24,26
sts _msg_buffer,R24
.dbline 857
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 858
; msg_buffer[3] = STATUS_CMD_OK;
sts _msg_buffer+3,R2
.dbline 859
; }
xjmp L365
L364:
.dbline 863
; //////////////////////////////////////
; //CMD_READ_SIGNATURE_ISP
; //////////////////////////////////////
; else if (cmd==CMD_READ_SIGNATURE_ISP)
ldd R24,y+10
cpi R24,27
brne L388
X118:
.dbline 864
; {
.dbline 865
; tmp = spi_transfer_8(msg_buffer[2]);
lds R16,_msg_buffer+2
xcall _spi_transfer_8
mov R14,R16
.dbline 866
; if (msg_buffer[1] == 1) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,1
brne L391
X119:
.dbline 866
sts _msg_buffer+2,R14
L391:
.dbline 867
; tmp = spi_transfer_8(msg_buffer[3]);
lds R16,_msg_buffer+3
xcall _spi_transfer_8
mov R14,R16
.dbline 868
; if (msg_buffer[1] == 2) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,2
brne L396
X120:
.dbline 868
sts _msg_buffer+2,R14
L396:
.dbline 869
; tmp = spi_transfer_8(msg_buffer[4]);
lds R16,_msg_buffer+4
xcall _spi_transfer_8
mov R14,R16
.dbline 870
; if (msg_buffer[1] == 3) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,3
brne L401
X121:
.dbline 870
sts _msg_buffer+2,R14
L401:
.dbline 871
; tmp = spi_transfer_8(msg_buffer[5]);
lds R16,_ms
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -