📄 mmcdrv.cod
字号:
; 542 : pc = drno_to_controller(driveno);
; 543 : phys_drive = drno_to_phys(driveno);
; 544 : #else
; 545 : phys_drive = driveno;
; 546 : pc = &controller_s[0];
0000c e59f6080 ldr r6, [pc, #0x80]
; 547 : #endif
; 548 :
; 549 : MMCSelectController(pc->controller_number, phys_drive);
00010 e1a01004 mov r1, r4
00014 e1d601f4 ldrsh r0, [r6, #0x14]
00018 eb000000 bl MMCSelectController
; 550 :
; 551 : pc->drive_active = (((UINT16)phys_drive) | DRV_ACTIVE);
0001c e59f006c ldr r0, [pc, #0x6C]
00020 e1a03804 mov r3, r4, lsl #16
00024 e1800843 orr r0, r0, r3, asr #16
00028 e1a01800 mov r1, r0, lsl #16
0002c e1a02841 mov r2, r1, asr #16
; 552 :
; 553 :
; 554 : if ( MMC_NO_ERROR != mmcGetStatus ( pc, pc->drive[phys_drive].RCA) )
00030 e5961000 ldr r1, [r6]
00034 e1a00804 mov r0, r4, lsl #16
00038 e1c621be strh r2, [r6, #0x1E]
0003c e1a02820 mov r2, r0, lsr #16
00040 e0810282 add r0, r1, r2, lsl #5
00044 e1d010be ldrh r1, [r0, #0xE]
00048 e1a00006 mov r0, r6
0004c eb000000 bl mmcGetStatus
00050 e3500000 cmp r0, #0
; 555 : {
; 556 : return (YES);
00054 13a00001 movne r0, #1
; 571 : }
00058 18bd4070 ldmneia sp!, {r4 - r6, lr}
0005c 112fff1e bxne lr
; 557 : }
; 558 :
; 559 : if ( dFlag )
00060 e1a00805 mov r0, r5, lsl #16
00064 e1b01820 movs r1, r0, lsr #16
00068 0a000005 beq |$L36675|
; 560 : {
; 561 :
; 562 : if ( pc->mmcRdyState == YES )
0006c e1d602b4 ldrh r0, [r6, #0x24]
00070 e1a01800 mov r1, r0, lsl #16
00074 e1a02821 mov r2, r1, lsr #16
00078 e3520001 cmp r2, #1
; 563 : return NO;
; 564 : else
; 565 :
; 566 : return YES;
0007c e3a00001 mov r0, #1
00080 1a000000 bne |$L36668|
00084 |$L36675|
; 567 : }
; 568 :
; 569 :
; 570 : return NO;
00084 e3a00000 mov r0, #0
00088 |$L36668|
; 571 : }
00088 e8bd4070 ldmia sp!, {r4 - r6, lr}
0008c e12fff1e bx lr
00090 |$L36866|
00090 ffff8000 DCD 0xffff8000
00094 00000000 DCD |controller_s|
00098 |$M36863|
ENDP ; |getDeviceStatus|
EXPORT |setupMMcHostDataRegister|
00000 AREA |.text| { |setupMMcHostDataRegister| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$setupMMcHostDataRegister|, PDATA, SELECTION=5, ASSOC=|.text| { |setupMMcHostDataRegister| } ; comdat associative
|$T36885| DCD |setupMMcHostDataRegister|
DCD 0x40005301
; Function compile flags: /Ogsy
00000 AREA |.text| { |setupMMcHostDataRegister| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |setupMMcHostDataRegister| PROC
; 595 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M36883|
00004 e1a04001 mov r4, r1
; 596 : #if (USE_SECURITY)
; 597 : if ( cmdIndex & SECURITY_CMD_BIT )
; 598 : {
; 599 : SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 600 : return;
; 601 : }
; 602 : #endif
; 603 :
; 604 :
; 605 : switch ( cmdIndex )
; 606 : {
00008 e1a00800 mov r0, r0, lsl #16
0000c e1a01820 mov r1, r0, lsr #16
00010 e3510014 cmp r1, #0x14
00014 ca000023 bgt |$L36869|
00018 0a000033 beq |$L36691|
0001c e351000c cmp r1, #0xC
00020 ca000011 bgt |$L36870|
00024 0a00000b beq |$L36697|
00028 e3510000 cmp r1, #0
0002c 4a000044 bmi |$L36687|
00030 e3510002 cmp r1, #2
00034 da000015 ble |$L36700|
00038 e3510008 cmp r1, #8
0003c da000040 ble |$L36687|
00040 e351000a cmp r1, #0xA
00044 da000011 ble |$L36700|
00048 e351000b cmp r1, #0xB
0004c 0a00000c beq |$L36690|
; 673 : break;
; 674 :
; 675 : }
; 676 : }
00050 e8bd4010 ldmia sp!, {r4, lr}
00054 e12fff1e bx lr
00058 |$L36697|
; 645 :
; 646 : case ERASE_SECTORS:
; 647 : *cmdDatContReg = NO;
; 648 : *blkLength = NO;
; 649 : break;
; 650 :
; 651 : case STOP_TRANSMISSION:
; 652 : if ( multipleRdWr == RCV)
00058 e3a00000 mov r0, #0
0005c e1c400b0 strh r0, [r4]
; 653 :
; 654 :
; 656 :
; 657 : *cmdDatContReg = NO;
; 658 : else
; 659 : *cmdDatContReg = NO;
; 660 : *blkLength = NO;
00060 e1c300b0 strh r0, [r3]
; 673 : break;
; 674 :
; 675 : }
; 676 : }
00064 e8bd4010 ldmia sp!, {r4, lr}
00068 e12fff1e bx lr
0006c |$L36870|
; 596 : #if (USE_SECURITY)
; 597 : if ( cmdIndex & SECURITY_CMD_BIT )
; 598 : {
; 599 : SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 600 : return;
; 601 : }
; 602 : #endif
; 603 :
; 604 :
; 605 : switch ( cmdIndex )
; 606 : {
0006c e351000d cmp r1, #0xD
00070 0a000006 beq |$L36700|
00074 e3510010 cmp r1, #0x10
00078 da000031 ble |$L36687|
0007c e3510012 cmp r1, #0x12
00080 ca00002f bgt |$L36687|
00084 |$L36690|
; 607 : case READ_BLOCK:
; 608 : case READ_MULTIPLE_BLOCK:
; 609 : case READ_DAT_UNTIL_STOP:
; 610 : *cmdDatContReg = DATA_ENABLE;
; 611 : *blkLength = DEFAULT_BLK_LENGTH;
00084 e3a01c02 mov r1, #2, 24
; 620 : break;
; 621 :
; 622 : case SEND_WRITE_PROT:
; 623 : *cmdDatContReg = DATA_ENABLE;
00088 e3a00004 mov r0, #4
; 625 : break;
0008c ea000018 b |$L36882|
00090 |$L36700|
; 661 : break;
; 662 :
; 663 :
; 664 : case GO_IDLE_STATE:
; 665 : case SEND_OP_COND:
; 666 : case ALL_SEND_CID:
; 667 : case SEND_CID:
; 668 : case SEND_CSD:
; 669 : case SEND_STATUS:
; 670 : *cmdDatContReg = NO;
00090 e3a00000 mov r0, #0
00094 e1c400b0 strh r0, [r4]
; 671 : *blkLength = NO;
00098 e1c300b0 strh r0, [r3]
; 672 : *noBlocks = NO;
0009c e1c200b0 strh r0, [r2]
; 673 : break;
; 674 :
; 675 : }
; 676 : }
000a0 e8bd4010 ldmia sp!, {r4, lr}
000a4 e12fff1e bx lr
000a8 |$L36869|
; 596 : #if (USE_SECURITY)
; 597 : if ( cmdIndex & SECURITY_CMD_BIT )
; 598 : {
; 599 : SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 600 : return;
; 601 : }
; 602 : #endif
; 603 :
; 604 :
; 605 : switch ( cmdIndex )
; 606 : {
000a8 e3510026 cmp r1, #0x26
000ac ca000014 bgt |$L36871|
000b0 0affffe8 beq |$L36697|
000b4 e3510018 cmp r1, #0x18
000b8 ba000021 blt |$L36687|
000bc e3510019 cmp r1, #0x19
000c0 da000009 ble |$L36691|
000c4 e351001b cmp r1, #0x1B
000c8 da000004 ble |$L36695|
000cc e351001e cmp r1, #0x1E
000d0 1a00001b bne |$L36687|
; 624 : *blkLength = NO;
000d4 e3a01000 mov r1, #0
000d8 e3a00004 mov r0, #4
; 625 : break;
000dc ea000004 b |$L36882|
000e0 |$L36695|
; 638 : #endif
; 639 : case PROGRAM_CSD:
; 640 : case PROGRAM_CID:
; 641 : *cmdDatContReg = (DATA_ENABLE + DATA_WRITE_SET);
000e0 e3a0000c mov r0, #0xC
; 642 : *blkLength = 16;
000e4 e3a01010 mov r1, #0x10
; 643 : *noBlocks = 1;
; 644 : break;
000e8 ea000011 b |$L36876|
000ec |$L36691|
; 612 : break;
; 613 :
; 614 : case WRITE_BLOCK:
; 615 : case WRITE_MULTIPLE_BLOCK:
; 616 : case WRITE_DAT_UNTIL_STOP:
; 617 : *cmdDatContReg = (DATA_ENABLE + DATA_WRITE_SET);
000ec e3a0000c mov r0, #0xC
; 618 :
; 619 : *blkLength = DEFAULT_BLK_LENGTH;
000f0 e3a01c02 mov r1, #2, 24
000f4 |$L36882|
; 612 : break;
; 613 :
; 614 : case WRITE_BLOCK:
; 615 : case WRITE_MULTIPLE_BLOCK:
; 616 : case WRITE_DAT_UNTIL_STOP:
; 617 : *cmdDatContReg = (DATA_ENABLE + DATA_WRITE_SET);
000f4 e1c400b0 strh r0, [r4]
; 618 :
; 619 : *blkLength = DEFAULT_BLK_LENGTH;
000f8 e1c310b0 strh r1, [r3]
; 673 : break;
; 674 :
; 675 : }
; 676 : }
000fc e8bd4010 ldmia sp!, {r4, lr}
00100 e12fff1e bx lr
00104 |$L36871|
; 596 : #if (USE_SECURITY)
; 597 : if ( cmdIndex & SECURITY_CMD_BIT )
; 598 : {
; 599 : SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 600 : return;
; 601 : }
; 602 : #endif
; 603 :
; 604 :
; 605 : switch ( cmdIndex )
; 606 : {
00104 e3a00f53 mov r0, #0x53, 30
00108 e3800001 orr r0, r0, #1
0010c e1510000 cmp r1, r0
00110 0a000005 beq |$L36693|
00114 e3a00e17 mov r0, #0x17, 28
00118 e3800003 orr r0, r0, #3
0011c e1510000 cmp r1, r0
00120 1a000007 bne |$L36687|
; 631 : break;
; 632 :
; 633 : case SD_SEND_SCR:
; 634 : *cmdDatContReg = DATA_ENABLE;
; 635 : *blkLength = 8;
00124 e3a01008 mov r1, #8
; 636 : *noBlocks = 1;
; 637 : break;
00128 ea000000 b |$L36877|
0012c |$L36693|
; 629 : *blkLength = (DEFAULT_BLK_LENGTH >> 3);
0012c e3a01040 mov r1, #0x40
00130 |$L36877|
; 626 : #if (USE_SD)
; 627 : case SD_STATUS:
; 628 : *cmdDatContReg = DATA_ENABLE;
00130 e3a00004 mov r0, #4
00134 |$L36876|
00134 e1c400b0 strh r0, [r4]
; 630 : *noBlocks = 1;
00138 e3a00001 mov r0, #1
0013c e1c310b0 strh r1, [r3]
00140 e1c200b0 strh r0, [r2]
00144 |$L36687|
; 673 : break;
; 674 :
; 675 : }
; 676 : }
00144 e8bd4010 ldmia sp!, {r4, lr}
00148 e12fff1e bx lr
0014c |$M36884|
ENDP ; |setupMMcHostDataRegister|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -