📄 mmcdrv.cod
字号:
00184 112fff1e bxne lr
; 388 :
; 389 : if (statusInfo & EERROR)
00188 e3140702 tst r4, #2, 14
; 390 : return MMC_ERROR;
0018c 13a000d3 movne r0, #0xD3
; 419 : }
00190 18bd40f0 ldmneia sp!, {r4 - r7, lr}
00194 112fff1e bxne lr
; 391 :
; 392 : if (statusInfo & UNDERRUN)
00198 e3140701 tst r4, #1, 14
; 393 : return MMC_UNDERRUN;
0019c 13a000de movne r0, #0xDE
; 419 : }
001a0 18bd40f0 ldmneia sp!, {r4 - r7, lr}
001a4 112fff1e bxne lr
; 394 :
; 395 : if (statusInfo & OVERRUN)
001a8 e3140802 tst r4, #2, 16
; 396 : return MMC_OVERRUN;
001ac 13a000dd movne r0, #0xDD
; 419 : }
001b0 18bd40f0 ldmneia sp!, {r4 - r7, lr}
001b4 112fff1e bxne lr
; 397 :
; 398 : if (statusInfo & CIDCSD_OVERWRITE)
001b8 e3140801 tst r4, #1, 16
; 399 : return MMC_CIDCSD_OVERWRITE;
001bc 13a000df movne r0, #0xDF
; 419 : }
001c0 18bd40f0 ldmneia sp!, {r4 - r7, lr}
001c4 112fff1e bxne lr
; 400 :
; 401 : if (statusInfo & WP_ERASE_SKIP)
001c8 e3140902 tst r4, #2, 18
; 402 : return MMC_WP_ERASE_SKIP;
001cc 13a000d4 movne r0, #0xD4
; 419 : }
001d0 18bd40f0 ldmneia sp!, {r4 - r7, lr}
001d4 112fff1e bxne lr
; 403 :
; 404 : if (statusInfo & CARD_ECC_DISABLED)
001d8 e3140901 tst r4, #1, 18
; 405 : return MMC_CARD_ECC_DISABLED;
001dc 13a000e0 movne r0, #0xE0
; 419 : }
001e0 18bd40f0 ldmneia sp!, {r4 - r7, lr}
001e4 112fff1e bxne lr
; 406 :
; 407 : if (statusInfo & ERASE_RESET)
001e8 e3140a02 tst r4, #2, 20
; 408 : return MMC_ERASE_RESET;
001ec 13a000db movne r0, #0xDB
; 419 : }
001f0 18bd40f0 ldmneia sp!, {r4 - r7, lr}
001f4 112fff1e bxne lr
; 409 :
; 410 : #if (USE_SD)
; 411 : if (statusInfo & CARD_IS_LOCKED)
001f8 e3140402 tst r4, #2, 8
; 412 : return MMC_CARD_IS_LOCKED;
001fc 13a000e6 movne r0, #0xE6
; 419 : }
00200 18bd40f0 ldmneia sp!, {r4 - r7, lr}
00204 112fff1e bxne lr
; 413 :
; 414 : if (statusInfo & LOCK_UNLOCK_FAILED)
00208 e3140401 tst r4, #1, 8
; 415 : return MMC_LOCK_UNLOCK_FAILED;
0020c e3a000e7 mov r0, #0xE7
; 416 : #endif
; 417 :
; 418 : return MMC_CARD_IS_NOT_RESPONDING;
00210 03a000c9 moveq r0, #0xC9
; 419 : }
00214 e8bd40f0 ldmia sp!, {r4 - r7, lr}
00218 e12fff1e bx lr
0021c |$M36818|
ENDP ; |MMCAnalysisResponse|
EXPORT |mmcCommandAndResponse|
IMPORT |MMCPrepareAndSetup|
00000 AREA |.text| { |mmcCommandAndResponse| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$mmcCommandAndResponse|, PDATA, SELECTION=5, ASSOC=|.text| { |mmcCommandAndResponse| } ; comdat associative
|$T36837| DCD |mmcCommandAndResponse|
DCD 0x40004901
; Function compile flags: /Ogsy
00000 AREA |.text| { |mmcCommandAndResponse| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |mmcCommandAndResponse| PROC
; 443 : {
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 |$M36835|
00004 e1a08000 mov r8, r0
00008 e1a06001 mov r6, r1
0000c e1a05002 mov r5, r2
00010 e1a04003 mov r4, r3
; 444 : MMC_CC resErr;
; 445 : INT16 i;
; 446 :
; 447 :
; 448 : if ( Cmd == STOP_TRANSMISSION)
00014 e1a00805 mov r0, r5, lsl #16
00018 e1a01820 mov r1, r0, lsr #16
0001c e3a09000 mov r9, #0
00020 e351000c cmp r1, #0xC
00024 1a00000e bne |$L36640|
; 449 : {
; 450 : if ( (pc->mode & READ_MODE) == READ_MODE )
00028 e1d802b0 ldrh r0, [r8, #0x20]
0002c e1a01800 mov r1, r0, lsl #16
00030 e1a02821 mov r2, r1, lsr #16
00034 e2020080 and r0, r2, #0x80
00038 e3500080 cmp r0, #0x80
; 451 : multipleRdWr = DATA;
0003c 059f00dc ldreq r0, [pc, #0xDC]
00040 03a01005 moveq r1, #5
00044 01c010b0 streqh r1, [r0]
00048 0a000005 beq |$L36640|
; 452 : else if ( (pc->mode & WRITE_MODE) == WRITE_MODE )
0004c e2020c01 and r0, r2, #1, 24
00050 e3500c01 cmp r0, #1, 24
; 453 : multipleRdWr = RCV;
00054 e59f00c4 ldr r0, [pc, #0xC4]
00058 03a01006 moveq r1, #6
0005c 01c010b0 streqh r1, [r0]
; 454 : else
; 455 : multipleRdWr = NO;
00060 11c090b0 strneh r9, [r0]
00064 |$L36640|
; 456 : }
; 457 :
; 458 :
; 459 : if ( Resp == R6 )
00064 e59d701c ldr r7, [sp, #0x1C]
; 460 : {
; 461 : if ( !MMCPrepareAndSetup(Arg, Cmd, noBlocks, R1) )
00068 e1a01005 mov r1, r5
0006c e1a02004 mov r2, r4
00070 e3570006 cmp r7, #6
00074 1a000006 bne |$L36641|
00078 e3a03001 mov r3, #1
0007c e1a00006 mov r0, r6
00080 eb000000 bl MMCPrepareAndSetup
00084 e3500000 cmp r0, #0
00088 1a00000a bne |$L36646|
; 467 : return MMC_INTERFACE_ERROR;
0008c e3a090d7 mov r9, #0xD7
00090 ea00001f b |$L36633|
00094 |$L36641|
; 463 : }
; 464 : else
; 465 : {
; 466 : if ( !MMCPrepareAndSetup(Arg, Cmd, noBlocks, (UINT16)Resp) )
00094 e1a00807 mov r0, r7, lsl #16
00098 e1a03820 mov r3, r0, lsr #16
0009c e1a00006 mov r0, r6
000a0 eb000000 bl MMCPrepareAndSetup
000a4 e3500000 cmp r0, #0
; 467 : return MMC_INTERFACE_ERROR;
000a8 03a090d7 moveq r9, #0xD7
000ac 0a000018 beq |$L36633|
; 468 : }
; 469 : if ( !Resp )
000b0 e3570000 cmp r7, #0
; 470 : return MMC_NO_ERROR;
000b4 0a000016 beq |$L36633|
000b8 |$L36646|
; 471 :
; 472 : for (i = 0; i < (CID_BYTE_LENGTH>>1); i++)
000b8 e1a01009 mov r1, r9
000bc |$L36647|
; 473 : pc->LastResponse[i] = 0;
000bc e0880081 add r0, r8, r1, lsl #1
000c0 e2811001 add r1, r1, #1
000c4 e1c092b8 strh r9, [r0, #0x28]
000c8 e1a00801 mov r0, r1, lsl #16
000cc e1a02840 mov r2, r0, asr #16
000d0 e1a01802 mov r1, r2, lsl #16
000d4 e1a01841 mov r1, r1, asr #16
000d8 e3510008 cmp r1, #8
000dc bafffff6 blt |$L36647|
; 474 :
; 475 :
; 476 : resErr = MMCReceivedResponse( pc, Resp );
000e0 e1a01007 mov r1, r7
000e4 e1a00008 mov r0, r8
000e8 eb000000 bl MMCReceivedResponse
000ec e1b09000 movs r9, r0
; 477 :
; 478 : if ( resErr == MMC_NO_ERROR)
000f0 1a000007 bne |$L36633|
; 479 : {
; 480 : if ( (Resp == R1) || (Resp == R6) )
000f4 e3570001 cmp r7, #1
000f8 0a000001 beq |$L36652|
000fc e3570006 cmp r7, #6
00100 1a000003 bne |$L36633|
00104 |$L36652|
; 481 : resErr = MMCAnalysisResponse(pc, Resp);
00104 e1a01007 mov r1, r7
00108 e1a00008 mov r0, r8
0010c eb000000 bl MMCAnalysisResponse
00110 e1a09000 mov r9, r0
00114 |$L36633|
; 462 : return MMC_INTERFACE_ERROR;
00114 e1a00009 mov r0, r9
; 482 : }
; 483 :
; 484 : return resErr;
; 485 : }
00118 e8bd43f0 ldmia sp!, {r4 - r9, lr}
0011c e12fff1e bx lr
00120 |$L36839|
00120 00000000 DCD |multipleRdWr|
00124 |$M36836|
ENDP ; |mmcCommandAndResponse|
EXPORT |IsCardBusy|
00000 AREA |.text| { |IsCardBusy| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$IsCardBusy|, PDATA, SELECTION=5, ASSOC=|.text| { |IsCardBusy| } ; comdat associative
|$T36846| DCD |IsCardBusy|
DCD 0x40000501
; Function compile flags: /Ogsy
00000 AREA |.text| { |IsCardBusy| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |IsCardBusy| PROC
; 507 : {
00000 e52de004 str lr, [sp, #-4]!
00004 |$M36844|
; 508 :
; 509 : return (getDeviceStatus(driveno, 1));
00004 e3a01001 mov r1, #1
00008 eb000000 bl getDeviceStatus
; 510 : }
0000c e8bd4000 ldmia sp!, {lr}
00010 e12fff1e bx lr
00014 |$M36845|
ENDP ; |IsCardBusy|
EXPORT |is_device_changed|
00000 AREA |.text| { |is_device_changed| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$is_device_changed|, PDATA, SELECTION=5, ASSOC=|.text| { |is_device_changed| } ; comdat associative
|$T36854| DCD |is_device_changed|
DCD 0x40000501
; Function compile flags: /Ogsy
00000 AREA |.text| { |is_device_changed| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |is_device_changed| PROC
; 531 : {
00000 e52de004 str lr, [sp, #-4]!
00004 |$M36852|
; 532 : return (getDeviceStatus(driveno, 0));
00004 e3a01000 mov r1, #0
00008 eb000000 bl getDeviceStatus
; 533 : }
0000c e8bd4000 ldmia sp!, {lr}
00010 e12fff1e bx lr
00014 |$M36853|
ENDP ; |is_device_changed|
IMPORT |MMCSelectController|
IMPORT |mmcGetStatus|
00000 AREA |.text| { |getDeviceStatus| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$getDeviceStatus|, PDATA, SELECTION=5, ASSOC=|.text| { |getDeviceStatus| } ; comdat associative
|$T36864| DCD |getDeviceStatus|
DCD 0x40002601
; Function compile flags: /Ogsy
00000 AREA |.text| { |getDeviceStatus| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |getDeviceStatus| PROC
; 537 : {
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 |$M36862|
00004 e1a04000 mov r4, r0
00008 e1a05001 mov r5, r1
; 538 : PDEVICE_CONTROLLER pc;
; 539 : UINT16 phys_drive;
; 540 :
; 541 : #if (N_INTERFACES > 1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -