📄 mmcoem.cod
字号:
ENDP ; |stopMMCClock|
EXPORT |startMMCClock|
00000 AREA |.text| { |startMMCClock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$startMMCClock|, PDATA, SELECTION=5, ASSOC=|.text| { |startMMCClock| } ; comdat associative
|$T41461| DCD |startMMCClock|
DCD 0x40000600
; Function compile flags: /Ogsy
00000 AREA |.text| { |startMMCClock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |startMMCClock| PROC
; 265 : {
00000 |$M41459|
; 266 :
; 267 :
; 268 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->STR_STP_CLK, MMCI_START_CLK);
00000 e59f000c ldr r0, [pc, #0xC]
00004 e3a02002 mov r2, #2
00008 e5901000 ldr r1, [r0]
0000c e5812000 str r2, [r1]
; 269 : }
00010 e1a0f00e mov pc, lr
00014 |$L41463|
00014 00000000 DCD |gSDMMCRegPtr|
00018 |$M41460|
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
|$T41470| DCD |setMMCClockRate|
DCD 0x40001d01
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 |$M41468|
00004 e1a04000 mov r4, r0
; 292 :
; 293 : if ( !stopMMCClock() )
00008 eb000000 bl stopMMCClock
0000c e3500000 cmp r0, #0
00010 1a000003 bne |$L41138|
; 294 : {
; 295 : RETAILMSG(1, (TEXT("fail to stopMMCClock()\r\n")));
00014 e59f0054 ldr r0, [pc, #0x54]
00018 eb000000 bl NKDbgPrintfW
; 296 : return NO;
0001c e3a00000 mov r0, #0
; 313 : }
00020 e8bd8010 ldmia sp!, {r4, pc}
00024 |$L41138|
; 297 : }
; 298 :
; 299 :
; 300 :
; 301 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CLK_RATE, ClockRate);
00024 e59f3040 ldr r3, [pc, #0x40]
00028 e1a00804 mov r0, r4, lsl #16
0002c e1a02820 mov r2, r0, lsr #16
00030 e5930000 ldr r0, [r3]
00034 e2801008 add r1, r0, #8
00038 e5812000 str r2, [r1]
; 302 :
; 303 :
; 304 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->RES_TO, MMCI_RESTO_RESET);
0003c e3a02040 mov r2, #0x40
00040 e5930000 ldr r0, [r3]
00044 e2801018 add r1, r0, #0x18
00048 e5812000 str r2, [r1]
; 305 :
; 306 :
; 307 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->READ_TO, MMCI_READTO_RESET);
0004c e3a02cff mov r2, #0xFF, 24
00050 e5930000 ldr r0, [r3]
00054 e38220ff orr r2, r2, #0xFF
00058 e280101c add r1, r0, #0x1C
0005c e5812000 str r2, [r1]
; 308 :
; 309 :
; 310 : startMMCClock();
00060 eb000000 bl startMMCClock
; 311 :
; 312 : return YES;
00064 e3a00001 mov r0, #1
; 313 : }
00068 e8bd8010 ldmia sp!, {r4, pc}
0006c |$L41472|
0006c 00000000 DCD |gSDMMCRegPtr|
00070 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@|
00074 |$M41469|
ENDP ; |setMMCClockRate|
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
|$T41482| DCD |startMMC80Clocks|
DCD 0x40002301
; Function compile flags: /Ogsy
00000 AREA |.text| { |startMMC80Clocks| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |startMMC80Clocks| PROC
; 335 : {
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M41480|
; 336 :
; 337 : #define MMC_STATUS_END_COMMAND_RESPONSE 0x00002000
; 338 :
; 339 : UINT16 ij;
; 340 : UINT32 dStatus;
; 341 :
; 342 : ij = (UINT16)ctrlNo;
; 343 :
; 344 :
; 345 :
; 346 : if ( !stopMMCClock() )
00004 eb000000 bl stopMMCClock
00008 e3500000 cmp r0, #0
0000c 0a00001c beq |$L41145|
; 347 : return;
; 348 :
; 349 :
; 350 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD, GO_IDLE_STATE);
00010 e59f4070 ldr r4, [pc, #0x70]
00014 e3a05000 mov r5, #0
; 351 :
; 352 :
; 353 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->ARGUMENT, MMCI_RESFIFO_RESET);
; 354 :
; 355 :
; 356 :
; 357 : 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]
; 358 :
; 359 :
; 360 : startMMCClock();
00040 eb000000 bl startMMCClock
; 361 :
; 362 : for (ij = 0; ij < 0x20000; ij++ )
00044 e5940000 ldr r0, [r4]
00048 e2803004 add r3, r0, #4
0004c |$L41153|
; 363 : {
; 364 :
; 365 : dStatus = READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS);
0004c e5930000 ldr r0, [r3]
; 366 :
; 367 : if ( dStatus & MMC_STATUS_END_COMMAND_RESPONSE )
00050 e3100a02 tst r0, #2, 20
00054 1a000008 bne |$L41476|
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 |$L41153|
0007c |$L41476|
; 368 : {
; 369 : break;
; 370 : }
; 371 : }
; 372 :
; 373 :
; 374 : OS_WAIT(200);
0007c e3a000c8 mov r0, #0xC8
00080 eb000000 bl platform_delayms
00084 |$L41145|
; 375 : }
00084 e8bd8030 ldmia sp!, {r4, r5, pc}
00088 |$L41484|
00088 00000000 DCD |gSDMMCRegPtr|
0008c |$M41481|
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
|$T41489| DCD |resetMMCController|
DCD 0x40000100
; Function compile flags: /Ogsy
00000 AREA |.text| { |resetMMCController| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |resetMMCController| PROC
; 396 : {
00000 |$M41487|
; 397 :
; 398 : }
00000 e1a0f00e mov pc, lr
00004 |$M41488|
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
|$T41495| DCD |SetupMMCInterrupt|
DCD 0x40000800
; Function compile flags: /Ogsy
00000 AREA |.text| { |SetupMMCInterrupt| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SetupMMCInterrupt| PROC
; 417 : {
00000 |$M41493|
; 418 : UINT32 dtmp;
; 419 :
; 420 :
; 421 :
; 422 : dtmp = READ_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK);
00000 e59f0014 ldr r0, [pc, #0x14]
00004 e5901000 ldr r1, [r0]
00008 e2812034 add r2, r1, #0x34
; 423 :
; 424 : #if (USE_INTERRUPTS)
; 425 : dtmp &= 0x0F;
; 426 : dtmp |= bitMask;
; 427 : #else
; 428 : dtmp = bitMask;
; 429 : dtmp &= 0;
; 430 : #endif
; 431 :
; 432 :
; 433 :
; 434 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK, 0x3F);
0000c e3a0103f mov r1, #0x3F
00010 e5920000 ldr r0, [r2]
00014 e5821000 str r1, [r2]
; 435 : }
00018 e1a0f00e mov pc, lr
0001c |$L41497|
0001c 00000000 DCD |gSDMMCRegPtr|
00020 |$M41494|
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
|$T41502| DCD |disableMMCInterrupt|
DCD 0x40000700
; Function compile flags: /Ogsy
00000 AREA |.text| { |disableMMCInterrupt| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |disableMMCInterrupt| PROC
; 453 : {
00000 |$M41500|
; 454 :
; 455 :
; 456 :
; 457 :
; 458 :
; 459 :
; 460 :
; 461 :
; 462 : 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]
; 463 : }
00014 e1a0f00e mov pc, lr
00018 |$L41504|
00018 00000000 DCD |gSDMMCRegPtr|
0001c |$M41501|
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
|$T41511| DCD |MMCSendCommand|
DCD 0x40000f01
; Function compile flags: /Ogsy
00000 AREA |.text| { |MMCSendCommand| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MMCSendCommand| PROC
; 491 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M41509|
00004 e1a02000 mov r2, r0
00008 e1a03001 mov r3, r1
; 492 :
; 493 : UINT32 dtmp;
; 494 :
; 495 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->ARGUMENT, Arg);
0000c e59f4024 ldr r4, [pc, #0x24]
00010 e5940000 ldr r0, [r4]
00014 e280103c add r1, r0, #0x3C
; 496 :
; 497 :
; 498 : dtmp = (Cmd & 0x7F);
; 499 :
; 500 : 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]
; 501 : }
00034 e8bd8010 ldmia sp!, {r4, pc}
00038 |$L41513|
00038 00000000 DCD |gSDMMCRegPtr|
0003c |$M41510|
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
|$T41536| DCD |getMMCResponseInfo|
DCD 0x40004601
; Function compile flags: /Ogsy
00000 AREA |.text| { |getMMCResponseInfo| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |getMMCResponseInfo| PROC
; 563 : {
00000 e92d41f0 stmdb sp!, {r4 - r8, lr}
00004 |$M41534|
00004 e1a08000 mov r8, r0
00008 e1a03001 mov r3, r1
; 564 : UINT32 dtmp, dtimer;
; 565 : UINT16 i;
; 566 : UINT32 dstat;
; 567 :
; 568 : i = respType;
; 569 :
; 570 :
; 571 : dtimer = 0xFFFF;
; 572 :
; 573 :
; 574 :
; 575 : dstat = READ_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO);
0000c e59f6100 ldr r6, [pc, #0x100]
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 |$L41216|
; 577 : {
; 578 :
; 579 :
; 580 : dstat = READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS);
00028 e5901000 ldr r1, [r0]
; 581 :
; 582 : dtimer--;
0002c e2422001 sub r2, r2, #1
; 583 :
; 584 :
; 585 : if ( dstat & TIME_OUT_RESPONSE )
00030 e3110002 tst r1, #2
00034 1a00000c bne |$L41518|
; 588 : }
; 589 :
; 590 : else if ( dstat & RESP_CRC_ERR)
00038 e3110020 tst r1, #0x20
0003c 1a00000d bne |$L41519|
; 593 : }
; 594 : else if ( dstat & CRC_WR_ERR )
00040 e3110004 tst r1, #4
00044 1a00000e bne |$L41521|
; 595 : {
; 596 : return MMC_DATA_STATUS_CRC_ERROR;
; 597 : }
; 598 :
; 599 : else if ( dstat & CRC_RD_ERR )
00048 e3110008 tst r1, #8
0004c 1a00000c bne |$L41521|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -