⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.s

📁 很好的制作AVR32 ICE的资料
💻 S
📖 第 1 页 / 共 5 页
字号:
	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 + -