📄 mmcoem.cod
字号:
00014 |$L41477|
00014 00000000 DCD |gSDMMCRegPtr|
00018 |$M41474|
ENDP ; |startMMCClock|
EXPORT |setMMCClockRate|
EXPORT |??_C@_1DC@NEEI@?$AAf?$AAa?$AAi?$AAl?$AA?5?$AAt?$AAo?$AA?5?$AAs?$AAt?$AAo?$AAp?$AAM?$AAM?$AAC?$AAC?$AAl?$AAo?$AAc?$AAk@| [ DATA ] ; `string'
00000 AREA |.text| { |setMMCClockRate| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$setMMCClockRate|, PDATA, SELECTION=5, ASSOC=|.text| { |setMMCClockRate| } ; comdat associative
|$T41484| DCD |setMMCClockRate|
DCD 0x40001f01
00000 AREA |.rdata| { |??_C@_1DC@NEEI@?$AAf?$AAa?$AAi?$AAl?$AA?5?$AAt?$AAo?$AA?5?$AAs?$AAt?$AAo?$AAp?$AAM?$AAM?$AAC?$AAC?$AAl?$AAo?$AAc?$AAk@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1DC@NEEI@?$AAf?$AAa?$AAi?$AAl?$AA?5?$AAt?$AAo?$AA?5?$AAs?$AAt?$AAo?$AAp?$AAM?$AAM?$AAC?$AAC?$AAl?$AAo?$AAc?$AAk@| DCB "f"
DCB 0x0, "a", 0x0, "i", 0x0, "l", 0x0, " ", 0x0, "t", 0x0, "o"
DCB 0x0, " ", 0x0, "s", 0x0, "t", 0x0, "o", 0x0, "p", 0x0, "M"
DCB 0x0, "M", 0x0, "C", 0x0, "C", 0x0, "l", 0x0, "o", 0x0, "c"
DCB 0x0, "k", 0x0, "(", 0x0, ")", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0
DCB 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |setMMCClockRate| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |setMMCClockRate| PROC
; 291 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M41482|
00004 e1a04000 mov r4, r0
; 292 :
; 293 : if ( !stopMMCClock() )
00008 eb000000 bl stopMMCClock
0000c e3500000 cmp r0, #0
00010 1a000004 bne |$L41138|
; 294 : {
; 295 : RETAILMSG(1, (TEXT("fail to stopMMCClock()\r\n")));
00014 e59f005c ldr r0, [pc, #0x5C]
00018 eb000000 bl NKDbgPrintfW
; 296 : return NO;
0001c e3a00000 mov r0, #0
; 313 : }
00020 e8bd4010 ldmia sp!, {r4, lr}
00024 e12fff1e bx lr
00028 |$L41138|
; 297 : }
; 298 :
; 299 :
; 300 :
; 301 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CLK_RATE, ClockRate);
00028 e59f3044 ldr r3, [pc, #0x44]
0002c e1a00804 mov r0, r4, lsl #16
00030 e1a02820 mov r2, r0, lsr #16
00034 e5930000 ldr r0, [r3]
00038 e2801008 add r1, r0, #8
0003c e5812000 str r2, [r1]
; 302 :
; 303 :
; 304 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->RES_TO, MMCI_RESTO_RESET);
00040 e3a02040 mov r2, #0x40
00044 e5930000 ldr r0, [r3]
00048 e2801018 add r1, r0, #0x18
0004c e5812000 str r2, [r1]
; 305 :
; 306 :
; 307 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->READ_TO, MMCI_READTO_RESET);
00050 e3a02cff mov r2, #0xFF, 24
00054 e5930000 ldr r0, [r3]
00058 e38220ff orr r2, r2, #0xFF
0005c e280101c add r1, r0, #0x1C
00060 e5812000 str r2, [r1]
; 308 :
; 309 :
; 310 : startMMCClock();
00064 eb000000 bl startMMCClock
; 311 :
; 312 : return YES;
00068 e3a00001 mov r0, #1
; 313 : }
0006c e8bd4010 ldmia sp!, {r4, lr}
00070 e12fff1e bx lr
00074 |$L41486|
00074 00000000 DCD |gSDMMCRegPtr|
00078 00000000 DCD |??_C@_1DC@NEEI@?$AAf?$AAa?$AAi?$AAl?$AA?5?$AAt?$AAo?$AA?5?$AAs?$AAt?$AAo?$AAp?$AAM?$AAM?$AAC?$AAC?$AAl?$AAo?$AAc?$AAk@|
0007c |$M41483|
ENDP ; |setMMCClockRate|
EXPORT |setMMCmastclock|
00000 AREA |.text| { |setMMCmastclock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$setMMCmastclock|, PDATA, SELECTION=5, ASSOC=|.text| { |setMMCmastclock| } ; comdat associative
|$T41493| DCD |setMMCmastclock|
DCD 0x40001501
; Function compile flags: /Ogsy
00000 AREA |.text| { |setMMCmastclock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |setMMCmastclock| PROC
; 317 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M41491|
00004 e1a04000 mov r4, r0
; 318 :
; 319 : if ( !stopMMCClock() )
00008 eb000000 bl stopMMCClock
0000c e3500000 cmp r0, #0
00010 1a000004 bne |$L41147|
; 320 : {
; 321 : RETAILMSG(1, (TEXT("fail to stopMMCClock()\r\n")));
00014 e59f0034 ldr r0, [pc, #0x34]
00018 eb000000 bl NKDbgPrintfW
; 322 : return NO;
0001c e3a00000 mov r0, #0
; 331 : }
00020 e8bd4010 ldmia sp!, {r4, lr}
00024 e12fff1e bx lr
00028 |$L41147|
; 323 : }
; 324 :
; 325 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->MMC_PREDIV, MMCI_PCLK_EN | MMCI_APB_RD_EN | mmcclock );
00028 e59f001c ldr r0, [pc, #0x1C]
0002c e3843030 orr r3, r4, #0x30
00030 e5901000 ldr r1, [r0]
00034 e281200c add r2, r1, #0xC
00038 e5823000 str r3, [r2]
; 326 :
; 327 :
; 328 : startMMCClock();
0003c eb000000 bl startMMCClock
; 329 :
; 330 : return YES;
00040 e3a00001 mov r0, #1
; 331 : }
00044 e8bd4010 ldmia sp!, {r4, lr}
00048 e12fff1e bx lr
0004c |$L41495|
0004c 00000000 DCD |gSDMMCRegPtr|
00050 00000000 DCD |??_C@_1DC@NEEI@?$AAf?$AAa?$AAi?$AAl?$AA?5?$AAt?$AAo?$AA?5?$AAs?$AAt?$AAo?$AAp?$AAM?$AAM?$AAC?$AAC?$AAl?$AAo?$AAc?$AAk@|
00054 |$M41492|
ENDP ; |setMMCmastclock|
EXPORT |startMMC80Clocks|
IMPORT |platform_delayms|
00000 AREA |.text| { |startMMC80Clocks| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$startMMC80Clocks|, PDATA, SELECTION=5, ASSOC=|.text| { |startMMC80Clocks| } ; comdat associative
|$T41505| DCD |startMMC80Clocks|
DCD 0x40002401
; Function compile flags: /Ogsy
00000 AREA |.text| { |startMMC80Clocks| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |startMMC80Clocks| PROC
; 355 : {
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M41503|
; 356 :
; 357 : #define MMC_STATUS_END_COMMAND_RESPONSE 0x00002000
; 358 :
; 359 : UINT16 ij;
; 360 : UINT32 dStatus;
; 361 :
; 362 : ij = (UINT16)ctrlNo;
; 363 :
; 364 :
; 365 :
; 366 : if ( !stopMMCClock() )
00004 eb000000 bl stopMMCClock
00008 e3500000 cmp r0, #0
0000c 0a00001c beq |$L41151|
; 367 : return;
; 368 :
; 369 :
; 370 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD, GO_IDLE_STATE);
00010 e59f4074 ldr r4, [pc, #0x74]
00014 e3a05000 mov r5, #0
; 371 :
; 372 :
; 373 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->ARGUMENT, MMCI_RESFIFO_RESET);
; 374 :
; 375 :
; 376 :
; 377 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD_DATA_CONT, RESPONSE_TYPE_R0 |SEND_80_CLOCKS );
00018 e3a02040 mov r2, #0x40
0001c e5940000 ldr r0, [r4]
00020 e2801038 add r1, r0, #0x38
00024 e5815000 str r5, [r1]
00028 e5940000 ldr r0, [r4]
0002c e280103c add r1, r0, #0x3C
00030 e5815000 str r5, [r1]
00034 e5940000 ldr r0, [r4]
00038 e2801014 add r1, r0, #0x14
0003c e5812000 str r2, [r1]
; 378 :
; 379 :
; 380 : startMMCClock();
00040 eb000000 bl startMMCClock
; 381 :
; 382 : for (ij = 0; ij < 0x20000; ij++ )
00044 e5940000 ldr r0, [r4]
00048 e2803004 add r3, r0, #4
0004c |$L41159|
; 383 : {
; 384 :
; 385 : dStatus = READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS);
0004c e5930000 ldr r0, [r3]
; 386 :
; 387 : if ( dStatus & MMC_STATUS_END_COMMAND_RESPONSE )
00050 e3100a02 tst r0, #2, 20
00054 1a000008 bne |$L41499|
00058 e1a00805 mov r0, r5, lsl #16
0005c e1a01820 mov r1, r0, lsr #16
00060 e2812001 add r2, r1, #1
00064 e1a00802 mov r0, r2, lsl #16
00068 e1a05820 mov r5, r0, lsr #16
0006c e1a01805 mov r1, r5, lsl #16
00070 e1a00821 mov r0, r1, lsr #16
00074 e3500802 cmp r0, #2, 16
00078 bafffff3 blt |$L41159|
0007c |$L41499|
; 388 : {
; 389 : break;
; 390 : }
; 391 : }
; 392 :
; 393 :
; 394 : OS_WAIT(200);
0007c e3a000c8 mov r0, #0xC8
00080 eb000000 bl platform_delayms
00084 |$L41151|
; 395 : }
00084 e8bd4030 ldmia sp!, {r4, r5, lr}
00088 e12fff1e bx lr
0008c |$L41507|
0008c 00000000 DCD |gSDMMCRegPtr|
00090 |$M41504|
ENDP ; |startMMC80Clocks|
EXPORT |resetMMCController|
00000 AREA |.text| { |resetMMCController| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$resetMMCController|, PDATA, SELECTION=5, ASSOC=|.text| { |resetMMCController| } ; comdat associative
|$T41512| DCD |resetMMCController|
DCD 0x40000100
; Function compile flags: /Ogsy
00000 AREA |.text| { |resetMMCController| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |resetMMCController| PROC
; 416 : {
00000 |$M41510|
; 417 :
; 418 : }
00000 e12fff1e bx lr
00004 |$M41511|
ENDP ; |resetMMCController|
EXPORT |SetupMMCInterrupt|
00000 AREA |.text| { |SetupMMCInterrupt| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$SetupMMCInterrupt|, PDATA, SELECTION=5, ASSOC=|.text| { |SetupMMCInterrupt| } ; comdat associative
|$T41518| DCD |SetupMMCInterrupt|
DCD 0x40000800
; Function compile flags: /Ogsy
00000 AREA |.text| { |SetupMMCInterrupt| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SetupMMCInterrupt| PROC
; 437 : {
00000 |$M41516|
; 438 : UINT32 dtmp;
; 439 :
; 440 :
; 441 :
; 442 : dtmp = READ_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK);
00000 e59f0014 ldr r0, [pc, #0x14]
00004 e5901000 ldr r1, [r0]
00008 e2812034 add r2, r1, #0x34
; 443 :
; 444 : #if (USE_INTERRUPTS)
; 445 : dtmp &= 0x0F;
; 446 : dtmp |= bitMask;
; 447 : #else
; 448 : dtmp = bitMask;
; 449 : dtmp &= 0;
; 450 : #endif
; 451 :
; 452 :
; 453 :
; 454 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK, 0x3F);
0000c e3a0103f mov r1, #0x3F
00010 e5920000 ldr r0, [r2]
00014 e5821000 str r1, [r2]
; 455 : }
00018 e12fff1e bx lr
0001c |$L41520|
0001c 00000000 DCD |gSDMMCRegPtr|
00020 |$M41517|
ENDP ; |SetupMMCInterrupt|
EXPORT |disableMMCInterrupt|
00000 AREA |.text| { |disableMMCInterrupt| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$disableMMCInterrupt|, PDATA, SELECTION=5, ASSOC=|.text| { |disableMMCInterrupt| } ; comdat associative
|$T41525| DCD |disableMMCInterrupt|
DCD 0x40000700
; Function compile flags: /Ogsy
00000 AREA |.text| { |disableMMCInterrupt| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |disableMMCInterrupt| PROC
; 473 : {
00000 |$M41523|
; 474 :
; 475 :
; 476 :
; 477 :
; 478 :
; 479 :
; 480 :
; 481 :
; 482 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK, 0x3F);
00000 e59f0010 ldr r0, [pc, #0x10]
00004 e5901000 ldr r1, [r0]
00008 e3a0003f mov r0, #0x3F
0000c e2812034 add r2, r1, #0x34
00010 e5820000 str r0, [r2]
; 483 : }
00014 e12fff1e bx lr
00018 |$L41527|
00018 00000000 DCD |gSDMMCRegPtr|
0001c |$M41524|
ENDP ; |disableMMCInterrupt|
EXPORT |MMCSendCommand|
00000 AREA |.text| { |MMCSendCommand| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCSendCommand|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCSendCommand| } ; comdat associative
|$T41534| DCD |MMCSendCommand|
DCD 0x40001001
; Function compile flags: /Ogsy
00000 AREA |.text| { |MMCSendCommand| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MMCSendCommand| PROC
; 511 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M41532|
00004 e1a02000 mov r2, r0
00008 e1a03001 mov r3, r1
; 512 :
; 513 : UINT32 dtmp;
; 514 :
; 515 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->ARGUMENT, Arg);
0000c e59f4028 ldr r4, [pc, #0x28]
00010 e5940000 ldr r0, [r4]
00014 e280103c add r1, r0, #0x3C
; 516 :
; 517 :
; 518 : dtmp = (Cmd & 0x7F);
; 519 :
; 520 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD, dtmp);
00018 e1a00803 mov r0, r3, lsl #16
0001c e5812000 str r2, [r1]
00020 e1a01820 mov r1, r0, lsr #16
00024 e5940000 ldr r0, [r4]
00028 e201207f and r2, r1, #0x7F
0002c e2801038 add r1, r0, #0x38
00030 e5812000 str r2, [r1]
; 521 : }
00034 e8bd4010 ldmia sp!, {r4, lr}
00038 e12fff1e bx lr
0003c |$L41536|
0003c 00000000 DCD |gSDMMCRegPtr|
00040 |$M41533|
ENDP ; |MMCSendCommand|
EXPORT |getMMCResponseInfo|
00000 AREA |.text| { |getMMCResponseInfo| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$getMMCResponseInfo|, PDATA, SELECTION=5, ASSOC=|.text| { |getMMCResponseInfo| } ; comdat associative
|$T41559| DCD |getMMCResponseInfo|
DCD 0x40004401
; Function compile flags: /Ogsy
00000 AREA |.text| { |getMMCResponseInfo| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |getMMCResponseInfo| PROC
; 583 : {
00000 e92d41f0 stmdb sp!, {r4 - r8, lr}
00004 |$M41557|
00004 e1a08000 mov r8, r0
00008 e1a03001 mov r3, r1
; 584 : UINT32 dtmp, dtimer;
; 585 : UINT16 i;
; 586 : UINT32 dstat;
; 587 :
; 588 : i = respType;
; 589 :
; 590 :
; 591 : dtimer = 0xFFFF;
; 592 :
; 593 :
; 594 :
; 595 : dstat = READ_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO);
0000c e59f60f8 ldr r6, [pc, #0xF8]
00010 e3a02cff mov r2, #0xFF, 24
00014 e5964000 ldr r4, [r6]
00018 e38220ff orr r2, r2, #0xFF
0001c e2840048 add r0, r4, #0x48
00020 e5901000 ldr r1, [r0]
00024 e2840004 add r0, r4, #4
00028 |$L41222|
; 597 : {
; 598 :
; 599 :
; 600 : dstat = READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS);
00028 e5901000 ldr r1, [r0]
; 601 :
; 602 : dtimer--;
0002c e2422001 sub r2, r2, #1
; 603 :
; 604 :
; 605 : if ( dstat & TIME_OUT_RESPONSE )
00030 e3110002 tst r1, #2
00034 1a00000c bne |$L41541|
; 608 : }
; 609 :
; 610 : else if ( dstat & RESP_CRC_ERR)
00038 e3110020 tst r1, #0x20
0003c 1a00000e bne |$L41542|
; 613 : }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -