📄 spi.txt
字号:
;;;408 {
000c58 e92d0003 STMFD sp!,{r0,r1}
;;;409 rx_dma1Done=1;
000c5c e3a00001 MOV r0,#1
000c60 e59f1188 LDR r1,|L1.3568|
000c64 e5810000 STR r0,[r1,#0] ; rx_dma1Done
;;;410 rINTMSK|=BIT_DMA1;
000c68 e3a0044a MOV r0,#0x4a000000
000c6c e5900008 LDR r0,[r0,#8]
000c70 e3800a40 ORR r0,r0,#0x40000
000c74 e3a0144a MOV r1,#0x4a000000
000c78 e5810008 STR r0,[r1,#8]
;;;411 ClearPending(BIT_DMA1);
000c7c e3a00a40 MOV r0,#0x40000
000c80 e3a0144a MOV r1,#0x4a000000
000c84 e5810000 STR r0,[r1,#0]
000c88 e3a00a40 MOV r0,#0x40000
000c8c e3a0144a MOV r1,#0x4a000000
000c90 e5810010 STR r0,[r1,#0x10]
000c94 e3a0044a MOV r0,#0x4a000000
000c98 e5900010 LDR r0,[r0,#0x10]
;;;412 }
000c9c e8bd0003 LDMFD sp!,{r0,r1}
000ca0 e25ef004 SUBS pc,lr,#4
ENDP
Test_Spi_S_Rx_DMA1 PROC
;;;362 void Test_Spi_S_Rx_DMA1(void)
;;;363 {
000ca4 e92d4038 STMFD sp!,{r3-r5,lr}
;;;364 int i;
;;;365 unsigned char *rx_ptr;
;;;366 SPI_Port_Init(0); // Slave(nSS)
000ca8 e3a00000 MOV r0,#0
000cac ebfffffe BL SPI_Port_Init
;;;367 Uart_Printf("[SPI DMA1 Slave Rx Test]\n");
000cb0 e28f0f4f ADR r0,|L1.3572|
000cb4 ebfffffe BL Uart_Printf
;;;368 Uart_Printf("This test should be configured two boards\nStart Rx first.\n");
000cb8 e24f00cc ADR r0,|L1.3060|
000cbc ebfffffe BL Uart_Printf
;;;369 rx_ptr=(unsigned char *) SPI_BUFFER;
000cc0 e3a055c4 MOV r5,#0x31000000
;;;370 for(i=0;i<0x500;i++)
000cc4 e3a04000 MOV r4,#0
|L1.3272|
000cc8 e3540e50 CMP r4,#0x500
000ccc aa000005 BGE |L1.3304|
000cd0 ea000001 B |L1.3292|
|L1.3284|
000cd4 e2844001 ADD r4,r4,#1
000cd8 eafffffa B |L1.3272|
;;;371 *(rx_ptr+i)=0x0; // Zero Initialize
|L1.3292|
000cdc e3a00000 MOV r0,#0
000ce0 e7c50004 STRB r0,[r5,r4]
000ce4 eafffffa B |L1.3284|
;;;372 rx_dma1Done=0;
|L1.3304|
000ce8 e3a00000 MOV r0,#0
000cec e59f10fc LDR r1,|L1.3568|
000cf0 e5810000 STR r0,[r1,#0] ; rx_dma1Done
;;;373
;;;374 pISR_DMA1 = (unsigned)Dma1Rx_Int;
000cf4 e59f0114 LDR r0,|L1.3600|
000cf8 e51f14dc LDR r1,|L1.2084|
000cfc e5810f68 STR r0,[r1,#0xf68]
;;;375 rINTMSK=~(BIT_DMA1);
000d00 e3e00a40 MVN r0,#0x40000
000d04 e3a0144a MOV r1,#0x4a000000
000d08 e5810008 STR r0,[r1,#8]
;;;376
;;;377 //Step1. SPI init
;;;378 rSPPRE0=0x0; //if PCLK=50Mhz,SPICLK=25Mhz
000d0c e3a00000 MOV r0,#0
000d10 e3a01459 MOV r1,#0x59000000
000d14 e581000c STR r0,[r1,#0xc]
;;;379 rSPCON0=(2<<5)|(0<<4)|(0<<3)|(1<<2)|(0<<1)|(1<<0);//DMA1,dis-SCK,slave,low,A,TAGD
000d18 e3a00045 MOV r0,#0x45
000d1c e3a01459 MOV r1,#0x59000000
000d20 e5810000 STR r0,[r1,#0]
;;;380 // rSPCON0=(2<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1)|(1<<0);//DMA1,dis-SCK,slave,low,B,TAGD
;;;381 //When you use [Slave Rx with DMA] function you should have to set TAGD bit
;;;382 rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
000d24 e3a00002 MOV r0,#2
000d28 e3a01459 MOV r1,#0x59000000
000d2c e5810008 STR r0,[r1,#8]
;;;383
;;;384 //Step2. DMA1 init
;;;385 rDISRC1=(unsigned)0x59000014;//Address of SPRDAT Register
000d30 e2810014 ADD r0,r1,#0x14
000d34 e3a0144b MOV r1,#0x4b000000
000d38 e5810040 STR r0,[r1,#0x40]
;;;386 rDISRCC1=(1<<1)|(1); //APB(SPI), fix
000d3c e3a00003 MOV r0,#3
000d40 e3a0144b MOV r1,#0x4b000000
000d44 e5810044 STR r0,[r1,#0x44]
;;;387 rDIDST1=(unsigned)rx_ptr; //Address of Memory
000d48 e3a0044b MOV r0,#0x4b000000
000d4c e5805048 STR r5,[r0,#0x48]
;;;388 rDIDSTC1=(0<<1)|(0); //AHB(Memory), inc
000d50 e3a00000 MOV r0,#0
000d54 e3a0144b MOV r1,#0x4b000000
000d58 e581004c STR r0,[r1,#0x4c]
;;;389 rDCON1=(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(3<<24)|(1<<23)|(1<<22)|(0<<20)|(spi_count);
000d5c e51f012c LDR r0,|L1.3128|
000d60 e3a0144b MOV r1,#0x4b000000
000d64 e5810050 STR r0,[r1,#0x50]
;;;390 //handshake, sync PCLK, TC int, single tx, single service, SPI, H/W request,
;;;391 //off-reload, byte, 128Bytes
;;;392
;;;393 rDMASKTRIG1=(0<<2)|(1<<1)|(0); //run, DMA1 channel on, no-sw trigger
000d68 e3a00002 MOV r0,#2
000d6c e3a0144b MOV r1,#0x4b000000
000d70 e5810060 STR r0,[r1,#0x60]
;;;394
;;;395 while(rx_dma1Done==0);
000d74 e1a00000 NOP
|L1.3448|
000d78 e59f0070 LDR r0,|L1.3568|
000d7c e5900000 LDR r0,[r0,#0] ; rx_dma1Done
000d80 e3500000 CMP r0,#0
000d84 0afffffb BEQ |L1.3448|
;;;396
;;;397 rSPCON0=(0<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1)|(0<<0);//poll,dis-SCK,slave,low,B,normal
000d88 e3a00006 MOV r0,#6
000d8c e3a01459 MOV r1,#0x59000000
000d90 e5810000 STR r0,[r1,#0]
;;;398 while(!rSPSTA0&0x1);
000d94 e1a00000 NOP
|L1.3480|
000d98 e3a00459 MOV r0,#0x59000000
000d9c e5900004 LDR r0,[r0,#4]
000da0 e3500000 CMP r0,#0
000da4 0afffffb BEQ |L1.3480|
;;;399 *(rx_ptr+spi_count)=rSPRDAT0;
000da8 e3a00459 MOV r0,#0x59000000
000dac e5900014 LDR r0,[r0,#0x14]
000db0 e5c50080 STRB r0,[r5,#0x80]
;;;400 rx_ptr=(unsigned char *) SPI_BUFFER;
000db4 e3a055c4 MOV r5,#0x31000000
;;;401 for(i=1;i<(spi_count+1);i++)
000db8 e3a04001 MOV r4,#1
|L1.3516|
000dbc e3540081 CMP r4,#0x81
000dc0 aa000006 BGE |L1.3552|
000dc4 ea000001 B |L1.3536|
|L1.3528|
000dc8 e2844001 ADD r4,r4,#1
000dcc eafffffa B |L1.3516|
;;;402 Uart_Printf("0x%02x,",*(rx_ptr+i));
|L1.3536|
000dd0 e7d51004 LDRB r1,[r5,r4]
000dd4 e24f0f63 ADR r0,|L1.3152|
000dd8 ebfffffe BL Uart_Printf
000ddc eafffff9 B |L1.3528|
;;;403 Uart_Printf("\nDMA1 receive end");
|L1.3552|
000de0 e28f002c ADR r0,|L1.3604|
000de4 ebfffffe BL Uart_Printf
;;;404 SPI_Port_Return();
000de8 ebfffffe BL SPI_Port_Return
;;;405 }
000dec e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.3568|
000df0 00000010 DCD ||.bss$2|| + 16
|L1.3572|
000df4 4950535b DCB "[SPI"
000df8 414d4420 DCB " DMA"
000dfc 6c532031 DCB "1 Sl"
000e00 20657661 DCB "ave "
000e04 54207852 DCB "Rx T"
000e08 5d747365 DCB "est]"
000e0c 0000000a DCB "\n\0\0\0"
|L1.3600|
000e10 00000000 DCD Dma1Rx_Int
|L1.3604|
000e14 414d440a DCB "\nDMA"
000e18 65722031 DCB "1 re"
000e1c 76696563 DCB "ceiv"
000e20 6e652065 DCB "e en"
000e24 00000064 DCB "d\0\0\0"
ENDP
Test_Spi_M_Rx_DMA1 PROC
;;;415 void Test_Spi_M_Rx_DMA1(void)
;;;416 {
000e28 e92d4038 STMFD sp!,{r3-r5,lr}
;;;417 int i;
;;;418 unsigned char *rx_ptr;
;;;419 SPI_Port_Init(1); // Master(GPIO)
000e2c e3a00001 MOV r0,#1
000e30 ebfffffe BL SPI_Port_Init
;;;420 Uart_Printf("[SPI DMA1 Master Rx Test]\n");
000e34 e28f0f58 ADR r0,|L1.3996|
000e38 ebfffffe BL Uart_Printf
;;;421 Uart_Printf("This test should be configured two boards\nStart Tx first.\n");
000e3c e28f0f5d ADR r0,|L1.4024|
000e40 ebfffffe BL Uart_Printf
;;;422
;;;423 rx_ptr=(unsigned char *)SPI_BUFFER;
000e44 e3a055c4 MOV r5,#0x31000000
;;;424 for(i=0;i<0x500;i++)
000e48 e3a04000 MOV r4,#0
|L1.3660|
000e4c e3540e50 CMP r4,#0x500
000e50 aa000005 BGE |L1.3692|
000e54 ea000001 B |L1.3680|
|L1.3672|
000e58 e2844001 ADD r4,r4,#1
000e5c eafffffa B |L1.3660|
;;;425 *(rx_ptr+i)=0x0; // Zero Initialize
|L1.3680|
000e60 e3a00000 MOV r0,#0
000e64 e7c50004 STRB r0,[r5,r4]
000e68 eafffffa B |L1.3672|
;;;426 rx_dma1Done=0;
|L1.3692|
000e6c e3a00000 MOV r0,#0
000e70 e51f1088 LDR r1,|L1.3568|
000e74 e5810000 STR r0,[r1,#0] ; rx_dma1Done
;;;427
;;;428 pISR_DMA1 = (unsigned)Dma1Rx_Int;
000e78 e51f0070 LDR r0,|L1.3600|
000e7c e51f1660 LDR r1,|L1.2084|
000e80 e5810f68 STR r0,[r1,#0xf68]
;;;429 rINTMSK=~(BIT_DMA1);
000e84 e3e00a40 MVN r0,#0x40000
000e88 e3a0144a MOV r1,#0x4a000000
000e8c e5810008 STR r0,[r1,#8]
;;;430 //Step1. SPI init
;;;431
;;;432 rSPPRE0=0x1; //if PCLK=50Mhz,SPICLK=25Mhz
000e90 e3a00001 MOV r0,#1
000e94 e3a01459 MOV r1,#0x59000000
000e98 e581000c STR r0,[r1,#0xc]
;;;433 // rSPCON0=(2<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(1<<0);//DMA1,en-SCK,master,low,A,TAGD
;;;434 rSPCON0=(2<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);//DMA1,en-SCK,master,low,B,TAGD
000e9c e3a0005f MOV r0,#0x5f
000ea0 e3a01459 MOV r1,#0x59000000
000ea4 e5810000 STR r0,[r1,#0]
;;;435 rGPGDAT&=0xfffffffb; // Activate nSS
000ea8 e3a00456 MOV r0,#0x56000000
000eac e5900064 LDR r0,[r0,#0x64]
000eb0 e3c00004 BIC r0,r0,#4
000eb4 e3a01456 MOV r1,#0x56000000
000eb8 e5810064 STR r0,[r1,#0x64]
;;;436 //When you use [Master Rx with DMA] function you should have to set TAGD bit
;;;437 rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
000ebc e3a00002 MOV r0,#2
000ec0 e3a01459 MOV r1,#0x59000000
000ec4 e5810008 STR r0,[r1,#8]
;;;438
;;;439
;;;440 //Step2. DMA1 init
;;;441 rDISRC1=(unsigned)0x59000014;//Address of SPRDAT Register
000ec8 e2810014 ADD r0,r1,#0x14
000ecc e3a0144b MOV r1,#0x4b000000
000ed0 e5810040 STR r0,[r1,#0x40]
;;;442 rDISRCC1=(1<<1)|(1); //APB(SPI), fix
000ed4 e3a00003 MOV r0,#3
000ed8 e3a0144b MOV r1,#0x4b000000
000edc e5810044 STR r0,[r1,#0x44]
;;;443 rDIDST1=(unsigned)rx_ptr; //Address of Memory
000ee0 e3a0044b MOV r0,#0x4b000000
000ee4 e5805048 STR r5,[r0,#0x48]
;;;444 rDIDSTC1=(0<<1)|(0); //AHB(Memory), inc
000ee8 e3a00000 MOV r0,#0
000eec e3a0144b MOV r1,#0x4b000000
000ef0 e581004c STR r0,[r1,#0x4c]
;;;445 rDCON1=(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(3<<24)|(1<<23)|(1<<22)|(0<<20)|(spi_count);
000ef4 e51f02c4 LDR r0,|L1.3128|
000ef8 e3a0144b MOV r1,#0x4b000000
000efc e5810050 STR r0,[r1,#0x50]
;;;446 //handshake, sync PCLK, TC int, single tx, single service, SPI, H/W request,
;;;447 //off-reload, byte, 128Bytes
;;;448 rDMASKTRIG1=(0<<2)|(1<<1)|(0); //run, DMA1 channel on, no-sw trigger
000f00 e3a00002 MOV r0,#2
000f04 e3a0144b MOV r1,#0x4b000000
000f08 e5810060 STR r0,[r1,#0x60]
;;;449
;;;450 while(rx_dma1Done==0);
000f0c e1a00000 NOP
|L1.3856|
000f10 e51f0128 LDR r0,|L1.3568|
000f14 e5900000 LDR r0,[r0,#0] ; rx_dma1Done
000f18 e3500000 CMP r0,#0
000f1c 0afffffb BEQ |L1.3856|
;;;451
;;;452 rSPCON0=(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//poll,dis-SCK,master,low,A,normal
000f20 e3a0001c MOV r0,#0x1c
000f24 e3a01459 MOV r1,#0x59000000
000f28 e5810000 STR r0,[r1,#0]
;;;453 // rSPCON0=(0<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(0<<0);//poll,dis-SCK,master,low,B,normal
;;;454
;;;455 while(!rSPSTA0&0x1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -