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

📄 sdi.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                  |L1.2720|
000aa0  e2400001          SUB      r0,r0,#1
000aa4  eafffffa          B        |L1.2708|
;;;320    	{
;;;321    	    *Rx_buffer++=rSDIDAT;
                  |L1.2728|
000aa8  e3a0245a          MOV      r2,#0x5a000000
000aac  e5923040          LDR      r3,[r2,#0x40]
000ab0  e51f270c          LDR      r2,|L1.940|
000ab4  e5922000          LDR      r2,[r2,#0]  ; Rx_buffer
000ab8  e4823004          STR      r3,[r2],#4
000abc  e51f3718          LDR      r3,|L1.940|
000ac0  e5832000          STR      r2,[r3,#0]  ; Rx_buffer
;;;322    	    rd_cnt++;
000ac4  e59f23e4          LDR      r2,|L1.3760|
000ac8  e5922000          LDR      r2,[r2,#0]  ; rd_cnt
000acc  e2822001          ADD      r2,r2,#1
000ad0  e59f33d8          LDR      r3,|L1.3760|
000ad4  e5832000          STR      r2,[r3,#0]  ; rd_cnt
;;;323    	}
000ad8  eafffff0          B        |L1.2720|
;;;324    //	Uart_Printf("status1=0x%x\n", status);
;;;325    //	status=rSDIFSTA&0x200;	//If you do like this, rSDIFSTA register will not be updated., YH 040221
;;;326    	rSDIFSTA=rSDIFSTA&0x200;	//Clear Rx FIFO Last data Ready, YH 040221
                  |L1.2780|
000adc  e3a0245a          MOV      r2,#0x5a000000
000ae0  e5922038          LDR      r2,[r2,#0x38]
000ae4  e2022f80          AND      r2,r2,#0x200
000ae8  e3a0345a          MOV      r3,#0x5a000000
000aec  e5832038          STR      r2,[r3,#0x38]
000af0  ea000014          B        |L1.2888|
;;;327    //	Uart_Printf("rSDIFSTA=0x%x\n", rSDIFSTA);
;;;328        }
;;;329        else if( (status&0x80) == 0x80 )	// Check Half interrupt?
                  |L1.2804|
000af4  e3110080          TST      r1,#0x80
000af8  0a000012          BEQ      |L1.2888|
;;;330        {
;;;331            for(i=0;i<8;i++)
000afc  e3a00000          MOV      r0,#0
                  |L1.2816|
000b00  e3500008          CMP      r0,#8
000b04  2a00000f          BCS      |L1.2888|
000b08  ea000001          B        |L1.2836|
                  |L1.2828|
000b0c  e2800001          ADD      r0,r0,#1
000b10  eafffffa          B        |L1.2816|
;;;332            {
;;;333        	    *Rx_buffer++=rSDIDAT;
                  |L1.2836|
000b14  e3a0245a          MOV      r2,#0x5a000000
000b18  e5923040          LDR      r3,[r2,#0x40]
000b1c  e51f2778          LDR      r2,|L1.940|
000b20  e5922000          LDR      r2,[r2,#0]  ; Rx_buffer
000b24  e4823004          STR      r3,[r2],#4
000b28  e51f3784          LDR      r3,|L1.940|
000b2c  e5832000          STR      r2,[r3,#0]  ; Rx_buffer
;;;334    	    rd_cnt++;
000b30  e59f2378          LDR      r2,|L1.3760|
000b34  e5922000          LDR      r2,[r2,#0]  ; rd_cnt
000b38  e2822001          ADD      r2,r2,#1
000b3c  e59f336c          LDR      r3,|L1.3760|
000b40  e5832000          STR      r2,[r3,#0]  ; rd_cnt
;;;335    	}
000b44  eafffff0          B        |L1.2828|
;;;336        }
;;;337    //	Uart_Printf("rSDIFSTA=0x%x\n", rSDIFSTA);	//YH 040221
;;;338    
;;;339        ClearPending(BIT_SDI);
                  |L1.2888|
000b48  e3a02980          MOV      r2,#0x200000
000b4c  e3a0344a          MOV      r3,#0x4a000000
000b50  e5832000          STR      r2,[r3,#0]
000b54  e3a02980          MOV      r2,#0x200000
000b58  e3a0344a          MOV      r3,#0x4a000000
000b5c  e5832010          STR      r2,[r3,#0x10]
000b60  e3a0244a          MOV      r2,#0x4a000000
000b64  e5922010          LDR      r2,[r2,#0x10]
;;;340    }
000b68  e8bd000f          LDMFD    sp!,{r0-r3}
000b6c  e25ef004          SUBS     pc,lr,#4
                          ENDP

                  Rd_Block PROC
;;;364    void Rd_Block(void)
;;;365    {
000b70  e92d4038          STMFD    sp!,{r3-r5,lr}
;;;366        U32 mode;
;;;367        int status;
;;;368    
;;;369        rd_cnt=0;    
000b74  e3a00000          MOV      r0,#0
000b78  e59f1330          LDR      r1,|L1.3760|
000b7c  e5810000          STR      r0,[r1,#0]  ; rd_cnt
;;;370        Uart_Printf("[Block read test]\n");
000b80  e28f0fcb          ADR      r0,|L1.3764|
000b84  ebfffffe          BL       Uart_Printf
;;;371    
;;;372    RE0:
000b88  e1a00000          NOP      
;;;373        Uart_Printf("0:Polling read   1:Interrupt read   2:DMA read\nSelect the test mode?");
                  |L1.2956|
000b8c  e59f0334          LDR      r0,|L1.3784|
000b90  ebfffffe          BL       Uart_Printf
;;;374        mode=(U32)Uart_GetIntNum();
000b94  ebfffffe          BL       Uart_GetIntNum
000b98  e1a04000          MOV      r4,r0
;;;375    
;;;376    	Uart_Printf("\n");
000b9c  e24f0fac          ADR      r0,|L1.2292|
000ba0  ebfffffe          BL       Uart_Printf
;;;377    
;;;378        if(mode>2)
000ba4  e3540002          CMP      r4,#2
000ba8  9a000000          BLS      |L1.2992|
;;;379    	goto RE0;
000bac  eafffff6          B        |L1.2956|
;;;380    
;;;381    //    rSDICON = rSDICON|(1<<1);	// FIFO reset
;;;382    	rSDIFSTA=rSDIFSTA|(1<<16);	// FIFO reset
                  |L1.2992|
000bb0  e3a0045a          MOV      r0,#0x5a000000
000bb4  e5900038          LDR      r0,[r0,#0x38]
000bb8  e3800b40          ORR      r0,r0,#0x10000
000bbc  e3a0145a          MOV      r1,#0x5a000000
000bc0  e5810038          STR      r0,[r1,#0x38]
;;;383    
;;;384        if(mode!=2)
000bc4  e3540002          CMP      r4,#2
000bc8  0a000008          BEQ      |L1.3056|
;;;385    	rSDIDCON=(2<<22)|(1<<19)|(1<<17)|(Wide<<16)|(1<<14)|(2<<12)|(block<<0);	//YH 040220
000bcc  e51f0814          LDR      r0,|L1.960|
000bd0  e5900000          LDR      r0,[r0,#0]  ; block
000bd4  e59f12f0          LDR      r1,|L1.3788|
000bd8  e5911000          LDR      r1,[r1,#0]  ; Wide
000bdc  e1800801          ORR      r0,r0,r1,LSL #16
000be0  e3800880          ORR      r0,r0,#0x800000
000be4  e3800aa6          ORR      r0,r0,#0xa6000
000be8  e3a0145a          MOV      r1,#0x5a000000
000bec  e581002c          STR      r0,[r1,#0x2c]
;;;386    		//Word Rx, Rx after cmd, blk, 4bit bus, Rx start, blk num, data start, data transmit mode
;;;387    
;;;388        rSDICARG=0x0;	// CMD17/18(addr)
                  |L1.3056|
000bf0  e3a00000          MOV      r0,#0
000bf4  e3a0145a          MOV      r1,#0x5a000000
000bf8  e5810008          STR      r0,[r1,#8]
;;;389    
;;;390    RERDCMD:
000bfc  e1a00000          NOP      
;;;391        switch(mode)
                  |L1.3072|
000c00  e3540000          CMP      r4,#0
000c04  0a000004          BEQ      |L1.3100|
000c08  e3540001          CMP      r4,#1
000c0c  0a00003c          BEQ      |L1.3332|
000c10  e3540002          CMP      r4,#2
000c14  1a0000d0          BNE      |L1.3932|
000c18  ea00006b          B        |L1.3532|
;;;392        {
;;;393    	case POL:
;;;394    	    if(block<2)	// SINGLE_READ
                  |L1.3100|
000c1c  e51f0864          LDR      r0,|L1.960|
000c20  e5900000          LDR      r0,[r0,#0]  ; block
000c24  e3500002          CMP      r0,#2
000c28  2a000008          BCS      |L1.3152|
;;;395    	    {
;;;396    		rSDICCON=(0x1<<9)|(0x1<<8)|0x51;    // sht_resp, wait_resp, dat, start, CMD17
000c2c  e59f029c          LDR      r0,|L1.3792|
000c30  e3a0145a          MOV      r1,#0x5a000000
000c34  e581000c          STR      r0,[r1,#0xc]
;;;397    		if(!Chk_CMDend(17, 1))	//-- Check end of CMD17
000c38  e3a01001          MOV      r1,#1
000c3c  e3a00011          MOV      r0,#0x11
000c40  ebfffffe          BL       Chk_CMDend
000c44  e3500000          CMP      r0,#0
000c48  1a000009          BNE      |L1.3188|
;;;398    		    goto RERDCMD;	    
000c4c  eaffffeb          B        |L1.3072|
;;;399    	    }
;;;400    	    else	// MULTI_READ
;;;401    	    {
;;;402    		rSDICCON=(0x1<<9)|(0x1<<8)|0x52;    // sht_resp, wait_resp, dat, start, CMD18
                  |L1.3152|
000c50  e59f027c          LDR      r0,|L1.3796|
000c54  e3a0145a          MOV      r1,#0x5a000000
000c58  e581000c          STR      r0,[r1,#0xc]
;;;403    		if(!Chk_CMDend(18, 1))	//-- Check end of CMD18 
000c5c  e3a01001          MOV      r1,#1
000c60  e3a00012          MOV      r0,#0x12
000c64  ebfffffe          BL       Chk_CMDend
000c68  e3500000          CMP      r0,#0
000c6c  1a000000          BNE      |L1.3188|
;;;404    		    goto RERDCMD;
000c70  eaffffe2          B        |L1.3072|
;;;405    	    }
;;;406    
;;;407    	    rSDICSTA=0xa00;	// Clear cmd_end(with rsp)	    
                  |L1.3188|
000c74  e3a00ea0          MOV      r0,#0xa00
000c78  e3a0145a          MOV      r1,#0x5a000000
000c7c  e5810010          STR      r0,[r1,#0x10]
;;;408    
;;;409    	    while(rd_cnt<128*block)	// 512*block bytes
000c80  e1a00000          NOP      
                  |L1.3204|
000c84  e59f0224          LDR      r0,|L1.3760|
000c88  e5900000          LDR      r0,[r0,#0]  ; rd_cnt
000c8c  e51f18d4          LDR      r1,|L1.960|
000c90  e5911000          LDR      r1,[r1,#0]  ; block
000c94  e1500381          CMP      r0,r1,LSL #7
000c98  2a000018          BCS      |L1.3328|
;;;410    	    {
;;;411    		if((rSDIDSTA&0x20)==0x20) // Check timeout 
000c9c  e3a0045a          MOV      r0,#0x5a000000
000ca0  e5900034          LDR      r0,[r0,#0x34]
000ca4  e3100020          TST      r0,#0x20
000ca8  0a000003          BEQ      |L1.3260|
;;;412    		{
;;;413    		    rSDIDSTA=(0x1<<0x5);  // Clear timeout flag
000cac  e3a00020          MOV      r0,#0x20
000cb0  e3a0145a          MOV      r1,#0x5a000000
000cb4  e5810034          STR      r0,[r1,#0x34]
;;;414    		    break;
000cb8  ea000010          B        |L1.3328|
;;;415    		}
;;;416    		status=rSDIFSTA;
                  |L1.3260|
000cbc  e3a0045a          MOV      r0,#0x5a000000
000cc0  e5905038          LDR      r5,[r0,#0x38]
;;;417    		if((status&0x1000)==0x1000)	// Is Rx data?
000cc4  e3150d40          TST      r5,#0x1000
000cc8  0a00000b          BEQ      |L1.3324|
;;;418    		{
;;;419    		    *Rx_buffer++=rSDIDAT;
000ccc  e3a0045a          MOV      r0,#0x5a000000
000cd0  e5901040          LDR      r1,[r0,#0x40]
000cd4  e51f0930          LDR      r0,|L1.940|
000cd8  e5900000          LDR      r0,[r0,#0]  ; Rx_buffer
000cdc  e4801004          STR      r1,[r0],#4
000ce0  e51f193c          LDR      r1,|L1.940|
000ce4  e5810000          STR      r0,[r1,#0]  ; Rx_buffer
;;;420    		    rd_cnt++;
000ce8  e59f01c0          LDR      r0,|L1.3760|
000cec  e5900000          LDR      r0,[r0,#0]  ; rd_cnt
000cf0  e2800001          ADD      r0,r0,#1
000cf4  e59f11b4          LDR      r1,|L1.3760|
000cf8  e5810000          STR      r0,[r1,#0]  ; rd_cnt
;;;421    		}
;;;422    	    }
                  |L1.3324|
000cfc  eaffffe0          B        |L1.3204|
;;;423    	    break;
                  |L1.3328|
000d00  ea000096          B        |L1.3936|
;;;424    	
;;;425    	case INT:
;;;426    	    pISR_SDI=(unsigned)Rd_Int;
                  |L1.3332|
000d04  e59f01cc          LDR      r0,|L1.3800|
000d08  e59f11cc          LDR      r1,|L1.3804|
000d0c  e5810f74          STR      r0,[r1,#0xf74]
;;;427    	    rINTMSK = ~(BIT_SDI);
000d10  e3e00980          MVN      r0,#0x200000
000d14  e3a0144a          MOV      r1,#0x4a000000
000d18  e5810008          STR      r0,[r1,#8]
;;;428    	    
;;;429    	    rSDIIMSK=5;	// Last & Rx FIFO half int.
000d1c  e3a00005          MOV      r0,#5
000d20  e3a0145a          MOV      r1,#0x5a000000
000d24  e581003c          STR      r0,[r1,#0x3c]
;;;430    
;;;431    	    if(block<2)	// SINGLE_READ
000d28  e51f0970          LDR      r0,|L1.960|
000d2c  e5900000          LDR      r0,[r0,#0]  ; block
000d30  e3500002          CMP      r0,#2
000d34  2a000008          BCS      |L1.3420|
;;;432    	    {
;;;433    		rSDICCON=(0x1<<9)|(0x1<<8)|0x51;    // sht_resp, wait_resp, dat, start, CMD17
000d38  e59f0190          LDR      r0,|L1.3792|
000d3c  e3a0145a          MOV      r1,#0x5a000000
000d40  e581000c          STR      r0,[r1,#0xc]
;;;434    		if(!Chk_CMDend(17, 1))	//-- Check end of CMD17
000d44  e3a01001          MOV      r1,#1
000d48  e3a00011          MOV      r0,#0x11
000d4c  ebfffffe          BL       Chk_CMDend
000d50  e3500000          CMP      r0,#0
000d54  1a000009          BNE      |L1.3456|
;;;435    		    goto RERDCMD;	    
000d58  eaffffa8          B        |L1.3072|
;;;436    	    }
;;;437    	    else	//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -