⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;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 + -