📄 spi.txt
字号:
00095c e3a00459 MOV r0,#0x59000000
000960 e5901014 LDR r1,[r0,#0x14]
000964 e51f0410 LDR r0,|L1.1372|
000968 e5900000 LDR r0,[r0,#0] ; spiRxStr
00096c e5c01000 STRB r1,[r0,#0]
000970 e2800001 ADD r0,r0,#1
000974 e51f1420 LDR r1,|L1.1372|
000978 e5810000 STR r0,[r1,#0] ; spiRxStr
;;;288 }
;;;289 }
|L1.2428|
00097c eaffffd8 B |L1.2276|
;;;290
;;;291 rSPCON0&=~(1<<4);//dis-SCK
|L1.2432|
000980 e3a00459 MOV r0,#0x59000000
000984 e5900000 LDR r0,[r0,#0]
000988 e3c00010 BIC r0,r0,#0x10
00098c e3a01459 MOV r1,#0x59000000
000990 e5810000 STR r0,[r1,#0]
;;;292 *(spiRxStr-1)='\0';//remove last dummy data & attach End of String(Null)
000994 e3a00000 MOV r0,#0
000998 e51f1444 LDR r1,|L1.1372|
00099c e5911000 LDR r1,[r1,#0] ; spiRxStr
0009a0 e5410001 STRB r0,[r1,#-1]
;;;293
;;;294 Uart_Printf("Tx Strings:%s\n",txStr);
0009a4 e1a01004 MOV r1,r4
0009a8 e59f0064 LDR r0,|L1.2580|
0009ac ebfffffe BL Uart_Printf
;;;295 Uart_Printf("Rx Strings:%s :",rxStr);
0009b0 e1a01005 MOV r1,r5
0009b4 e59f005c LDR r0,|L1.2584|
0009b8 ebfffffe BL Uart_Printf
;;;296
;;;297 if(strcmp(rxStr,txStr)==0)
0009bc e1a01004 MOV r1,r4
0009c0 e1a00005 MOV r0,r5
0009c4 ebfffffe BL strcmp
0009c8 e3500000 CMP r0,#0
0009cc 1a000002 BNE |L1.2524|
;;;298 Uart_Printf("O.K.\n");
0009d0 e28f0044 ADR r0,|L1.2588|
0009d4 ebfffffe BL Uart_Printf
0009d8 ea000001 B |L1.2532|
;;;299 else
;;;300 Uart_Printf("ERROR!!!\n");
|L1.2524|
0009dc e59f0040 LDR r0,|L1.2596|
0009e0 ebfffffe BL Uart_Printf
;;;301 SPI_Port_Return();
|L1.2532|
0009e4 ebfffffe BL SPI_Port_Return
;;;302 }
0009e8 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.2540|
0009ec 44434241 DCB "ABCD"
0009f0 48474645 DCB "EFGH"
0009f4 4c4b4a49 DCB "IJKL"
0009f8 504f4e4d DCB "MNOP"
0009fc 54535251 DCB "QRST"
000a00 58575655 DCB "UVWX"
000a04 31305a59 DCB "YZ01"
000a08 35343332 DCB "2345"
000a0c 39383736 DCB "6789"
000a10 00000000 DCB "\0\0\0\0"
|L1.2580|
000a14 00000000 DCD |L1.1376|
|L1.2584|
000a18 00000000 DCD |L1.1392|
|L1.2588|
000a1c 2e4b2e4f DCB "O.K."
000a20 0000000a DCB "\n\0\0\0"
|L1.2596|
000a24 00000000 DCD |L1.1416|
ENDP
Dma1Tx_Int PROC
;;;354 void __irq Dma1Tx_Int(void)
;;;355 {
000a28 e92d0003 STMFD sp!,{r0,r1}
;;;356 tx_dma1Done=1;
000a2c e3a00001 MOV r0,#1
000a30 e59f119c LDR r1,|L1.3028|
000a34 e5810000 STR r0,[r1,#0] ; tx_dma1Done
;;;357 rINTMSK|=BIT_DMA1;
000a38 e3a0044a MOV r0,#0x4a000000
000a3c e5900008 LDR r0,[r0,#8]
000a40 e3800a40 ORR r0,r0,#0x40000
000a44 e3a0144a MOV r1,#0x4a000000
000a48 e5810008 STR r0,[r1,#8]
;;;358 ClearPending(BIT_DMA1);
000a4c e3a00a40 MOV r0,#0x40000
000a50 e3a0144a MOV r1,#0x4a000000
000a54 e5810000 STR r0,[r1,#0]
000a58 e3a00a40 MOV r0,#0x40000
000a5c e3a0144a MOV r1,#0x4a000000
000a60 e5810010 STR r0,[r1,#0x10]
000a64 e3a0044a MOV r0,#0x4a000000
000a68 e5900010 LDR r0,[r0,#0x10]
;;;359 }
000a6c e8bd0003 LDMFD sp!,{r0,r1}
000a70 e25ef004 SUBS pc,lr,#4
ENDP
Test_Spi_M_Tx_DMA1 PROC
;;;305 void Test_Spi_M_Tx_DMA1(void)
;;;306 {
000a74 e92d4038 STMFD sp!,{r3-r5,lr}
;;;307
;;;308 int i,first,second;
;;;309 unsigned char *tx_ptr;
;;;310 SPI_Port_Init(1); // Master(GPIO)
000a78 e3a00001 MOV r0,#1
000a7c ebfffffe BL SPI_Port_Init
;;;311 Uart_Printf("[SPI DMA1 Master Tx test]\n");
000a80 e28f0f54 ADR r0,|L1.3032|
000a84 ebfffffe BL Uart_Printf
;;;312 Uart_Printf("This test should be configured two boards\nStart Rx first.\n");
000a88 e28f0f59 ADR r0,|L1.3060|
000a8c ebfffffe BL Uart_Printf
;;;313
;;;314 tx_ptr=(unsigned char *) SPI_BUFFER;
000a90 e3a055c4 MOV r5,#0x31000000
;;;315 for(i=0; i<spi_count; i++)
000a94 e3a04000 MOV r4,#0
|L1.2712|
000a98 e3540080 CMP r4,#0x80
000a9c aa000004 BGE |L1.2740|
000aa0 ea000001 B |L1.2732|
|L1.2724|
000aa4 e2844001 ADD r4,r4,#1
000aa8 eafffffa B |L1.2712|
;;;316 *(tx_ptr+i)=i;
|L1.2732|
000aac e7c54004 STRB r4,[r5,r4]
000ab0 eafffffb B |L1.2724|
;;;317
;;;318 tx_dma1Done=0;
|L1.2740|
000ab4 e3a00000 MOV r0,#0
000ab8 e59f1114 LDR r1,|L1.3028|
000abc e5810000 STR r0,[r1,#0] ; tx_dma1Done
;;;319
;;;320 pISR_DMA1 = (unsigned)Dma1Tx_Int;
000ac0 e59f0168 LDR r0,|L1.3120|
000ac4 e51f12a8 LDR r1,|L1.2084|
000ac8 e5810f68 STR r0,[r1,#0xf68]
;;;321 rINTMSK=~(BIT_DMA1);
000acc e3e00a40 MVN r0,#0x40000
000ad0 e3a0144a MOV r1,#0x4a000000
000ad4 e5810008 STR r0,[r1,#8]
;;;322
;;;323 //Step1. SPI init
;;;324 rSPPRE0=0x0; //if PCLK=50Mhz,SPICLK=25Mhz
000ad8 e3a00000 MOV r0,#0
000adc e3a01459 MOV r1,#0x59000000
000ae0 e581000c STR r0,[r1,#0xc]
;;;325 rSPCON0=(2<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//DMA1,en-SCK,master,low,A,normal
000ae4 e3a0005c MOV r0,#0x5c
000ae8 e3a01459 MOV r1,#0x59000000
000aec e5810000 STR r0,[r1,#0]
;;;326 // rSPCON0=(2<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(0<<0);//DMA1,en-SCK,master,low,B,normal
;;;327 rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
000af0 e3a00002 MOV r0,#2
000af4 e3a01459 MOV r1,#0x59000000
000af8 e5810008 STR r0,[r1,#8]
;;;328
;;;329 //Step2. DMA1 init
;;;330 rDISRC1=(unsigned)tx_ptr; //Address of Memory
000afc e3a0044b MOV r0,#0x4b000000
000b00 e5805040 STR r5,[r0,#0x40]
;;;331 rDISRCC1=(0<<1)|(0); //AHB(Memory), inc
000b04 e3a00000 MOV r0,#0
000b08 e3a0144b MOV r1,#0x4b000000
000b0c e5810044 STR r0,[r1,#0x44]
;;;332 rDIDST1=(unsigned)0x59000010;//Address of SPTDAT Register
000b10 e59f011c LDR r0,|L1.3124|
000b14 e3a0144b MOV r1,#0x4b000000
000b18 e5810048 STR r0,[r1,#0x48]
;;;333 rDIDSTC1=(1<<1)|(1); //APB(SPI), fix
000b1c e3a00003 MOV r0,#3
000b20 e3a0144b MOV r1,#0x4b000000
000b24 e581004c STR r0,[r1,#0x4c]
;;;334 rDCON1=(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(3<<24)|(1<<23)|(1<<22)|(0<<20)|(spi_count);
000b28 e59f0108 LDR r0,|L1.3128|
000b2c e3a0144b MOV r1,#0x4b000000
000b30 e5810050 STR r0,[r1,#0x50]
;;;335 //handshake, sync PCLK, TC int, single tx, single service, SPI, H/W request,
;;;336 //off-reload, byte, 128Bytes
;;;337
;;;338 rGPGDAT&=0xfffffffb; // Activate nSS
000b34 e3a00456 MOV r0,#0x56000000
000b38 e5900064 LDR r0,[r0,#0x64]
000b3c e3c00004 BIC r0,r0,#4
000b40 e3a01456 MOV r1,#0x56000000
000b44 e5810064 STR r0,[r1,#0x64]
;;;339 rDMASKTRIG1=(0<<2)|(1<<1)|(0); //run, DMA1 channel on, no-sw trigger
000b48 e3a00002 MOV r0,#2
000b4c e3a0144b MOV r1,#0x4b000000
000b50 e5810060 STR r0,[r1,#0x60]
;;;340
;;;341 while(tx_dma1Done==0);
000b54 e1a00000 NOP
|L1.2904|
000b58 e59f0074 LDR r0,|L1.3028|
000b5c e5900000 LDR r0,[r0,#0] ; tx_dma1Done
000b60 e3500000 CMP r0,#0
000b64 0afffffb BEQ |L1.2904|
;;;342
;;;343 while(!(rSPSTA0&0x1)); // Tx is done
000b68 e1a00000 NOP
|L1.2924|
000b6c e3a00459 MOV r0,#0x59000000
000b70 e5900004 LDR r0,[r0,#4]
000b74 e3100001 TST r0,#1
000b78 0afffffb BEQ |L1.2924|
;;;344
;;;345 rGPGDAT|=0x4; // Deactivate nSS
000b7c e3a00456 MOV r0,#0x56000000
000b80 e5900064 LDR r0,[r0,#0x64]
000b84 e3800004 ORR r0,r0,#4
000b88 e3a01456 MOV r1,#0x56000000
000b8c e5810064 STR r0,[r1,#0x64]
;;;346 // rSPCON0=(0<<5)|(0<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//poll,dis-SCK,master,low,A,normal
;;;347 rSPCON0=(0<<5)|(0<<4)|(1<<3)|(1<<2)|(1<<1)|(0<<0);//poll,dis-SCK,master,low,B,normal
000b90 e3a0000e MOV r0,#0xe
000b94 e3a01459 MOV r1,#0x59000000
000b98 e5810000 STR r0,[r1,#0]
;;;348 Uart_Printf("\nDMA1 transfer end\n");
000b9c e28f0098 ADR r0,|L1.3132|
000ba0 ebfffffe BL Uart_Printf
;;;349 for(i=0; i<spi_count; i++)
000ba4 e3a04000 MOV r4,#0
|L1.2984|
000ba8 e3540080 CMP r4,#0x80
000bac aa000006 BGE |L1.3020|
000bb0 ea000001 B |L1.3004|
|L1.2996|
000bb4 e2844001 ADD r4,r4,#1
000bb8 eafffffa B |L1.2984|
;;;350 Uart_Printf("0x%02x,",*tx_ptr++);
|L1.3004|
000bbc e4d51001 LDRB r1,[r5],#1
000bc0 e28f0088 ADR r0,|L1.3152|
000bc4 ebfffffe BL Uart_Printf
000bc8 eafffff9 B |L1.2996|
;;;351 SPI_Port_Return();
|L1.3020|
000bcc ebfffffe BL SPI_Port_Return
;;;352 }
000bd0 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.3028|
000bd4 0000000c DCD ||.bss$2|| + 12
|L1.3032|
000bd8 4950535b DCB "[SPI"
000bdc 414d4420 DCB " DMA"
000be0 614d2031 DCB "1 Ma"
000be4 72657473 DCB "ster"
000be8 20785420 DCB " Tx "
000bec 74736574 DCB "test"
000bf0 00000a5d DCB "]\n\0\0"
|L1.3060|
000bf4 73696854 DCB "This"
000bf8 73657420 DCB " tes"
000bfc 68732074 DCB "t sh"
000c00 646c756f DCB "ould"
000c04 20656220 DCB " be "
000c08 666e6f63 DCB "conf"
000c0c 72756769 DCB "igur"
000c10 74206465 DCB "ed t"
000c14 62206f77 DCB "wo b"
000c18 6472616f DCB "oard"
000c1c 74530a73 DCB "s\nSt"
000c20 20747261 DCB "art "
000c24 66207852 DCB "Rx f"
000c28 74737269 DCB "irst"
000c2c 00000a2e DCB ".\n\0\0"
|L1.3120|
000c30 00000000 DCD Dma1Tx_Int
|L1.3124|
000c34 59000010 DCD 0x59000010
|L1.3128|
000c38 a3c00080 DCD 0xa3c00080
|L1.3132|
000c3c 414d440a DCB "\nDMA"
000c40 72742031 DCB "1 tr"
000c44 66736e61 DCB "ansf"
000c48 65207265 DCB "er e"
000c4c 000a646e DCB "nd\n\0"
|L1.3152|
000c50 30257830 DCB "0x%0"
000c54 002c7832 DCB "2x,\0"
ENDP
Dma1Rx_Int PROC
;;;407 void __irq Dma1Rx_Int(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -