📄 spi01.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\spi01.err -O0 -asm -g+ -cpu 5TEJ -fs -Wd -Ec -I.\include "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
Ch15_SPI PROC
;;;77 void Ch15_SPI(void)
;;;78 {
|L1.0|
000000 e92d4010 STMFD sp!,{r4,lr}
;;;79 while(1)
000004 e1a00000 NOP
|L1.8|
000008 e1a00000 NOP
;;;80 {
;;;81 int i = 0;
00000c e3a04000 MOV r4,#0
;;;82 Uart_Printf("\n");
000010 e28f008c ADR r0,|L1.164|
000014 ebfffffe BL _printf
;;;83 while(1)
000018 e1a00000 NOP
|L1.28|
00001c e1a00000 NOP
;;;84 { //display menu
;;;85 Uart_Printf("%2d:%s\n",i,spi_func[i][1]);
000020 e59f0080 LDR r0,|L1.168|
000024 e0800184 ADD r0,r0,r4,LSL #3
000028 e1a01004 MOV r1,r4
00002c e5902004 LDR r2,[r0,#4]
000030 e28f0074 ADR r0,|L1.172|
000034 ebfffffe BL _printf
;;;86 i++;
000038 e2844001 ADD r4,r4,#1
;;;87 if((int)(spi_func[i][0])==0)
00003c e59f0064 LDR r0,|L1.168|
000040 e7900184 LDR r0,[r0,r4,LSL #3]
000044 e3500000 CMP r0,#0
000048 1a000002 BNE |L1.88|
;;;88 {
;;;89 Uart_Printf("\n");
00004c e28f0050 ADR r0,|L1.164|
000050 ebfffffe BL _printf
;;;90 break;
000054 ea000000 B |L1.92|
;;;91 }
;;;92 //if((i%3)==0)
;;;93 //Uart_Printf("\n");
;;;94 }
|L1.88|
000058 eaffffef B |L1.28|
;;;95
;;;96 Uart_Printf("\nSelect the function to test : ");
|L1.92|
00005c e28f0050 ADR r0,|L1.180|
000060 ebfffffe BL _printf
;;;97 i = Uart_GetIntNum();
000064 ebfffffe BL Uart_GetIntNum
000068 e1a04000 MOV r4,r0
;;;98 Uart_Printf("\n");
00006c e28f0030 ADR r0,|L1.164|
000070 ebfffffe BL _printf
;;;99 if(i==-1) break;
000074 e3740001 CMN r4,#1
000078 1a000000 BNE |L1.128|
00007c ea000007 B |L1.160|
;;;100 if(i>=0 && (i<(sizeof(spi_func)/8)) )
|L1.128|
000080 e3540000 CMP r4,#0
000084 ba000004 BLT |L1.156|
000088 e3540009 CMP r4,#9
00008c 2a000002 BCS |L1.156|
;;;101 ( (void (*)(void)) (spi_func[i][0]) )();
000090 e59f1010 LDR r1,|L1.168|
000094 e7910184 LDR r0,[r1,r4,LSL #3]
000098 e12fff30 BLX r0
;;;102 }
|L1.156|
00009c eaffffd9 B |L1.8|
;;;103 }
|L1.160|
0000a0 e8bd8010 LDMFD sp!,{r4,pc}
|L1.164|
0000a4 0000000a DCB "\n\0\0\0"
|L1.168|
0000a8 00000000 DCD spi_func
|L1.172|
0000ac 3a643225 DCB "%2d:"
0000b0 000a7325 DCB "%s\n\0"
|L1.180|
0000b4 6c65530a DCB "\nSel"
0000b8 20746365 DCB "ect "
0000bc 20656874 DCB "the "
0000c0 636e7566 DCB "func"
0000c4 6e6f6974 DCB "tion"
0000c8 206f7420 DCB " to "
0000cc 74736574 DCB "test"
0000d0 00203a20 DCB " : \0"
ENDP
Spi0_Int PROC
;;;105 void __irq Spi0_Int(void)
;;;106 {
0000d4 e92d501f STMFD sp!,{r0-r4,r12,lr}
0000d8 e24dd004 SUB sp,sp,#4
;;;107 unsigned int status;
;;;108 ClearPending(BIT_SPI0);
0000dc e3a00840 MOV r0,#0x400000
0000e0 e59f10d8 LDR r1,|L1.448|
0000e4 e5810000 STR r0,[r1,#0]
0000e8 e1c10000 BIC r0,r1,r0
0000ec e5900010 LDR r0,[r0,#0x10]
0000f0 e5810010 STR r0,[r1,#0x10]
0000f4 e1a00001 MOV r0,r1
0000f8 e5900010 LDR r0,[r0,#0x10]
;;;109 status=rSPSTA0;
0000fc e2810643 ADD r0,r1,#0x4300000
000100 e5900004 LDR r0,[r0,#4]
000104 e1a04000 MOV r4,r0
;;;110
;;;111 c0++;
000108 e59f00b4 LDR r0,|L1.452|
00010c e5900000 LDR r0,[r0,#0] ; c0
000110 e2800001 ADD r0,r0,#1
000114 e59f10a8 LDR r1,|L1.452|
000118 e5810000 STR r0,[r1,#0] ; c0
;;;112
;;;113 if(status&0x6)
00011c e3140006 TST r4,#6
000120 0a000002 BEQ |L1.304|
;;;114 Uart_Printf("Data Collision or Multi Master Error(0x%x)!!!\n", status);
000124 e1a01004 MOV r1,r4
000128 e28f0098 ADR r0,|L1.456|
00012c ebfffffe BL _printf
;;;115 while(!(status&0x1)); //Check ready state
|L1.304|
000130 e1a00000 NOP
|L1.308|
000134 e3140001 TST r4,#1
000138 0afffffd BEQ |L1.308|
;;;116 *spi0RxStr++=rSPRDAT0; //First Rx data is garbage data
00013c e59f00b4 LDR r0,|L1.504|
000140 e5901014 LDR r1,[r0,#0x14]
000144 e59f00b0 LDR r0,|L1.508|
000148 e5900000 LDR r0,[r0,#0] ; spi0RxStr
00014c e5c01000 STRB r1,[r0,#0]
000150 e2800001 ADD r0,r0,#1
000154 e59f10a0 LDR r1,|L1.508|
000158 e5810000 STR r0,[r1,#0] ; spi0RxStr
;;;117 if(*spi0TxStr!='\0')
00015c e59f009c LDR r0,|L1.512|
000160 e5900000 LDR r0,[r0,#0] ; spi0TxStr
000164 e5d00000 LDRB r0,[r0,#0]
000168 e3500000 CMP r0,#0
00016c 0a000008 BEQ |L1.404|
;;;118 rSPTDAT0=*spi0TxStr++;
000170 e59f0088 LDR r0,|L1.512|
000174 e5901000 LDR r1,[r0,#0] ; spi0TxStr
000178 e5d10000 LDRB r0,[r1,#0]
00017c e2811001 ADD r1,r1,#1
000180 e59f2078 LDR r2,|L1.512|
000184 e5821000 STR r1,[r2,#0] ; spi0TxStr
000188 e59f1068 LDR r1,|L1.504|
00018c e5810010 STR r0,[r1,#0x10]
000190 ea000007 B |L1.436|
;;;119 else
;;;120 {
;;;121 rINTMSK|=BIT_SPI0;
|L1.404|
000194 e59f0024 LDR r0,|L1.448|
000198 e5900008 LDR r0,[r0,#8]
00019c e3800840 ORR r0,r0,#0x400000
0001a0 e59f1018 LDR r1,|L1.448|
0001a4 e5810008 STR r0,[r1,#8]
;;;122 end0SpiTx=1;
0001a8 e3a00001 MOV r0,#1
0001ac e59f1050 LDR r1,|L1.516|
0001b0 e5810000 STR r0,[r1,#0] ; end0SpiTx
;;;123 }
;;;124
;;;125 }
|L1.436|
0001b4 e28dd004 ADD sp,sp,#4
0001b8 e8bd501f LDMFD sp!,{r0-r4,r12,lr}
0001bc e25ef004 SUBS pc,lr,#4
|L1.448|
0001c0 40200000 DCD 0x40200000
|L1.452|
0001c4 0000002c DCD ||.bss$2|| + 44
|L1.456|
0001c8 61746144 DCB "Data"
0001cc 6c6f4320 DCB " Col"
0001d0 6973696c DCB "lisi"
0001d4 6f206e6f DCB "on o"
0001d8 754d2072 DCB "r Mu"
0001dc 2069746c DCB "lti "
0001e0 7473614d DCB "Mast"
0001e4 45207265 DCB "er E"
0001e8 726f7272 DCB "rror"
0001ec 25783028 DCB "(0x%"
0001f0 21212978 DCB "x)!!"
0001f4 00000a21 DCB "!\n\0\0"
|L1.504|
0001f8 44500000 DCD 0x44500000
|L1.508|
0001fc 00000004 DCD ||.bss$2|| + 4
|L1.512|
000200 00000000 DCD ||.bss$2||
|L1.516|
000204 00000010 DCD ||.bss$2|| + 16
ENDP
Spi1_Int PROC
;;;127 void __irq Spi1_Int(void)
;;;128 {
000208 e92d501f STMFD sp!,{r0-r4,r12,lr}
00020c e24dd004 SUB sp,sp,#4
;;;129 unsigned int status;
;;;130 rSUBSRCPND|=(BIT_SUB_SPI1);
000210 e51f0058 LDR r0,|L1.448|
000214 e5900018 LDR r0,[r0,#0x18]
000218 e3800880 ORR r0,r0,#0x800000
00021c e51f1064 LDR r1,|L1.448|
000220 e5810018 STR r0,[r1,#0x18]
;;;131 ClearPending(BIT_VLX_SPI1);
000224 e3a00580 MOV r0,#0x20000000
000228 e1c11000 BIC r1,r1,r0
00022c e5810000 STR r0,[r1,#0]
000230 e1c10000 BIC r0,r1,r0
000234 e5900010 LDR r0,[r0,#0x10]
000238 e5810010 STR r0,[r1,#0x10]
00023c e1a00001 MOV r0,r1
000240 e5900010 LDR r0,[r0,#0x10]
;;;132 status=rSPSTA1;
000244 e2810643 ADD r0,r1,#0x4300000
000248 e5900024 LDR r0,[r0,#0x24]
00024c e1a04000 MOV r4,r0
;;;133
;;;134 c1++;
000250 e59f02cc LDR r0,|L1.1316|
000254 e5900000 LDR r0,[r0,#0] ; c1
000258 e2800001 ADD r0,r0,#1
00025c e59f12c0 LDR r1,|L1.1316|
000260 e5810000 STR r0,[r1,#0] ; c1
;;;135
;;;136 if(status&0x6)
000264 e3140006 TST r4,#6
000268 0a000002 BEQ |L1.632|
;;;137 Uart_Printf("Data Collision or Multi Master Error(0x%x)!!!\n", status);
00026c e1a01004 MOV r1,r4
000270 e24f00b0 ADR r0,|L1.456|
000274 ebfffffe BL _printf
;;;138 while(!(status&0x1)); //Check ready state
|L1.632|
000278 e1a00000 NOP
|L1.636|
00027c e3140001 TST r4,#1
000280 0afffffd BEQ |L1.636|
;;;139 *spi1RxStr++=rSPRDAT1; //First Rx data is garbage data
000284 e51f0094 LDR r0,|L1.504|
000288 e5901034 LDR r1,[r0,#0x34]
00028c e59f0294 LDR r0,|L1.1320|
000290 e5900000 LDR r0,[r0,#0] ; spi1RxStr
000294 e5c01000 STRB r1,[r0,#0]
000298 e2800001 ADD r0,r0,#1
00029c e59f1284 LDR r1,|L1.1320|
0002a0 e5810000 STR r0,[r1,#0] ; spi1RxStr
;;;140 if(*spi1TxStr!='\0')
0002a4 e59f0280 LDR r0,|L1.1324|
0002a8 e5900000 LDR r0,[r0,#0] ; spi1TxStr
0002ac e5d00000 LDRB r0,[r0,#0]
0002b0 e3500000 CMP r0,#0
0002b4 0a000008 BEQ |L1.732|
;;;141 rSPTDAT1=*spi1TxStr++;
0002b8 e59f026c LDR r0,|L1.1324|
0002bc e5901000 LDR r1,[r0,#0] ; spi1TxStr
0002c0 e5d10000 LDRB r0,[r1,#0]
0002c4 e2811001 ADD r1,r1,#1
0002c8 e59f225c LDR r2,|L1.1324|
0002cc e5821000 STR r1,[r2,#0] ; spi1TxStr
0002d0 e51f10e0 LDR r1,|L1.504|
0002d4 e5810030 STR r0,[r1,#0x30]
0002d8 ea00000b B |L1.780|
;;;142 else
;;;143 {
;;;144 rINTMSK|=(BIT_VLX_SPI1);
|L1.732|
0002dc e51f0124 LDR r0,|L1.448|
0002e0 e5900008 LDR r0,[r0,#8]
0002e4 e3800580 ORR r0,r0,#0x20000000
0002e8 e51f1130 LDR r1,|L1.448|
0002ec e5810008 STR r0,[r1,#8]
;;;145 rINTSUBMSK|=(BIT_SUB_SPI1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -