📄 spi01.txt
字号:
Test_Spi0_MS_poll PROC
;;;216 void Test_Spi0_MS_poll(void)
;;;217 {
0005f8 e92d4038 STMFD sp!,{r3-r5,lr}
;;;218 char *txStr,*rxStr;
;;;219 SPI0_Port_Init(1);
0005fc e3a00001 MOV r0,#1
000600 ebfffffe BL SPI0_Port_Init
;;;220 Uart_Printf("[SPI Polling Tx/Rx Self-Test]\n");
000604 e28f0f59 ADR r0,|L1.1904|
000608 ebfffffe BL _printf
;;;221 Uart_Printf("Connect SPIMOSI0 into SPIMISO0.\n");
00060c e24f00a4 ADR r0,|L1.1392|
000610 ebfffffe BL _printf
;;;222 end0SpiTx=0;
000614 e3a00000 MOV r0,#0
000618 e51f141c LDR r1,|L1.516|
00061c e5810000 STR r0,[r1,#0] ; end0SpiTx
;;;223 spi0TxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
000620 e28f0f5a ADR r0,|L1.1936|
000624 e51f142c LDR r1,|L1.512|
000628 e5810000 STR r0,[r1,#0] ; spi0TxStr
;;;224 spi0RxStr=(char *) SPI_BUFFER0;
00062c e3a00544 MOV r0,#0x11000000
000630 e51f143c LDR r1,|L1.508|
000634 e5810000 STR r0,[r1,#0] ; spi0RxStr
;;;225 txStr=(char *)spi0TxStr;
000638 e51f0440 LDR r0,|L1.512|
00063c e5904000 LDR r4,[r0,#0] ; spi0TxStr
;;;226 rxStr=(char *)spi0RxStr;
000640 e51f044c LDR r0,|L1.508|
000644 e5905000 LDR r5,[r0,#0] ; spi0RxStr
;;;227
;;;228 rSPPRE0=0x0; //if PCLK=50Mhz,SPICLK=25Mhz
000648 e3a00000 MOV r0,#0
00064c e51f145c LDR r1,|L1.504|
000650 e581000c STR r0,[r1,#0xc]
;;;229 rSPCON0=(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//Polling,en-SCK,master,low,A,normal
000654 e3a0001c MOV r0,#0x1c
000658 e1c11000 BIC r1,r1,r0
00065c e5810000 STR r0,[r1,#0]
;;;230 rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
000660 e3a00002 MOV r0,#2
000664 e1c11000 BIC r1,r1,r0
000668 e5810008 STR r0,[r1,#8]
;;;231
;;;232 while(end0SpiTx==0)
00066c e1a00000 NOP
|L1.1648|
000670 e51f0474 LDR r0,|L1.516|
000674 e5900000 LDR r0,[r0,#0] ; end0SpiTx
000678 e3500000 CMP r0,#0
00067c 1a000022 BNE |L1.1804|
;;;233 {
;;;234 if(rSPSTA0&0x1) //Check Tx ready state
000680 e51f0490 LDR r0,|L1.504|
000684 e5900004 LDR r0,[r0,#4]
000688 e3100001 TST r0,#1
00068c 0a00001d BEQ |L1.1800|
;;;235 {
;;;236 if(*spi0TxStr!='\0')
000690 e51f0498 LDR r0,|L1.512|
000694 e5900000 LDR r0,[r0,#0] ; spi0TxStr
000698 e5d00000 LDRB r0,[r0,#0]
00069c e3500000 CMP r0,#0
0006a0 0a000008 BEQ |L1.1736|
;;;237 rSPTDAT0=*spi0TxStr++;
0006a4 e51f04ac LDR r0,|L1.512|
0006a8 e5901000 LDR r1,[r0,#0] ; spi0TxStr
0006ac e5d10000 LDRB r0,[r1,#0]
0006b0 e2811001 ADD r1,r1,#1
0006b4 e51f24bc LDR r2,|L1.512|
0006b8 e5821000 STR r1,[r2,#0] ; spi0TxStr
0006bc e51f14cc LDR r1,|L1.504|
0006c0 e5810010 STR r0,[r1,#0x10]
0006c4 ea000002 B |L1.1748|
;;;238 else
;;;239 end0SpiTx=1;
|L1.1736|
0006c8 e3a00001 MOV r0,#1
0006cc e51f14d0 LDR r1,|L1.516|
0006d0 e5810000 STR r0,[r1,#0] ; end0SpiTx
;;;240 while(!(rSPSTA0&0x1)); //Check Rx ready state
|L1.1748|
0006d4 e1a00000 NOP
|L1.1752|
0006d8 e51f04e8 LDR r0,|L1.504|
0006dc e5900004 LDR r0,[r0,#4]
0006e0 e3100001 TST r0,#1
0006e4 0afffffb BEQ |L1.1752|
;;;241 *spi0RxStr++=rSPRDAT0;
0006e8 e51f04f8 LDR r0,|L1.504|
0006ec e5901014 LDR r1,[r0,#0x14]
0006f0 e51f04fc LDR r0,|L1.508|
0006f4 e5900000 LDR r0,[r0,#0] ; spi0RxStr
0006f8 e5c01000 STRB r1,[r0,#0]
0006fc e2800001 ADD r0,r0,#1
000700 e51f150c LDR r1,|L1.508|
000704 e5810000 STR r0,[r1,#0] ; spi0RxStr
;;;242 }
;;;243 }
|L1.1800|
000708 eaffffd8 B |L1.1648|
;;;244
;;;245 rSPCON0=(0<<5)|(0<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//Polling,dis-SCK,master,low,A,normal
|L1.1804|
00070c e3a0000c MOV r0,#0xc
000710 e51f1520 LDR r1,|L1.504|
000714 e5810000 STR r0,[r1,#0]
;;;246 *(spi0RxStr-1)='\0';//remove last dummy data & attach End of String(Null)
000718 e3a00000 MOV r0,#0
00071c e51f1528 LDR r1,|L1.508|
000720 e5911000 LDR r1,[r1,#0] ; spi0RxStr
000724 e5410001 STRB r0,[r1,#-1]
;;;247
;;;248 Uart_Printf("Tx Strings:%s\n",txStr);
000728 e1a01004 MOV r1,r4
00072c e24f0f5c ADR r0,|L1.1476|
000730 ebfffffe BL _printf
;;;249 Uart_Printf("Rx Strings:%s :",rxStr);
000734 e1a01005 MOV r1,r5
000738 e24f0f5b ADR r0,|L1.1492|
00073c ebfffffe BL _printf
;;;250
;;;251 if(strcmp(rxStr,txStr)==0)
000740 e1a01004 MOV r1,r4
000744 e1a00005 MOV r0,r5
000748 ebfffffe BL strcmp
00074c e3500000 CMP r0,#0
000750 1a000002 BNE |L1.1888|
;;;252 Uart_Printf("O.K.\n");
000754 e24f0f5e ADR r0,|L1.1508|
000758 ebfffffe BL _printf
00075c ea000001 B |L1.1896|
;;;253 else
;;;254 Uart_Printf("ERROR!!!\n");
|L1.1888|
000760 e24f0f5f ADR r0,|L1.1516|
000764 ebfffffe BL _printf
;;;255 SPI0_Port_Return();
|L1.1896|
000768 ebfffffe BL SPI0_Port_Return
;;;256 }
00076c e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.1904|
000770 4950535b DCB "[SPI"
000774 6c6f5020 DCB " Pol"
000778 676e696c DCB "ling"
00077c 2f785420 DCB " Tx/"
000780 53207852 DCB "Rx S"
000784 2d666c65 DCB "elf-"
000788 74736554 DCB "Test"
00078c 00000a5d DCB "]\n\0\0"
|L1.1936|
000790 44434241 DCB "ABCD"
000794 48474645 DCB "EFGH"
000798 4c4b4a49 DCB "IJKL"
00079c 504f4e4d DCB "MNOP"
0007a0 54535251 DCB "QRST"
0007a4 58575655 DCB "UVWX"
0007a8 31305a59 DCB "YZ01"
0007ac 35343332 DCB "2345"
0007b0 39383736 DCB "6789"
0007b4 00000000 DCB "\0\0\0\0"
ENDP
Test_Spi01_MS_Int PROC
;;;259 void Test_Spi01_MS_Int(void)
;;;260 {
0007b8 e92d40f8 STMFD sp!,{r3-r7,lr}
;;;261 char *rx0Str,*tx0Str;
;;;262 char *rx1Str,*tx1Str;
;;;263 SPI0_Port_Init(1); // SPI0=Master, SPI1=Slave
0007bc e3a00001 MOV r0,#1
0007c0 ebfffffe BL SPI0_Port_Init
;;;264 Uart_Printf("[SPI0(Master), SPI1(Slave) Interrupt Rx/Tx test]\n");
0007c4 e28f0f57 ADR r0,|L1.2344|
0007c8 ebfffffe BL _printf
;;;265 Uart_Printf("Connect J37: (1-2) and CON21: (1-20),(2-19),(3-18),(4-17)\n");
0007cc e28f0f62 ADR r0,|L1.2396|
0007d0 ebfffffe BL _printf
;;;266
;;;267 pISR_SPI0=(unsigned)Spi0_Int;
0007d4 e51f0248 LDR r0,|L1.1428|
0007d8 e51f1248 LDR r1,|L1.1432|
0007dc e5810f78 STR r0,[r1,#0xf78]
;;;268 pISR_VLX_SPI1=(unsigned)Spi1_Int;
0007e0 e59f01b0 LDR r0,|L1.2456|
0007e4 e5810f94 STR r0,[r1,#0xf94]
;;;269
;;;270 end0SpiTx=0;
0007e8 e3a00000 MOV r0,#0
0007ec e51f15f0 LDR r1,|L1.516|
0007f0 e5810000 STR r0,[r1,#0] ; end0SpiTx
;;;271 endSpi1Tx=0;
0007f4 e3a00000 MOV r0,#0
0007f8 e51f12d0 LDR r1,|L1.1328|
0007fc e5810000 STR r0,[r1,#0] ; endSpi1Tx
;;;272 spi0TxStr="1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
000800 e28f0f65 ADR r0,|L1.2460|
000804 e51f160c LDR r1,|L1.512|
000808 e5810000 STR r0,[r1,#0] ; spi0TxStr
;;;273 //spi0TxStr="1234567890";
;;;274 spi1TxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890";
00080c e28f0f6e ADR r0,|L1.2508|
000810 e51f12ec LDR r1,|L1.1324|
000814 e5810000 STR r0,[r1,#0] ; spi1TxStr
;;;275 //spi1TxStr="ABCDEFGHIJ";
;;;276 spi0RxStr=(char *) SPI_BUFFER0;
000818 e3a00544 MOV r0,#0x11000000
00081c e51f1628 LDR r1,|L1.508|
000820 e5810000 STR r0,[r1,#0] ; spi0RxStr
;;;277 spi1RxStr=(char *) SPI_BUFFER1;
000824 e2800d40 ADD r0,r0,#0x1000
000828 e51f1308 LDR r1,|L1.1320|
00082c e5810000 STR r0,[r1,#0] ; spi1RxStr
;;;278
;;;279 tx0Str=(char *)spi0TxStr;
000830 e51f0638 LDR r0,|L1.512|
000834 e5906000 LDR r6,[r0,#0] ; spi0TxStr
;;;280 rx0Str=(char *)spi0RxStr;
000838 e51f0644 LDR r0,|L1.508|
00083c e5904000 LDR r4,[r0,#0] ; spi0RxStr
;;;281 tx1Str=(char *)spi1TxStr;
000840 e51f031c LDR r0,|L1.1324|
000844 e5907000 LDR r7,[r0,#0] ; spi1TxStr
;;;282 rx1Str=(char *)spi1RxStr;
000848 e51f0328 LDR r0,|L1.1320|
00084c e5905000 LDR r5,[r0,#0] ; spi1RxStr
;;;283
;;;284 rSPPRE1=0xff; //if PCLK=50Mhz,SPICLK=12.5Mhz
000850 e3a000ff MOV r0,#0xff
000854 e51f1664 LDR r1,|L1.504|
000858 e581002c STR r0,[r1,#0x2c]
;;;285 rSPPIN1=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
00085c e3a00002 MOV r0,#2
000860 e1c11000 BIC r1,r1,r0
000864 e5810028 STR r0,[r1,#0x28]
;;;286
;;;287 #if FORMAT1_A
;;;288 rSPCON1=(1<<5)|(0<<4)|(0<<3)|(1<<2)|(0<<1)|(0<<0);//SPI1 :int,dis-SCK,slave,low,A,normal
000868 e3a00024 MOV r0,#0x24
00086c e1c11000 BIC r1,r1,r0
000870 e5810020 STR r0,[r1,#0x20]
;;;289 #else
;;;290 rSPCON1=(1<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1)|(0<<0);//SPI1 :int,dis-SCK,slave,low,B,normal
;;;291 #endif
;;;292
;;;293 Uart_Printf("Slave setting end...Press enter\n");
000874 e28f0f60 ADR r0,|L1.2556|
000878 ebfffffe BL _printf
;;;294 Uart_Getch();
00087c ebfffffe BL Uart_Getch
;;;295
;;;296 rSPPRE0=0xff; //if PCLK=50Mhz,SPICLK=12.5Mhz
000880 e3a000ff MOV r0,#0xff
000884 e51f1694 LDR r1,|L1.504|
000888 e581000c STR r0,[r1,#0xc]
;;;297 rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
00088c e3a00002 MOV r0,#2
000890 e1c11000 BIC r1,r1,r0
000894 e5810008 STR r0,[r1,#8]
;;;298 #if FORMAT0_A
;;;299 rSPCON0=(1<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//SPI0 :int,en-SCK,master,low,A,normal
000898 e3a0003c MOV r0,#0x3c
00089c e1c11000 BIC r1,r1,r0
0008a0 e5810000 STR r0,[r1,#0]
;;;300 #else
;;;301 rSPCON0=(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(0<<0);//SPI0 :int,en-SCK,master,low,B,normal
;;;302 #endif
;;;303
;;;304 //Master_nSS_Con(0); // Activate nSS
;;;305 Uart_Printf("nSS is asserted\n");
0008a4 e28f0f5d ADR r0,|L1.2592|
0008a8 ebfffffe BL _printf
;;;306 rGPDAT&=~(1<<8);
0008ac e51f0380 LDR r0,|L1.1332|
0008b0 e590000c LDR r0,[r0,#0xc]
0008b4 e3c00f40 BIC r0,r0,#0x100
0008b8 e51f138c LDR r1,|L1.1332|
0008bc e581000c STR r0,[r1,#0xc]
;;;307 rINTMSK&=~(BIT_VLX_SPI1);
0008c0 e2410646 SUB r0,r1,#0x4600000
0008c4 e5900008 LDR r0,[r0,#8]
0008c8 e3c00580 BIC r0,r0,#0x20000000
0008cc e2411646 SUB r1,r1,#0x4600000
0008d0 e5810008 STR r0,[r1,#8]
;;;308 rINTSUBMSK&=~(BIT_SUB_SPI1);
0008d4 e1a00001 MOV r0,r1
0008d8 e590001c LDR r0,[r0,#0x1c]
0008dc e3c00880 BIC r0,r0,#0x800000
0008e0 e581001c STR r0,[r1,#0x1c]
;;;309 rINTMSK&=~(BIT_SPI0);
0008e4 e1a00001 MOV r0,r1
0008e8 e5900008 LDR r0,[r0,#8]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -