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

📄 pd6710.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]

; commandline [-errors .\err\PD6710.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
                          CODE32

                          AREA ||.text||, CODE, READONLY

                  _dbg PROC
;;;46     void _dbg(int i)
;;;47     {
                  |L1.0|
000000  e92d4010          STMFD    sp!,{r4,lr}
000004  e1a04000          MOV      r4,r0
;;;48         Uart_Printf("<%d>",i);
000008  e1a01004          MOV      r1,r4
00000c  e28f0004          ADR      r0,|L1.24|
000010  ebfffffe          BL       Uart_Printf
;;;49         //Uart_Printf("INT_GENERAL_CTRL=%x\n",PD6710_Rd(INT_GENERAL_CTRL));
;;;50     }
000014  e8bd8010          LDMFD    sp!,{r4,pc}
                  |L1.24|
000018  3e64253c          DCB      "<%d>"
00001c  00000000          DCB      "\0\0\0\0"
                          ENDP

                  Card_RdAttrMem PROC
;;;293    U8 Card_RdAttrMem(U32 memaddr)
;;;294    {
000020  e1a01000          MOV      r1,r0
;;;295        //nREG=L
;;;296        return *((volatile U8 *)(PD6710_MEM_BASE_ADDRESS+memaddr));
000024  e2810540          ADD      r0,r1,#0x10000000
000028  e5d00000          LDRB     r0,[r0,#0]
;;;297    }
00002c  e1a0f00e          MOV      pc,lr
                          ENDP

                  PD6710_Modify PROC
;;;285    void PD6710_Modify(U8 index,U8 mask,U8 data)
;;;286    {
000030  e3a03544          MOV      r3,#0x11000000
;;;287        //nREG=L
;;;288        rPD6710_INDEX=index;
000034  e5c303e0          STRB     r0,[r3,#0x3e0]
;;;289        rPD6710_DATA=(rPD6710_DATA)&~mask|data;
000038  e3a03544          MOV      r3,#0x11000000
00003c  e5d333e1          LDRB     r3,[r3,#0x3e1]
000040  e1c33001          BIC      r3,r3,r1
000044  e1833002          ORR      r3,r3,r2
000048  e3a0c544          MOV      r12,#0x11000000
00004c  e5cc33e1          STRB     r3,[r12,#0x3e1]
;;;290    }
000050  e1a0f00e          MOV      pc,lr
                          ENDP

                  PD6710_AttrMemAccess PROC
;;;325    void PD6710_AttrMemAccess(void)
;;;326    {
000054  e52de004          STR      lr,[sp,#-4]!
;;;327        PD6710_Modify(CARD_MEM_MAP0_OFFSET_H,(1<<6),(1<<6)); //nREG=active, L
000058  e3a02040          MOV      r2,#0x40
00005c  e3a01040          MOV      r1,#0x40
000060  e3a00015          MOV      r0,#0x15
000064  ebfffffe          BL       PD6710_Modify
;;;328    }
000068  e49df004          LDR      pc,[sp],#4
                          ENDP

                  PrintCIS PROC
;;;82     void PrintCIS(void)
;;;83     {
00006c  e92d40f8          STMFD    sp!,{r3-r7,lr}
;;;84         int i,j;
;;;85         int cisEnd=0;
000070  e3a04000          MOV      r4,#0
;;;86         static U8 str[16];
;;;87         U8 c;
;;;88         Uart_Printf("[Card Information Structure]\n");
000074  e28f0f50          ADR      r0,|L1.444|
000078  ebfffffe          BL       Uart_Printf
;;;89     	
;;;90         PD6710_AttrMemAccess();
00007c  ebfffffe          BL       PD6710_AttrMemAccess
;;;91     
;;;92         //search the end of CIS
;;;93         while(1)
000080  e1a00000          NOP      
                  |L1.132|
000084  e1a00000          NOP      
;;;94         {
;;;95     		if(c=Card_RdAttrMem((cisEnd)*2)==0xff)	//0xff= termination tuple	
000088  e1a00084          MOV      r0,r4,LSL #1
00008c  ebfffffe          BL       Card_RdAttrMem
000090  e35000ff          CMP      r0,#0xff
000094  1a000001          BNE      |L1.160|
000098  e3a00001          MOV      r0,#1
00009c  ea000000          B        |L1.164|
                  |L1.160|
0000a0  e3a00000          MOV      r0,#0
                  |L1.164|
0000a4  e1b07000          MOVS     r7,r0
0000a8  0a000000          BEQ      |L1.176|
;;;96     		    break;
0000ac  ea000009          B        |L1.216|
;;;97     		Uart_Printf("cisEnd:%d, CIS RD:%x\n", cisEnd, c);
                  |L1.176|
0000b0  e1a02007          MOV      r2,r7
0000b4  e1a01004          MOV      r1,r4
0000b8  e28f0f47          ADR      r0,|L1.476|
0000bc  ebfffffe          BL       Uart_Printf
;;;98     		cisEnd++;	
0000c0  e2844001          ADD      r4,r4,#1
;;;99     		cisEnd+=Card_RdAttrMem((cisEnd)*2)+1;
0000c4  e1a00084          MOV      r0,r4,LSL #1
0000c8  ebfffffe          BL       Card_RdAttrMem
0000cc  e0800004          ADD      r0,r0,r4
0000d0  e2804001          ADD      r4,r0,#1
;;;100        }
0000d4  eaffffea          B        |L1.132|
;;;101        Uart_Printf("cisEnd=0~%x\n",cisEnd);			
                  |L1.216|
0000d8  e1a01004          MOV      r1,r4
0000dc  e28f0f44          ADR      r0,|L1.500|
0000e0  ebfffffe          BL       Uart_Printf
;;;102    
;;;103        for(i=0;i<=cisEnd*2;i+=2)
0000e4  e3a05000          MOV      r5,#0
                  |L1.232|
0000e8  e1550084          CMP      r5,r4,LSL #1
0000ec  ca00002f          BGT      |L1.432|
0000f0  ea000001          B        |L1.252|
                  |L1.244|
0000f4  e2855002          ADD      r5,r5,#2
0000f8  eafffffa          B        |L1.232|
;;;104        {
;;;105    		c=Card_RdAttrMem(i);
                  |L1.252|
0000fc  e1a00005          MOV      r0,r5
000100  ebfffffe          BL       Card_RdAttrMem
000104  e1a07000          MOV      r7,r0
;;;106    		str[(i%0x20)/2]=c;
000108  e1a02fc5          MOV      r2,r5,ASR #31
00010c  e0852da2          ADD      r2,r5,r2,LSR #27
000110  e1a022c2          MOV      r2,r2,ASR #5
000114  e0451282          SUB      r1,r5,r2,LSL #5
000118  e0810fa1          ADD      r0,r1,r1,LSR #31
00011c  e1a000c0          MOV      r0,r0,ASR #1
000120  e59f10dc          LDR      r1,|L1.516|
000124  e7c17000          STRB     r7,[r1,r0]
;;;107    		Uart_Printf("%2x,",c);
000128  e1a01007          MOV      r1,r7
00012c  e28f00d4          ADR      r0,|L1.520|
000130  ebfffffe          BL       Uart_Printf
;;;108    		if((i%0x20)>=0x1e)
000134  e1a00005          MOV      r0,r5
000138  e1a01fc5          MOV      r1,r5,ASR #31
00013c  e0851da1          ADD      r1,r5,r1,LSR #27
000140  e1a012c1          MOV      r1,r1,ASR #5
000144  e0451281          SUB      r1,r5,r1,LSL #5
000148  e351001e          CMP      r1,#0x1e
00014c  ba000016          BLT      |L1.428|
;;;109    		{
;;;110    		    Uart_Printf("//");
000150  e28f00b8          ADR      r0,|L1.528|
000154  ebfffffe          BL       Uart_Printf
;;;111    		    for(j=0;j<0x10;j++)
000158  e3a06000          MOV      r6,#0
                  |L1.348|
00015c  e3560010          CMP      r6,#0x10
000160  aa00000f          BGE      |L1.420|
000164  ea000001          B        |L1.368|
                  |L1.360|
000168  e2866001          ADD      r6,r6,#1
00016c  eafffffa          B        |L1.348|
;;;112    			if(str[j]>=' ' && str[j]<=127)Uart_Printf("%c",str[j]);
                  |L1.368|
000170  e59f008c          LDR      r0,|L1.516|
000174  e7d00006          LDRB     r0,[r0,r6]
000178  e2400020          SUB      r0,r0,#0x20
00017c  e350005f          CMP      r0,#0x5f
000180  8a000004          BHI      |L1.408|
000184  e59f0078          LDR      r0,|L1.516|
000188  e7d01006          LDRB     r1,[r0,r6]
00018c  e28f0080          ADR      r0,|L1.532|
000190  ebfffffe          BL       Uart_Printf
000194  ea000001          B        |L1.416|
;;;113    			else Uart_Printf(".");
                  |L1.408|
000198  e28f0078          ADR      r0,|L1.536|
00019c  ebfffffe          BL       Uart_Printf
                  |L1.416|
0001a0  eafffff0          B        |L1.360|
;;;114    		    Uart_Printf("\n");
                  |L1.420|
0001a4  e28f002c          ADR      r0,|L1.472|
0001a8  ebfffffe          BL       Uart_Printf
;;;115    		}
;;;116        }
                  |L1.428|
0001ac  eaffffd0          B        |L1.244|
;;;117        Uart_Printf("\n");
                  |L1.432|
0001b0  e28f0020          ADR      r0,|L1.472|
0001b4  ebfffffe          BL       Uart_Printf
;;;118    }
0001b8  e8bd80f8          LDMFD    sp!,{r3-r7,pc}
                  |L1.444|
0001bc  7261435b          DCB      "[Car"
0001c0  6e492064          DCB      "d In"
0001c4  6d726f66          DCB      "form"
0001c8  6f697461          DCB      "atio"
0001cc  7453206e          DCB      "n St"
0001d0  74637572          DCB      "ruct"
0001d4  5d657275          DCB      "ure]"
                  |L1.472|
0001d8  0000000a          DCB      "\n\0\0\0"
                  |L1.476|
0001dc  45736963          DCB      "cisE"
0001e0  253a646e          DCB      "nd:%"
0001e4  43202c64          DCB      "d, C"
0001e8  52205349          DCB      "IS R"
0001ec  78253a44          DCB      "D:%x"
0001f0  0000000a          DCB      "\n\0\0\0"
                  |L1.500|
0001f4  45736963          DCB      "cisE"
0001f8  303d646e          DCB      "nd=0"
0001fc  0a78257e          DCB      "~%x\n"
000200  00000000          DCB      "\0\0\0\0"
                  |L1.516|
000204  00000004          DCD      ||.bss$2|| + 4
                  |L1.520|
000208  2c783225          DCB      "%2x,"
00020c  00000000          DCB      "\0\0\0\0"
                  |L1.528|
000210  00002f2f          DCB      "//\0\0"
                  |L1.532|
000214  00006325          DCB      "%c\0\0"
                  |L1.536|
000218  0000002e          DCB      ".\0\0\0"
                          ENDP

                  PD6710_Rd PROC
;;;277    U8 PD6710_Rd(U8 index)
;;;278    {
00021c  e1a01000          MOV      r1,r0
;;;279        //nREG=L
;;;280        rPD6710_INDEX=index;
000220  e3a00544          MOV      r0,#0x11000000
000224  e5c013e0          STRB     r1,[r0,#0x3e0]
;;;281        return rPD6710_DATA;
000228  e3a00544          MOV      r0,#0x11000000
00022c  e5d003e1          LDRB     r0,[r0,#0x3e1]
;;;282    }
000230  e1a0f00e          MOV      pc,lr
                          ENDP

                  PD6710_CardEnable PROC
;;;230    void PD6710_CardEnable(void) //after insertion interrupt
;;;231    {
000234  e92d4008          STMFD    sp!,{r3,lr}
;;;232        if(PD6710_Rd(MISC_CTRL1)&0x1)  //MISC_CTRL1[0] 0=3.3V  1=5.0V 
000238  e3a00016          MOV      r0,#0x16
00023c  ebfffffe          BL       PD6710_Rd
000240  e3100001          TST      r0,#1
000244  0a000006          BEQ      |L1.612|
;;;233        {
;;;234        	PD6710_Modify(MISC_CTRL1,0x2,0x0); //nVCC_5_enabled
000248  e3a02000          MOV      r2,#0
00024c  e3a01002          MOV      r1,#2
000250  e3a00016          MOV      r0,#0x16
000254  ebfffffe          BL       PD6710_Modify
;;;235        	Uart_Printf("5.0V card is detected.\n");
000258  e28f00a8          ADR      r0,|L1.776|
00025c  ebfffffe          BL       Uart_Printf
000260  ea000005          B        |L1.636|
;;;236        }
;;;237        else
;;;238        {
;;;239        	PD6710_Modify(MISC_CTRL1,0x2,0x2); //nVCC_3_enabled
                  |L1.612|
000264  e3a02002          MOV      r2,#2
000268  e3a01002          MOV      r1,#2
00026c  e3a00016          MOV      r0,#0x16
000270  ebfffffe          BL       PD6710_Modify
;;;240        	Uart_Printf("3.3V card is detected.\n");
000274  e28f00a4          ADR      r0,|L1.800|
000278  ebfffffe          BL       Uart_Printf
;;;241        }
;;;242        PD6710_Modify(POWER_CTRL,(1<<4)|3,(1<<4)|1);
                  |L1.636|
00027c  e3a02011          MOV      r2,#0x11
000280  e3a01013          MOV      r1,#0x13
000284  e3a00002          MOV      r0,#2
000288  ebfffffe          BL       PD6710_Modify
;;;243        	//VCC_POWER_on,VPP=Vcc(3.3V or 5.0V)
;;;244        Delay(100);
00028c  e3a00064          MOV      r0,#0x64
000290  ebfffffe          BL       Delay
;;;245        	//Delay 10ms should be here for power stabilization.
;;;246        	//If this time is not here, the program may halt 
;;;247    	// in case that the pc card has been inserted before power_on   
;;;248    	//But, Why?	

⌨️ 快捷键说明

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