📄 spi.txt
字号:
;;;151 rGPGUP=spi_rGPGUP;
000300 e59f01d0 LDR r0,|L1.1240|
000304 e5900000 LDR r0,[r0,#0] ; spi_rGPGUP
000308 e3a01456 MOV r1,#0x56000000
00030c e5810068 STR r0,[r1,#0x68]
;;;152
;;;153 rGPDCON=spi_rGPDCON;
000310 e59f01c4 LDR r0,|L1.1244|
000314 e5900000 LDR r0,[r0,#0] ; spi_rGPDCON
000318 e3a01456 MOV r1,#0x56000000
00031c e5810030 STR r0,[r1,#0x30]
;;;154 rGPDDAT=spi_rGPDDAT;
000320 e59f01b8 LDR r0,|L1.1248|
000324 e5900000 LDR r0,[r0,#0] ; spi_rGPDDAT
000328 e3a01456 MOV r1,#0x56000000
00032c e5810034 STR r0,[r1,#0x34]
;;;155 rGPDUP=spi_rGPDUP;
000330 e59f01ac LDR r0,|L1.1252|
000334 e5900000 LDR r0,[r0,#0] ; spi_rGPDUP
000338 e3a01456 MOV r1,#0x56000000
00033c e5810038 STR r0,[r1,#0x38]
;;;156 }
000340 e1a0f00e MOV pc,lr
ENDP
Test_Spi1_MS_poll PROC
;;;159 void Test_Spi1_MS_poll(void)
;;;160 {
000344 e92d4038 STMFD sp!,{r3-r5,lr}
;;;161 int i;
;;;162 char *txStr,*rxStr;
;;;163 SPI_Port_Init(1);
000348 e3a00001 MOV r0,#1
00034c ebfffffe BL SPI_Port_Init
;;;164 Uart_Printf("[SPI Polling Tx/Rx Test]\n");
000350 e28f0f64 ADR r0,|L1.1256|
000354 ebfffffe BL Uart_Printf
;;;165 Uart_Printf("Connect SPIMOSI1 into SPIMISO1.\n");
000358 e28f0f69 ADR r0,|L1.1284|
00035c ebfffffe BL Uart_Printf
;;;166 endSpiTx=0;
000360 e3a00000 MOV r0,#0
000364 e59f11bc LDR r1,|L1.1320|
000368 e5810000 STR r0,[r1,#0] ; endSpiTx
;;;167 spiTxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 - SPI1";
00036c e28f0f6e ADR r0,|L1.1324|
000370 e59f11e0 LDR r1,|L1.1368|
000374 e5810000 STR r0,[r1,#0] ; spiTxStr
;;;168 spiRxStr=(char *) SPI_BUFFER;
000378 e3a005c4 MOV r0,#0x31000000
00037c e59f11d8 LDR r1,|L1.1372|
000380 e5810000 STR r0,[r1,#0] ; spiRxStr
;;;169 txStr=(char *)spiTxStr;
000384 e59f01cc LDR r0,|L1.1368|
000388 e5904000 LDR r4,[r0,#0] ; spiTxStr
;;;170 rxStr=(char *)spiRxStr;
00038c e59f01c8 LDR r0,|L1.1372|
000390 e5905000 LDR r5,[r0,#0] ; spiRxStr
;;;171
;;;172 rSPPRE1=0x0; //if PCLK=50Mhz,SPICLK=25Mhz
000394 e3a00000 MOV r0,#0
000398 e3a01459 MOV r1,#0x59000000
00039c e581002c STR r0,[r1,#0x2c]
;;;173 rSPCON1=(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//Polling,en-SCK,master,low,A,normal
0003a0 e3a0001c MOV r0,#0x1c
0003a4 e3a01459 MOV r1,#0x59000000
0003a8 e5810020 STR r0,[r1,#0x20]
;;;174 rSPPIN1=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
0003ac e3a00002 MOV r0,#2
0003b0 e3a01459 MOV r1,#0x59000000
0003b4 e5810028 STR r0,[r1,#0x28]
;;;175
;;;176 while(endSpiTx==0)
0003b8 e1a00000 NOP
|L1.956|
0003bc e59f0164 LDR r0,|L1.1320|
0003c0 e5900000 LDR r0,[r0,#0] ; endSpiTx
0003c4 e3500000 CMP r0,#0
0003c8 1a000022 BNE |L1.1112|
;;;177 {
;;;178 if(rSPSTA1&0x1) //Check Tx ready state
0003cc e3a00459 MOV r0,#0x59000000
0003d0 e5900024 LDR r0,[r0,#0x24]
0003d4 e3100001 TST r0,#1
0003d8 0a00001d BEQ |L1.1108|
;;;179 {
;;;180 if(*spiTxStr!='\0')
0003dc e59f0174 LDR r0,|L1.1368|
0003e0 e5900000 LDR r0,[r0,#0] ; spiTxStr
0003e4 e5d00000 LDRB r0,[r0,#0]
0003e8 e3500000 CMP r0,#0
0003ec 0a000008 BEQ |L1.1044|
;;;181 rSPTDAT1=*spiTxStr++;
0003f0 e59f0160 LDR r0,|L1.1368|
0003f4 e5901000 LDR r1,[r0,#0] ; spiTxStr
0003f8 e5d10000 LDRB r0,[r1,#0]
0003fc e2811001 ADD r1,r1,#1
000400 e59f2150 LDR r2,|L1.1368|
000404 e5821000 STR r1,[r2,#0] ; spiTxStr
000408 e3a01459 MOV r1,#0x59000000
00040c e5810030 STR r0,[r1,#0x30]
000410 ea000002 B |L1.1056|
;;;182 else
;;;183 endSpiTx=1;
|L1.1044|
000414 e3a00001 MOV r0,#1
000418 e59f1108 LDR r1,|L1.1320|
00041c e5810000 STR r0,[r1,#0] ; endSpiTx
;;;184 while(!(rSPSTA1&0x1)); //Check Rx ready state
|L1.1056|
000420 e1a00000 NOP
|L1.1060|
000424 e3a00459 MOV r0,#0x59000000
000428 e5900024 LDR r0,[r0,#0x24]
00042c e3100001 TST r0,#1
000430 0afffffb BEQ |L1.1060|
;;;185 *spiRxStr++=rSPRDAT1;
000434 e3a00459 MOV r0,#0x59000000
000438 e5901034 LDR r1,[r0,#0x34]
00043c e59f0118 LDR r0,|L1.1372|
000440 e5900000 LDR r0,[r0,#0] ; spiRxStr
000444 e5c01000 STRB r1,[r0,#0]
000448 e2800001 ADD r0,r0,#1
00044c e59f1108 LDR r1,|L1.1372|
000450 e5810000 STR r0,[r1,#0] ; spiRxStr
;;;186 }
;;;187 }
|L1.1108|
000454 eaffffd8 B |L1.956|
;;;188
;;;189 rSPCON1&=~(1<<4);//dis-SCK
|L1.1112|
000458 e3a00459 MOV r0,#0x59000000
00045c e5900020 LDR r0,[r0,#0x20]
000460 e3c00010 BIC r0,r0,#0x10
000464 e3a01459 MOV r1,#0x59000000
000468 e5810020 STR r0,[r1,#0x20]
;;;190 *(spiRxStr-1)='\0';//remove last dummy data & attach End of String(Null)
00046c e3a00000 MOV r0,#0
000470 e59f10e4 LDR r1,|L1.1372|
000474 e5911000 LDR r1,[r1,#0] ; spiRxStr
000478 e5410001 STRB r0,[r1,#-1]
;;;191
;;;192 Uart_Printf("Tx Strings:%s\n",txStr);
00047c e1a01004 MOV r1,r4
000480 e28f00d8 ADR r0,|L1.1376|
000484 ebfffffe BL Uart_Printf
;;;193 Uart_Printf("Rx Strings:%s :",rxStr);
000488 e1a01005 MOV r1,r5
00048c e28f00dc ADR r0,|L1.1392|
000490 ebfffffe BL Uart_Printf
;;;194
;;;195 if(strcmp(rxStr,txStr)==0)
000494 e1a01004 MOV r1,r4
000498 e1a00005 MOV r0,r5
00049c ebfffffe BL strcmp
0004a0 e3500000 CMP r0,#0
0004a4 1a000002 BNE |L1.1204|
;;;196 Uart_Printf("O.K.\n");
0004a8 e28f00d0 ADR r0,|L1.1408|
0004ac ebfffffe BL Uart_Printf
0004b0 ea000001 B |L1.1212|
;;;197 else
;;;198 Uart_Printf("ERROR!!!\n");
|L1.1204|
0004b4 e28f00cc ADR r0,|L1.1416|
0004b8 ebfffffe BL Uart_Printf
;;;199 SPI_Port_Return();
|L1.1212|
0004bc ebfffffe BL SPI_Port_Return
;;;200 }
0004c0 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.1220|
0004c4 00000014 DCD ||.bss$2|| + 20
|L1.1224|
0004c8 00000018 DCD ||.bss$2|| + 24
|L1.1228|
0004cc 0000001c DCD ||.bss$2|| + 28
|L1.1232|
0004d0 00000020 DCD ||.bss$2|| + 32
|L1.1236|
0004d4 00000024 DCD ||.bss$2|| + 36
|L1.1240|
0004d8 00000028 DCD ||.bss$2|| + 40
|L1.1244|
0004dc 0000002c DCD ||.bss$2|| + 44
|L1.1248|
0004e0 00000030 DCD ||.bss$2|| + 48
|L1.1252|
0004e4 00000034 DCD ||.bss$2|| + 52
|L1.1256|
0004e8 4950535b DCB "[SPI"
0004ec 6c6f5020 DCB " Pol"
0004f0 676e696c DCB "ling"
0004f4 2f785420 DCB " Tx/"
0004f8 54207852 DCB "Rx T"
0004fc 5d747365 DCB "est]"
000500 0000000a DCB "\n\0\0\0"
|L1.1284|
000504 6e6e6f43 DCB "Conn"
000508 20746365 DCB "ect "
00050c 4d495053 DCB "SPIM"
000510 3149534f DCB "OSI1"
000514 746e6920 DCB " int"
000518 5053206f DCB "o SP"
00051c 53494d49 DCB "IMIS"
000520 0a2e314f DCB "O1.\n"
000524 00000000 DCB "\0\0\0\0"
|L1.1320|
000528 00000008 DCD ||.bss$2|| + 8
|L1.1324|
00052c 44434241 DCB "ABCD"
000530 48474645 DCB "EFGH"
000534 4c4b4a49 DCB "IJKL"
000538 504f4e4d DCB "MNOP"
00053c 54535251 DCB "QRST"
000540 58575655 DCB "UVWX"
000544 31305a59 DCB "YZ01"
000548 35343332 DCB "2345"
00054c 39383736 DCB "6789"
000550 53202d20 DCB " - S"
000554 00314950 DCB "PI1\0"
|L1.1368|
000558 00000000 DCD ||.bss$2||
|L1.1372|
00055c 00000004 DCD ||.bss$2|| + 4
|L1.1376|
000560 53207854 DCB "Tx S"
000564 6e697274 DCB "trin"
000568 253a7367 DCB "gs:%"
00056c 00000a73 DCB "s\n\0\0"
|L1.1392|
000570 53207852 DCB "Rx S"
000574 6e697274 DCB "trin"
000578 253a7367 DCB "gs:%"
00057c 003a2073 DCB "s :\0"
|L1.1408|
000580 2e4b2e4f DCB "O.K."
000584 0000000a DCB "\n\0\0\0"
|L1.1416|
000588 4f525245 DCB "ERRO"
00058c 21212152 DCB "R!!!"
000590 0000000a DCB "\n\0\0\0"
ENDP
Spi_Int PROC
;;;237 void __irq Spi_Int(void)
;;;238 {
000594 e92d501f STMFD sp!,{r0-r4,r12,lr}
000598 e24dd004 SUB sp,sp,#4
;;;239 unsigned int status;
;;;240
;;;241 rINTMSK|=BIT_SPI0;
00059c e3a0044a MOV r0,#0x4a000000
0005a0 e5900008 LDR r0,[r0,#8]
0005a4 e3800840 ORR r0,r0,#0x400000
0005a8 e3a0144a MOV r1,#0x4a000000
0005ac e5810008 STR r0,[r1,#8]
;;;242 ClearPending(BIT_SPI0);
0005b0 e3a00840 MOV r0,#0x400000
0005b4 e3a0144a MOV r1,#0x4a000000
0005b8 e5810000 STR r0,[r1,#0]
0005bc e3a00840 MOV r0,#0x400000
0005c0 e3a0144a MOV r1,#0x4a000000
0005c4 e5810010 STR r0,[r1,#0x10]
0005c8 e3a0044a MOV r0,#0x4a000000
0005cc e5900010 LDR r0,[r0,#0x10]
;;;243 status=rSPSTA0;
0005d0 e3a00459 MOV r0,#0x59000000
0005d4 e5900004 LDR r0,[r0,#4]
0005d8 e1a04000 MOV r4,r0
;;;244 if(rSPSTA0&0x6)
0005dc e3a00459 MOV r0,#0x59000000
0005e0 e5900004 LDR r0,[r0,#4]
0005e4 e3100006 TST r0,#6
0005e8 0a000002 BEQ |L1.1528|
;;;245 Uart_Printf("Data Collision or Multi Master Error(0x%x)!!!\n", status);
0005ec e1a01004 MOV r1,r4
0005f0 e28f0098 ADR r0,|L1.1680|
0005f4 ebfffffe BL Uart_Printf
;;;246 while(!(rSPSTA0&0x1)); //Check ready state
|L1.1528|
0005f8 e1a00000 NOP
|L1.1532|
0005fc e3a00459 MOV r0,#0x59000000
000600 e5900004 LDR r0,[r0,#4]
000604 e3100001 TST r0,#1
000608 0afffffb BEQ |L1.1532|
;;;247 *spiRxStr++=rSPRDAT0; //First Rx data is garbage data
00060c e3a00459 MOV r0,#0x59000000
000610 e5901014 LDR r1,[r0,#0x14]
000614 e51f00c0 LDR r0,|L1.1372|
000618 e5900000 LDR r0,[r0,#0] ; spiRxStr
00061c e5c01000 STRB r1,[r0,#0]
000620 e2800001 ADD r0,r0,#1
000624 e51f10d0 LDR r1,|L1.1372|
000628 e5810000 STR r0,[r1,#0] ; spiRxStr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -