main.s
来自「文档里面的代码是可以正常使用的」· S 代码 · 共 3,673 行 · 第 1/5 页
S
3,673 行
.dbline 740
.dbline 742
ldd R16,y+13
rcall _spi_transfer_8
.dbline 743
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
rcall _spi_transfer_16
.dbline 744
clr R16
rcall _spi_transfer_8
ldi R24,<_msg_buffer
ldi R25,>_msg_buffer
movw R30,R12
adiw R30,2
add R30,R24
adc R31,R25
std z+0,R16
.dbline 747
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 748
L320:
.dbline 739
movw R24,R12
adiw R24,1
movw R12,R24
L322:
.dbline 739
cp R12,R10
cpc R13,R11
brsh X27
rjmp L319
X27:
.dbline 750
; {
; //Select Low or High-Byte
; spi_transfer_8(tmp);
; spi_transfer_16(address&0xFFFF);
; msg_buffer[i+2] = spi_transfer_8(0);
;
; //increment address
; address++;
; }
;
; num_bytes = block_size+3;
movw R24,R10
adiw R24,3
std y+11,R25
std y+10,R24
.dbline 751
; msg_buffer[0] = CMD_READ_EEPROM_ISP;
ldi R24,22
sts _msg_buffer,R24
.dbline 752
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 753
; msg_buffer[block_size+2] = STATUS_CMD_OK;
ldi R24,<_msg_buffer
ldi R25,>_msg_buffer
movw R30,R10
adiw R30,2
add R30,R24
adc R31,R25
std z+0,R2
.dbline 754
; }
rjmp L315
L314:
.dbline 760
;
;
; //////////////////////////////////////
; //CMD_PROGRAM_FUSE_ISP
; //////////////////////////////////////
; else if(cmd==CMD_PROGRAM_FUSE_ISP)
ldd R24,y+12
cpi R24,23
brne L324
.dbline 761
; {
.dbline 762
; tmp = spi_transfer_8(msg_buffer[1]);
lds R16,_msg_buffer+1
rcall _spi_transfer_8
std y+13,R16
.dbline 763
; tmp = spi_transfer_8(msg_buffer[2]);
lds R16,_msg_buffer+2
rcall _spi_transfer_8
std y+13,R16
.dbline 764
; tmp = spi_transfer_8(msg_buffer[3]);
lds R16,_msg_buffer+3
rcall _spi_transfer_8
std y+13,R16
.dbline 765
; tmp = spi_transfer_8(msg_buffer[4]);
lds R16,_msg_buffer+4
rcall _spi_transfer_8
std y+13,R16
.dbline 767
;
; num_bytes = 3;
ldi R24,3
ldi R25,0
std y+11,R25
std y+10,R24
.dbline 768
; msg_buffer[0] = CMD_PROGRAM_FUSE_ISP;
ldi R24,23
sts _msg_buffer,R24
.dbline 769
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 770
; msg_buffer[2] = STATUS_CMD_OK;
sts _msg_buffer+2,R2
.dbline 771
; }
rjmp L325
L324:
.dbline 775
; //////////////////////////////////////
; //CMD_READ_FUSE_ISP
; //////////////////////////////////////
; else if(cmd==CMD_READ_FUSE_ISP)
ldd R24,y+12
cpi R24,24
brne L332
.dbline 776
; {
.dbline 777
; tmp = spi_transfer_8(msg_buffer[2]);
lds R16,_msg_buffer+2
rcall _spi_transfer_8
std y+13,R16
.dbline 778
; if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,1
brne L335
.dbline 778
mov R0,R16
sts _msg_buffer+2,R0
L335:
.dbline 779
; tmp = spi_transfer_8(msg_buffer[3]);
lds R16,_msg_buffer+3
rcall _spi_transfer_8
std y+13,R16
.dbline 780
; if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,2
brne L340
.dbline 780
mov R0,R16
sts _msg_buffer+2,R0
L340:
.dbline 781
; tmp = spi_transfer_8(msg_buffer[4]);
lds R16,_msg_buffer+4
rcall _spi_transfer_8
std y+13,R16
.dbline 782
; if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,3
brne L345
.dbline 782
mov R0,R16
sts _msg_buffer+2,R0
L345:
.dbline 783
; tmp = spi_transfer_8(msg_buffer[5]);
lds R16,_msg_buffer+5
rcall _spi_transfer_8
std y+13,R16
.dbline 784
; if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,4
brne L350
.dbline 784
mov R0,R16
sts _msg_buffer+2,R0
L350:
.dbline 786
;
; num_bytes = 4;
ldi R24,4
ldi R25,0
std y+11,R25
std y+10,R24
.dbline 787
; msg_buffer[0] = CMD_READ_FUSE_ISP;
ldi R24,24
sts _msg_buffer,R24
.dbline 788
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 789
; msg_buffer[3] = STATUS_CMD_OK;
sts _msg_buffer+3,R2
.dbline 790
; }
rjmp L333
L332:
.dbline 794
; //////////////////////////////////////
; //CMD_PROGRAM_LOCK_ISP
; //////////////////////////////////////
; else if(cmd==CMD_PROGRAM_LOCK_ISP)
ldd R24,y+12
cpi R24,25
brne L356
.dbline 795
; {
.dbline 796
; tmp = spi_transfer_8(msg_buffer[1]);
lds R16,_msg_buffer+1
rcall _spi_transfer_8
std y+13,R16
.dbline 797
; tmp = spi_transfer_8(msg_buffer[2]);
lds R16,_msg_buffer+2
rcall _spi_transfer_8
std y+13,R16
.dbline 798
; tmp = spi_transfer_8(msg_buffer[3]);
lds R16,_msg_buffer+3
rcall _spi_transfer_8
std y+13,R16
.dbline 799
; tmp = spi_transfer_8(msg_buffer[4]);
lds R16,_msg_buffer+4
rcall _spi_transfer_8
std y+13,R16
.dbline 801
;
; num_bytes = 3;
ldi R24,3
ldi R25,0
std y+11,R25
std y+10,R24
.dbline 802
; msg_buffer[0] = CMD_PROGRAM_LOCK_ISP;
ldi R24,25
sts _msg_buffer,R24
.dbline 803
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 804
; msg_buffer[2] = STATUS_CMD_OK;
sts _msg_buffer+2,R2
.dbline 805
; }
rjmp L357
L356:
.dbline 809
; //////////////////////////////////////
; //CMD_READ_LOCK_ISP
; //////////////////////////////////////
; else if(cmd==CMD_READ_LOCK_ISP)
ldd R24,y+12
cpi R24,26
brne L364
.dbline 810
; {
.dbline 811
; tmp = spi_transfer_8(msg_buffer[2]);
lds R16,_msg_buffer+2
rcall _spi_transfer_8
std y+13,R16
.dbline 812
; if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,1
brne L367
.dbline 812
mov R0,R16
sts _msg_buffer+2,R0
L367:
.dbline 813
; tmp = spi_transfer_8(msg_buffer[3]);
lds R16,_msg_buffer+3
rcall _spi_transfer_8
std y+13,R16
.dbline 814
; if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,2
brne L372
.dbline 814
mov R0,R16
sts _msg_buffer+2,R0
L372:
.dbline 815
; tmp = spi_transfer_8(msg_buffer[4]);
lds R16,_msg_buffer+4
rcall _spi_transfer_8
std y+13,R16
.dbline 816
; if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,3
brne L377
.dbline 816
mov R0,R16
sts _msg_buffer+2,R0
L377:
.dbline 817
; tmp = spi_transfer_8(msg_buffer[5]);
lds R16,_msg_buffer+5
rcall _spi_transfer_8
std y+13,R16
.dbline 818
; if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,4
brne L382
.dbline 818
mov R0,R16
sts _msg_buffer+2,R0
L382:
.dbline 820
;
; num_bytes = 4;
ldi R24,4
ldi R25,0
std y+11,R25
std y+10,R24
.dbline 821
; msg_buffer[0] = CMD_READ_LOCK_ISP;
ldi R24,26
sts _msg_buffer,R24
.dbline 822
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 823
; msg_buffer[3] = STATUS_CMD_OK;
sts _msg_buffer+3,R2
.dbline 824
; }
rjmp L365
L364:
.dbline 828
; //////////////////////////////////////
; //CMD_READ_SIGNATURE_ISP
; //////////////////////////////////////
; else if(cmd==CMD_READ_SIGNATURE_ISP)
ldd R24,y+12
cpi R24,27
brne L388
.dbline 829
; {
.dbline 830
; tmp = spi_transfer_8(msg_buffer[2]);
lds R16,_msg_buffer+2
rcall _spi_transfer_8
std y+13,R16
.dbline 831
; if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,1
brne L391
.dbline 831
mov R0,R16
sts _msg_buffer+2,R0
L391:
.dbline 832
; tmp = spi_transfer_8(msg_buffer[3]);
lds R16,_msg_buffer+3
rcall _spi_transfer_8
std y+13,R16
.dbline 833
; if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,2
brne L396
.dbline 833
mov R0,R16
sts _msg_buffer+2,R0
L396:
.dbline 834
; tmp = spi_transfer_8(msg_buffer[4]);
lds R16,_msg_buffer+4
rcall _spi_transfer_8
std y+13,R16
.dbline 835
; if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,3
brne L401
.dbline 835
mov R0,R16
sts _msg_buffer+2,R0
L401:
.dbline 836
; tmp = spi_transfer_8(msg_buffer[5]);
lds R16,_msg_buffer+5
rcall _spi_transfer_8
std y+13,R16
.dbline 837
; if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,4
brne L406
.dbline 837
mov R0,R16
sts _msg_buffer+2,R0
L406:
.dbline 839
;
; num_bytes = 4;
ldi R24,4
ldi R25,0
std y+11,R25
std y+10,R24
.dbline 840
; msg_buffer[0] = CMD_READ_SIGNATURE_ISP;
ldi R24,27
sts _msg_buffer,R24
.dbline 841
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 842
; msg_buffer[3] = STATUS_CMD_OK;
sts _msg_buffer+3,R2
.dbline 843
; }
rjmp L389
L388:
.dbline 847
; //////////////////////////////////////
; //CMD_READ_OSCCAL_ISP
; //////////////////////////////////////
; else if(cmd==CMD_READ_OSCCAL_ISP)
ldd R24,y+12
cpi R24,28
brne L412
.dbline 848
; {
.dbline 849
; tmp = spi_transfer_8(msg_buffer[2]);
lds R16,_msg_buffer+2
rcall _spi_transfer_8
std y+13,R16
.dbline 850
; if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,1
brne L415
.dbline 850
mov R0,R16
sts _msg_buffer+2,R0
L415:
.dbline 851
; tmp = spi_transfer_8(msg_buffer[3]);
lds R16,_msg_buffer+3
rcall _spi_transfer_8
std y+13,R16
.dbline 852
; if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,2
brne L420
.dbline 852
mov R0,R16
sts _msg_buffer+2,R0
L420:
.dbline 853
; tmp = spi_transfer_8(msg_buffer[4]);
lds R16,_msg_buffer+4
rcall _spi_transfer_8
std y+13,R16
.dbline 854
; if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,3
brne L425
.dbline 854
mov R0,R16
sts _msg_buffer+2,R0
L425:
.dbline 855
; tmp = spi_transfer_8(msg_buffer[5]);
lds R16,_msg_buffer+5
rcall _spi_transfer_8
std y+13,R16
.dbline 856
; if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
lds R24,_msg_buffer+1
cpi R24,4
brne L430
.dbline 856
mov R0,R16
sts _msg_buffer+2,R0
L430:
.dbline 858
;
; num_bytes = 4;
ldi R24,4
ldi R25,0
std y+11,R25
std y+10,R24
.dbline 859
; msg_buffer[0] = CMD_READ_OSCCAL_ISP;
ldi R24,28
sts _msg_buffer,R24
.dbline 860
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 861
; msg_buffer[3] = STATUS_CMD_OK;
sts _msg_buffer+3,R2
.dbline 862
; }
L412:
L389:
L365:
L357:
L333:
L325:
L315:
L248:
L234:
L155:
L141:
L138:
L106:
L99:
L80:
L47:
L41:
.dbline 865
;
; //Transmission of the result
; if(num_bytes>0)
ldd R0,y+10
ldd R1,y+11
tst R0
brne X6
tst R1
breq L436
X6:
.dbline 866
; {
.dbline 867
; interface_putc(MESSAGE_START);
ldi R16,27
rcall _interface_putc
.dbline 868
; interface_putc(seq_num);
ldd R16,y+24
rcall _interface_putc
.dbline 869
; interface_put16(num_bytes);
ldd R16,y+10
ldd R17,y+11
rcall _interface_put16
.dbline 870
; interface_putc(TOKEN);
ldi R16,14
rcall _interface_putc
.dbline 871
; for(i=0;i<num_bytes;i++)
clr R12
clr R13
rjmp L441
L438:
.dbline 872
.dbline 873
ldi R24,<_msg_buffer
ldi R25,>_msg_buffer
movw R30,R12
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _interface_putc
.dbline 874
L439:
.dbline 871
movw R24,R12
adiw R24,1
movw R12,R24
L441:
.dbline 871
ldd R0,y+10
ldd R1,y+11
cp R12,R0
cpc R13,R1
brlo L438
.dbline 875
rcall _interface_send_check
.dbline 876
L436:
.dbline -2
L39:
adiw R28,14
rcall pop_gset5
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r mode 14 c
.dbsym r block_size 10 i
.dbsym l start_address 6 l
.dbsym l polling_address 2 l
.dbsym l tmp 13 c
.dbsym l cmd 12 c
.dbsym l num_bytes 10 i
.dbsym r i 12 i
.dbsym l seq_num 24 c
.dbend
.dbfunc e chip_init _chip_init fV
.even
_chip_init::
.dbline -1
.dbline 885
; {
; interface_putc(msg_buffer[i]);
; }
; interface_send_check();
; }
; }
;
;
; /**
; Hardware initialization
; Timer
; ADC
; */
; void chip_init(void) {
.dbline 887
;
; DDRB=(1<<0) | (1<<1) | (1<<2); //LED_RT, LED_GN
ldi R24,7
out 0x4,R24
.dbline 890
;
; //ADC
; ADMUX=0x60; //Avcc=Aref, Left Adjusted (8Bit-Aufl鰏ung aus ADCH)
ldi R24,96
sts 124,R24
.dbline 891
; ADCSRA = 0xC6; //ADC Enable, Init, 125kHz (bei 8MHz Clock)
ldi R24,198
sts 122,R24
.dbline 894
;
; //Timer 1 (Systemint 1ms)
; TCCR1B=0x09; //CTC-Mode /1
ldi R24,9
sts 129,R24
.dbline 895
; OCR1A=3686; /*3.686MHz / 3686 = 1kHz*/
ldi R24,3686
ldi R25,14
sts 136+1,R25
sts 136,R24
.dbline 896
; TIMSK1 |=(1<<OCIE1A); //enable OC-INT
lds R24,111
ori R24,2
sts 111,R24
.dbline -2
L442:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile E:\ICCAVR\icc\stk500\avrasp\main.c
_address::
.blkb 4
.dbsym e address _address l
_prgmode::
.blkb 1
.dbsym e prgmode _prgmode c
_param_controller_init::
.blkb 1
.dbsym e param_controller_init _param_controller_init c
_reset_polarity::
.blkb 1
.dbsym e reset_polarity _reset_polarity c
_clock_speed::
.blkb 1
.dbsym e clock_speed _clock_speed c
_msg_buffer::
.blkb 300
.dbsym e msg_buffer _msg_buffer A[300:300]c
.area data(ram, con, rel)
.dbfile E:\ICCAVR\icc\stk500\avrasp\main.c
L45:
.blkb 9
.area idata
.byte 'A,'V,'R,'I,'S,'P,95,50,0
.area data(ram, con, rel)
.dbfile E:\ICCAVR\icc\stk500\avrasp\main.c
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?