📄 pd6710.txt
字号:
; 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 + -