📄 pcmciasupport.cod
字号:
; 257 :
; 258 :
; 259 : //if(*PCMCIA_PCCONFIG & (PCMCIA_PCCONFIG_MCD2 | PCMCIA_PCCONFIG_MCD1))
; 260 : if(ulVS &( GPIOF_PCMCIA_CD1 | GPIOF_PCMCIA_CD2))
00024 e59d3000 ldr r3, [sp]
00028 e3130006 tst r3, #6
0002c 0a000004 beq |$L38114|
; 261 : {
; 262 : EdbgOutputDebugString("Card Voltage: Card bus, Unsupported card.\n");
00030 e59f00b4 ldr r0, [pc, #0xB4]
00034 eb000000 bl EdbgOutputDebugString
; 263 : return 0;
00038 e3a03000 mov r3, #0
0003c e58d3004 str r3, [sp, #4]
00040 ea000021 b |$L38110|
00044 |$L38114|
; 264 : }
; 265 :
; 266 : //ulVS = *PCMCIA_PCCONFIG & (PCMCIA_PCCONFIG_VS2FBK | PCMCIA_PCCONFIG_VS1FBK);
; 267 :
; 268 : else if(ulVS == 0)
00044 e59d3000 ldr r3, [sp]
00048 e3530000 cmp r3, #0
0004c 1a000004 bne |$L38117|
; 269 : {
; 270 : EdbgOutputDebugString("Card Voltage: x.x 3.3v and 5v Card.\n");
00050 e59f0090 ldr r0, [pc, #0x90]
00054 eb000000 bl EdbgOutputDebugString
; 271 : return 33;
00058 e3a03021 mov r3, #0x21
0005c e58d3004 str r3, [sp, #4]
00060 ea000019 b |$L38110|
00064 |$L38117|
; 272 : }
; 273 : else if (ulVS == GPIOF_PCMCIA_VS1)
00064 e59d3000 ldr r3, [sp]
00068 e3530020 cmp r3, #0x20
0006c 1a000004 bne |$L38120|
; 274 : {
; 275 : EdbgOutputDebugString("Card Voltage: x.xv (Not supported).\n");
00070 e59f006c ldr r0, [pc, #0x6C]
00074 eb000000 bl EdbgOutputDebugString
; 276 : return 0;
00078 e3a03000 mov r3, #0
0007c e58d3004 str r3, [sp, #4]
00080 ea000011 b |$L38110|
00084 |$L38120|
; 277 : }
; 278 : else if (ulVS == GPIOF_PCMCIA_VS2)
00084 e59d3000 ldr r3, [sp]
00088 e3530080 cmp r3, #0x80
0008c 1a000004 bne |$L38123|
; 279 : {
; 280 : EdbgOutputDebugString("Card Voltage: 3.3v.\n");
00090 e59f0048 ldr r0, [pc, #0x48]
00094 eb000000 bl EdbgOutputDebugString
; 281 : return 33;
00098 e3a03021 mov r3, #0x21
0009c e58d3004 str r3, [sp, #4]
000a0 ea000009 b |$L38110|
000a4 |$L38123|
; 282 : }
; 283 : else if (ulVS == (GPIOF_PCMCIA_VS1 | GPIOF_PCMCIA_VS2))
000a4 e59d3000 ldr r3, [sp]
000a8 e35300a0 cmp r3, #0xA0
000ac 1a000004 bne |$L38126|
; 284 : {
; 285 : EdbgOutputDebugString("Card Voltage: 5v.\n");
000b0 e59f0024 ldr r0, [pc, #0x24]
000b4 eb000000 bl EdbgOutputDebugString
; 286 : return 50;
000b8 e3a03032 mov r3, #0x32
000bc e58d3004 str r3, [sp, #4]
000c0 ea000001 b |$L38110|
000c4 |$L38126|
; 287 : }
; 288 :
; 289 : return 0;
000c4 e3a03000 mov r3, #0
000c8 e58d3004 str r3, [sp, #4]
000cc |$L38110|
; 263 : return 0;
000cc e59d0004 ldr r0, [sp, #4]
; 290 :
; 291 : }
000d0 e28dd008 add sp, sp, #8
000d4 e49de004 ldr lr, [sp], #4
000d8 e12fff1e bx lr
000dc |$L38263|
000dc 00000000 DCD |??_C@_0BD@PJNOJFDC@Card?5Voltage?3?55v?4?6?$AA@|
000e0 00000000 DCD |??_C@_0BF@JPLNLKLD@Card?5Voltage?3?53?43v?4?6?$AA@|
000e4 00000000 DCD |??_C@_0CF@NFAAFMBL@Card?5Voltage?3?5x?4xv?5?$CINot?5supporte@|
000e8 00000000 DCD |??_C@_0CF@KMCAEMEC@Card?5Voltage?3?5x?4x?53?43v?5and?55v?5Ca@|
000ec 00000000 DCD |??_C@_0CL@BKBHLIKE@Card?5Voltage?3?5Card?5bus?0?5Unsuppor@|
000f0 80840030 DCD 0x80840030
000f4 |$M38259|
ENDP ; |detectVolts|
IMPORT |__rt_udiv|
00000 AREA |.text| { |CalculatePcmciaTimings| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$CalculatePcmciaTimings|, PDATA, SELECTION=5, ASSOC=|.text| { |CalculatePcmciaTimings| } ; comdat associative
|$T38271| DCD |$L38270|
DCD 0x40008604
; Function compile flags: /Ods
00000 AREA |.text| { |CalculatePcmciaTimings| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |CalculatePcmciaTimings| PROC
; 325 : {
00000 |$L38270|
00000 e1a0c00d mov r12, sp
00004 e92d0001 stmdb sp!, {r0}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd02c sub sp, sp, #0x2C
00010 |$M38268|
; 326 : ULONG ulAddressTime;
; 327 : ULONG ulHoldTime;
; 328 : ULONG ulAccessTime;
; 329 : ULONG ulSMC;
; 330 : //ULONG ulHCLK = REAL_HCLOCK;
; 331 : ULONG ulHCLK = 92000000;
00010 e59f31fc ldr r3, [pc, #0x1FC]
00014 e58d300c str r3, [sp, #0xC]
; 332 : ULONG ulHPeriod;
; 333 : ULONG ulHAccessTime;
; 334 : ULONG ulHAddressTime;
; 335 : ULONG ulHHoldTime;
; 336 :
; 337 : switch(NsSpeed)
00018 e59d3034 ldr r3, [sp, #0x34]
0001c e58d3028 str r3, [sp, #0x28]
00020 e59d3028 ldr r3, [sp, #0x28]
00024 e3530000 cmp r3, #0
00028 0a000038 beq |$L38151|
0002c e59d3028 ldr r3, [sp, #0x28]
00030 e3530064 cmp r3, #0x64
00034 0a00002e beq |$L38150|
00038 e59d3028 ldr r3, [sp, #0x28]
0003c e3530096 cmp r3, #0x96
00040 0a000024 beq |$L38149|
00044 e59d3028 ldr r3, [sp, #0x28]
00048 e35300c8 cmp r3, #0xC8
0004c 0a00001a beq |$L38148|
00050 e59d3028 ldr r3, [sp, #0x28]
00054 e35300fa cmp r3, #0xFA
00058 0a000010 beq |$L38147|
0005c e59d3028 ldr r3, [sp, #0x28]
00060 e3530f4b cmp r3, #0x4B, 30
00064 0a000006 beq |$L38146|
; 338 : {
; 339 : case 600:
; 340 : default:
; 341 : ulAccessTime = 600;
00068 e3a03f96 mov r3, #0x96, 30
0006c e58d3014 str r3, [sp, #0x14]
; 342 : ulAddressTime = 100;
00070 e3a03064 mov r3, #0x64
00074 e58d3000 str r3, [sp]
; 343 : ulHoldTime = 35;
00078 e3a03023 mov r3, #0x23
0007c e58d3018 str r3, [sp, #0x18]
; 344 : break;
00080 ea000028 b |$L38142|
00084 |$L38146|
; 345 :
; 346 : case 300:
; 347 : ulAccessTime = 300;
00084 e3a03f4b mov r3, #0x4B, 30
00088 e58d3014 str r3, [sp, #0x14]
; 348 : ulAddressTime = 30;
0008c e3a0301e mov r3, #0x1E
00090 e58d3000 str r3, [sp]
; 349 : ulHoldTime = 20;
00094 e3a03014 mov r3, #0x14
00098 e58d3018 str r3, [sp, #0x18]
; 350 : break;
0009c ea000021 b |$L38142|
000a0 |$L38147|
; 351 :
; 352 : case 250:
; 353 : ulAccessTime = 250;
000a0 e3a030fa mov r3, #0xFA
000a4 e58d3014 str r3, [sp, #0x14]
; 354 : ulAddressTime = 30;
000a8 e3a0301e mov r3, #0x1E
000ac e58d3000 str r3, [sp]
; 355 : ulHoldTime = 20;
000b0 e3a03014 mov r3, #0x14
000b4 e58d3018 str r3, [sp, #0x18]
; 356 : break;
000b8 ea00001a b |$L38142|
000bc |$L38148|
; 357 :
; 358 : case 200:
; 359 : ulAccessTime = 200;
000bc e3a030c8 mov r3, #0xC8
000c0 e58d3014 str r3, [sp, #0x14]
; 360 : ulAddressTime = 20;
000c4 e3a03014 mov r3, #0x14
000c8 e58d3000 str r3, [sp]
; 361 : ulHoldTime = 20;
000cc e3a03014 mov r3, #0x14
000d0 e58d3018 str r3, [sp, #0x18]
; 362 : break;
000d4 ea000013 b |$L38142|
000d8 |$L38149|
; 363 :
; 364 : case 150:
; 365 : ulAccessTime = 150;
000d8 e3a03096 mov r3, #0x96
000dc e58d3014 str r3, [sp, #0x14]
; 366 : ulAddressTime = 20;
000e0 e3a03014 mov r3, #0x14
000e4 e58d3000 str r3, [sp]
; 367 : ulHoldTime = 20;
000e8 e3a03014 mov r3, #0x14
000ec e58d3018 str r3, [sp, #0x18]
; 368 : break;
000f0 ea00000c b |$L38142|
000f4 |$L38150|
; 369 :
; 370 : case 100:
; 371 : ulAccessTime = 100;
000f4 e3a03064 mov r3, #0x64
000f8 e58d3014 str r3, [sp, #0x14]
; 372 : ulAddressTime = 10;
000fc e3a0300a mov r3, #0xA
00100 e58d3000 str r3, [sp]
; 373 : ulHoldTime = 15;
00104 e3a0300f mov r3, #0xF
00108 e58d3018 str r3, [sp, #0x18]
; 374 : break;
0010c ea000005 b |$L38142|
00110 |$L38151|
; 375 :
; 376 : //
; 377 : // Special case for I/O all access.
; 378 : //
; 379 : case 0:
; 380 : ulAccessTime = 165;
00110 e3a030a5 mov r3, #0xA5
00114 e58d3014 str r3, [sp, #0x14]
; 381 : ulAddressTime = 70;
00118 e3a03046 mov r3, #0x46
0011c e58d3000 str r3, [sp]
; 382 : ulHoldTime = 20;
00120 e3a03014 mov r3, #0x14
00124 e58d3018 str r3, [sp, #0x18]
00128 |$L38142|
; 383 : break;
; 384 : }
; 385 :
; 386 : //
; 387 : // Add in a board delay.
; 388 : //
; 389 : ulAccessTime += PCMCIA_BOARD_DELAY;
00128 e59d3014 ldr r3, [sp, #0x14]
0012c e2833028 add r3, r3, #0x28
00130 e58d3014 str r3, [sp, #0x14]
; 390 : ulAddressTime += PCMCIA_BOARD_DELAY;
00134 e59d3000 ldr r3, [sp]
00138 e2833028 add r3, r3, #0x28
0013c e58d3000 str r3, [sp]
; 391 : ulHoldTime += PCMCIA_BOARD_DELAY;
00140 e59d3018 ldr r3, [sp, #0x18]
00144 e2833028 add r3, r3, #0x28
00148 e58d3018 str r3, [sp, #0x18]
; 392 :
; 393 : //
; 394 : // This gives us the period in nanosecods.
; 395 : //
; 396 : // = 1000000000 (ns/s) / HCLK (cycle/s)
; 397 : //
; 398 : // = (ns/cycle)
; 399 : //
; 400 : ulHPeriod = (1000000000/ ulHCLK);
0014c e59d000c ldr r0, [sp, #0xC]
00150 e59f10b8 ldr r1, [pc, #0xB8]
00154 eb000000 bl __rt_udiv
00158 e58d0010 str r0, [sp, #0x10]
; 401 :
; 402 : //
; 403 : // Find the number of hclk cycles for cycle time, address time and
; 404 : // hold time.
; 405 : //
; 406 : // = ulAccessTime (ns) / ulHPeriod (ns/Cycles)
; 407 : // = ulAddressTime (ns) / ulHPeriod (ns/Cycles)
; 408 : // = ulHoldTime (ns) / ulHPeriod (ns/Cycles)
; 409 : //
; 410 : ulHAccessTime = ulAccessTime / ulHPeriod;
0015c e59d1014 ldr r1, [sp, #0x14]
00160 e59d0010 ldr r0, [sp, #0x10]
00164 eb000000 bl __rt_udiv
00168 e58d0004 str r0, [sp, #4]
; 411 : if(ulHAccessTime > 0xFF)
0016c e59d3004 ldr r3, [sp, #4]
00170 e35300ff cmp r3, #0xFF
00174 9a000001 bls |$L38152|
; 412 : ulHAccessTime = 0xFF;
00178 e3a030ff mov r3, #0xFF
0017c e58d3004 str r3, [sp, #4]
00180 |$L38152|
; 413 :
; 414 : ulHAddressTime = ulAddressTime / ulHPeriod;
00180 e59d1000 ldr r1, [sp]
00184 e59d0010 ldr r0, [sp, #0x10]
00188 eb000000 bl __rt_udiv
0018c e58d001c str r0, [sp, #0x1C]
; 415 : if(ulHAddressTime > 0xFF)
00190 e59d301c ldr r3, [sp, #0x1C]
00194 e35300ff cmp r3, #0xFF
00198 9a000001 bls |$L38153|
; 416 : ulHAddressTime = 0xFF;
0019c e3a030ff mov r3, #0xFF
001a0 e58d301c str r3, [sp, #0x1C]
001a4 |$L38153|
; 417 :
; 418 : ulHHoldTime = (ulHoldTime /ulHPeriod) + 1;
001a4 e59d1018 ldr r1, [sp, #0x18]
001a8 e59d0010 ldr r0, [sp, #0x10]
001ac eb000000 bl __rt_udiv
001b0 e2803001 add r3, r0, #1
001b4 e58d3020 str r3, [sp, #0x20]
; 419 : if(ulHHoldTime >0xF)
001b8 e59d3020 ldr r3, [sp, #0x20]
001bc e353000f cmp r3, #0xF
001c0 9a000001 bls |$L38154|
; 420 : ulHHoldTime = 0xF;
001c4 e3a0300f mov r3, #0xF
001c8 e58d3020 str r3, [sp, #0x20]
001cc |$L38154|
; 421 :
; 422 : ulSMC = (PCCONFIG_ADDRESSTIME_MASK & (ulHAddressTime << PCCONFIG_ADDRESSTIME_SHIFT)) |
; 423 : (PCCONFIG_HOLDTIME_MASK & (ulHHoldTime << PCCONFIG_HOLDTIME_SHIFT)) |
; 424 : (PCCONFIG_ACCESSTIME_MASK & (ulHAccessTime << PCCONFIG_ACCESSTIME_SHIFT)) ;
001cc e59d301c ldr r3, [sp, #0x1C]
001d0 e20320ff and r2, r3, #0xFF
001d4 e59d3020 ldr r3, [sp, #0x20]
001d8 e1a03403 mov r3, r3, lsl #8
001dc e2033c0f and r3, r3, #0xF, 24
001e0 e1822003 orr r2, r2, r3
001e4 e59d3004 ldr r3, [sp, #4]
001e8 e1a03803 mov r3, r3, lsl #16
001ec e20338ff and r3, r3, #0xFF, 16
001f0 e1823003 orr r3, r2, r3
001f4 e58d3008 str r3, [sp, #8]
; 425 :
; 426 : return ulSMC;
001f8 e59d3008 ldr r3, [sp, #8]
001fc e58d3024 str r3, [sp, #0x24]
00200 e59d0024 ldr r0, [sp, #0x24]
; 427 : }
00204 e28dd02c add sp, sp, #0x2C
00208 e89d6000 ldmia sp, {sp, lr}
0020c e12fff1e bx lr
00210 |$L38273|
00210 3b9aca00 DCD 0x3b9aca00
00214 057bcf00 DCD 0x57bcf00
00218 |$M38269|
ENDP ; |CalculatePcmciaTimings|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -