📄 mmcoem.cod
字号:
; 835 : *dBuf++ = data & 0xff;
; 836 :
; 837 :
; 838 :
; 839 :
; 840 :
; 841 :
; 842 : dLength-=2;
00094 e1a00809 mov r0, r9, lsl #16
00098 e20310ff and r1, r3, #0xFF
0009c e1a01820 mov r1, r0, lsr #16
000a0 e4c53001 strb r3, [r5], #1
000a4 e2812cff add r2, r1, #0xFF, 24
000a8 e28200fe add r0, r2, #0xFE
000ac e1a01800 mov r1, r0, lsl #16
000b0 e2840001 add r0, r4, #1
000b4 e1a09821 mov r9, r1, lsr #16
000b8 e1a01800 mov r1, r0, lsl #16
000bc e1a02821 mov r2, r1, lsr #16
000c0 e1a00802 mov r0, r2, lsl #16
000c4 e1a04820 mov r4, r0, lsr #16
000c8 e3540c01 cmp r4, #1, 24
000cc 3affffe6 bcc |$L41607|
; 843 : }
; 844 : }
; 845 : else
000d0 ea00001b b |$L41325|
000d4 |$L41310|
; 846 : {
; 847 :
; 848 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->BUF_PART_FULL, BUFF_PARTIAL_FULL);
000d4 e5960000 ldr r0, [r6]
000d8 e3a02001 mov r2, #1
000dc e280104c add r1, r0, #0x4C
; 849 :
; 850 : for(y = 0; y<dLength/2; y++)
000e0 e3c80001 bic r0, r8, #1
000e4 e5812000 str r2, [r1]
000e8 e3500000 cmp r0, #0
000ec 9a000014 bls |$L41325|
000f0 e1a0400a mov r4, r10
000f4 |$L41323|
; 851 : {
; 852 :
; 853 : *dBufPtr = mmcif_data_swap((UINT16)READ_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO));
000f4 e5960000 ldr r0, [r6]
000f8 e2801048 add r1, r0, #0x48
000fc e5912000 ldr r2, [r1]
00100 e1a00802 mov r0, r2, lsl #16
00104 e1a00820 mov r0, r0, lsr #16
00108 eb000000 bl mmcif_data_swap
0010c e0c700b2 strh r0, [r7], #2
; 854 :
; 855 :
; 856 : dBufPtr++;
; 857 : dLength-=2;
00110 e2880cff add r0, r8, #0xFF, 24
00114 e28010fe add r1, r0, #0xFE
00118 e2840001 add r0, r4, #1
0011c e1a02801 mov r2, r1, lsl #16
00120 e1a01800 mov r1, r0, lsl #16
00124 e1a09822 mov r9, r2, lsr #16
00128 e1a02821 mov r2, r1, lsr #16
0012c e1a00809 mov r0, r9, lsl #16
00130 e1a01802 mov r1, r2, lsl #16
00134 e1a08820 mov r8, r0, lsr #16
00138 e1a04821 mov r4, r1, lsr #16
0013c e15400a8 cmp r4, r8, lsr #1
00140 3affffeb bcc |$L41323|
00144 |$L41325|
; 796 : UINT16 *dBufPtr;
; 797 :
; 798 :
; 799 : UINT16 dLength;
; 800 :
; 801 : UINT16 y,z,data;
; 802 : UINT32 i;
; 803 :
; 804 :
; 805 :
; 806 :
; 807 : dBufPtr = (UINT16 *)dBuf;
; 808 : z = 0;
; 809 : dLength = dataLength;
; 810 :
; 811 :
; 812 :
; 813 : while(dLength)
00144 e1a00809 mov r0, r9, lsl #16
00148 e1b08820 movs r8, r0, lsr #16
0014c 1affffb4 bne |$L41308|
00150 |$L41309|
; 858 : }
; 859 :
; 860 : }
; 861 : }
; 862 :
; 863 :
; 864 :
; 865 :
; 866 :
; 867 : mmc_nop_deselect();
00150 eb000000 bl mmc_nop_deselect
; 868 : stopMMCClock();
00154 eb000000 bl stopMMCClock
; 869 :
; 870 :
; 871 : return MMC_NO_ERROR;
00158 e1a0000a mov r0, r10
; 872 : }
0015c e8bd47f0 ldmia sp!, {r4 - r10, lr}
00160 e12fff1e bx lr
00164 |$L41620|
00164 00000000 DCD |gSDMMCRegPtr|
00168 |$M41617|
ENDP ; |MMCReceive|
00000 AREA |.text| { |mmc_nop_deselect| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$mmc_nop_deselect|, PDATA, SELECTION=5, ASSOC=|.text| { |mmc_nop_deselect| } ; comdat associative
|$T41628| DCD |mmc_nop_deselect|
DCD 0x40001e01
; Function compile flags: /Ogsy
00000 AREA |.text| { |mmc_nop_deselect| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |mmc_nop_deselect| PROC
; 526 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M41626|
; 527 : mmc_status_type cstatus;
; 528 :
; 529 : UINT32 *response;
; 530 : INT32 index, resp_size;
; 531 : stopMMCClock ();
00004 eb000000 bl stopMMCClock
; 532 :
; 533 :
; 534 :
; 535 :
; 536 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD, SELECT_DESELECT_CARD);
00008 e59f4064 ldr r4, [pc, #0x64]
0000c e3a02007 mov r2, #7
00010 e5940000 ldr r0, [r4]
00014 e2801038 add r1, r0, #0x38
00018 e5812000 str r2, [r1]
; 537 :
; 538 :
; 539 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->ARGUMENT, MMCI_ARGUMENT_RESET);
0001c e3a02000 mov r2, #0
00020 e5940000 ldr r0, [r4]
00024 e280103c add r1, r0, #0x3C
00028 e5812000 str r2, [r1]
; 540 :
; 541 :
; 542 :
; 543 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD_DATA_CONT, R1);
0002c e3a02001 mov r2, #1
00030 e5940000 ldr r0, [r4]
00034 e2801014 add r1, r0, #0x14
00038 e5812000 str r2, [r1]
; 544 :
; 545 :
; 546 : startMMCClock ();
0003c eb000000 bl startMMCClock
00040 e5943000 ldr r3, [r4]
00044 e2831004 add r1, r3, #4
00048 |$L41203|
; 547 :
; 548 : response = (UINT32 *) (&cstatus);
; 549 : resp_size = sizeof(cstatus);
; 550 :
; 551 : while ((READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS) & MMC_STATUS_END_COMMAND_RESPONSE) == 0)
00048 e5910000 ldr r0, [r1]
0004c e3100a02 tst r0, #2, 20
00050 0afffffc beq |$L41203|
00054 e2831040 add r1, r3, #0x40
; 552 : ;
; 553 :
; 554 :
; 555 :
; 556 : for (index = 0; index < (resp_size / 2); index++)
00058 e3a02004 mov r2, #4
0005c |$L41205|
0005c e2422001 sub r2, r2, #1
; 557 : {
; 558 :
; 559 :
; 560 : READ_REGISTER_ULONG(&gSDMMCRegPtr->RES_FIFO);
00060 e5910000 ldr r0, [r1]
00064 e3520000 cmp r2, #0
00068 8afffffb bhi |$L41205|
; 561 :
; 562 : }
; 563 : }
0006c e8bd4010 ldmia sp!, {r4, lr}
00070 e12fff1e bx lr
00074 |$L41630|
00074 00000000 DCD |gSDMMCRegPtr|
00078 |$M41627|
ENDP ; |mmc_nop_deselect|
EXPORT |MMCSetupXfer|
IMPORT |setupMMcHostDataRegister|
00000 AREA |.text| { |MMCSetupXfer| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCSetupXfer|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCSetupXfer| } ; comdat associative
|$T41641| DCD |MMCSetupXfer|
DCD 0x40003402
; Function compile flags: /Ogsy
00000 AREA |.text| { |MMCSetupXfer| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MMCSetupXfer| PROC
; 897 : {
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 e24dd008 sub sp, sp, #8
00008 |$M41639|
00008 e1a04000 mov r4, r0
0000c e1a06002 mov r6, r2
; 898 : UINT16 cmdDatContReg;
; 899 : UINT16 blkLength;
; 900 : UINT16 noBlocks = nBlocks;
00010 e1cd10b2 strh r1, [sp, #2]
; 901 :
; 902 : cmdDatContReg = NO;
00014 e3a00000 mov r0, #0
00018 e1cd00b4 strh r0, [sp, #4]
; 903 : blkLength = 0;
; 904 : setupMMcHostDataRegister(cmdIndex, &cmdDatContReg, &noBlocks, &blkLength);
0001c e28d3000 add r3, sp, #0
00020 e1cd00b0 strh r0, [sp]
00024 e28d2002 add r2, sp, #2
00028 e28d1004 add r1, sp, #4
0002c e1a00004 mov r0, r4
00030 eb000000 bl setupMMcHostDataRegister
; 905 :
; 906 :
; 907 : #if (USE_INTERRUPT)
; 908 :
; 909 :
; 910 : #else
; 911 :
; 912 :
; 913 : #endif
; 914 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK, 0x3F);
00034 e59f5090 ldr r5, [pc, #0x90]
00038 e3a0203f mov r2, #0x3F
0003c e5950000 ldr r0, [r5]
00040 e2801034 add r1, r0, #0x34
; 915 :
; 916 : if (cmdIndex != SSTOP_TRANSMISSION)
00044 e1a00804 mov r0, r4, lsl #16
00048 e5812000 str r2, [r1]
0004c e1a01820 mov r1, r0, lsr #16
; 917 : {
; 918 :
; 919 : if ( cmdDatContReg != NO )
00050 e1dd20b4 ldrh r2, [sp, #4]
00054 e351004c cmp r1, #0x4C
00058 0a00000f beq |$L41350|
0005c e1a00802 mov r0, r2, lsl #16
00060 e1b01820 movs r1, r0, lsr #16
00064 0a00000c beq |$L41350|
; 920 : {
; 921 :
; 922 :
; 923 :
; 924 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->BLK_LEN, blkLength);
00068 e1dd00b0 ldrh r0, [sp]
0006c e1a01800 mov r1, r0, lsl #16
00070 e5950000 ldr r0, [r5]
00074 e1a02821 mov r2, r1, lsr #16
00078 e2801020 add r1, r0, #0x20
0007c e5812000 str r2, [r1]
; 925 :
; 926 :
; 927 :
; 928 :
; 929 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->NOB, noBlocks);
00080 e1dd00b2 ldrh r0, [sp, #2]
00084 e1a01800 mov r1, r0, lsl #16
00088 e5950000 ldr r0, [r5]
0008c e1a02821 mov r2, r1, lsr #16
00090 e2801024 add r1, r0, #0x24
00094 e5812000 str r2, [r1]
00098 e1dd20b4 ldrh r2, [sp, #4]
0009c |$L41350|
; 930 : }
; 931 : }
; 932 :
; 933 :
; 934 : cmdDatContReg |= respType;
0009c e1a00802 mov r0, r2, lsl #16
000a0 e1a02820 mov r2, r0, lsr #16
000a4 e1a01806 mov r1, r6, lsl #16
000a8 e1820821 orr r0, r2, r1, lsr #16
; 935 :
; 936 :
; 937 :
; 938 :
; 939 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD_DATA_CONT, cmdDatContReg);
000ac e1a02800 mov r2, r0, lsl #16
000b0 e5950000 ldr r0, [r5]
000b4 e1a03822 mov r3, r2, lsr #16
000b8 e2801014 add r1, r0, #0x14
000bc e5813000 str r3, [r1]
; 940 :
; 941 : }
000c0 e28dd008 add sp, sp, #8
000c4 e8bd4070 ldmia sp!, {r4 - r6, lr}
000c8 e12fff1e bx lr
000cc |$L41643|
000cc 00000000 DCD |gSDMMCRegPtr|
000d0 |$M41640|
ENDP ; |MMCSetupXfer|
EXPORT |MMCPrepareAndSetup|
00000 AREA |.text| { |MMCPrepareAndSetup| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCPrepareAndSetup|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCPrepareAndSetup| } ; comdat associative
|$T41653| DCD |MMCPrepareAndSetup|
DCD 0x40001601
; Function compile flags: /Ogsy
00000 AREA |.text| { |MMCPrepareAndSetup| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MMCPrepareAndSetup| PROC
; 965 : {
00000 e92d40f0 stmdb sp!, {r4 - r7, lr}
00004 |$M41651|
00004 e1a05000 mov r5, r0
00008 e1a07001 mov r7, r1
0000c e1a06002 mov r6, r2
00010 e1a04003 mov r4, r3
; 966 :
; 967 : if ( !stopMMCClock() )
00014 eb000000 bl stopMMCClock
00018 e3500000 cmp r0, #0
; 968 : return NO;
0001c 03a00000 moveq r0, #0
; 983 : }
00020 08bd40f0 ldmeqia sp!, {r4 - r7, lr}
00024 012fff1e bxeq lr
; 969 :
; 970 :
; 974 : MMCSendCommand( Arg, Cmd, 0 );
00028 e3a02000 mov r2, #0
0002c e1a01007 mov r1, r7
00030 e1a00005 mov r0, r5
00034 eb000000 bl MMCSendCommand
; 975 :
; 976 :
; 977 : MMCSetupXfer( Cmd, noBlocks, Resp );
00038 e1a02004 mov r2, r4
0003c e1a01006 mov r1, r6
00040 e1a00007 mov r0, r7
00044 eb000000 bl MMCSetupXfer
; 978 :
; 979 :
; 980 : startMMCClock();
00048 eb000000 bl startMMCClock
; 981 :
; 982 : return YES;
0004c e3a00001 mov r0, #1
; 983 : }
00050 e8bd40f0 ldmia sp!, {r4 - r7, lr}
00054 e12fff1e bx lr
00058 |$M41652|
ENDP ; |MMCPrepareAndSetup|
EXPORT |checkCardBusy|
00000 AREA |.text| { |checkCardBusy| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$checkCardBusy|, PDATA, SELECTION=5, ASSOC=|.text| { |checkCardBusy| } ; comdat associative
|$T41665| DCD |checkCardBusy|
DCD 0x40001000
; Function compile flags: /Ogsy
00000 AREA |.text| { |checkCardBusy| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |checkCardBusy| PROC
; 1003 : {
00000 |$M41663|
; 1004 : UINT32 dStatus, dtimer;
; 1005 :
; 1006 : dtimer = 0x200;
00000 e59f0034 ldr r0, [pc, #0x34]
00004 e3a03c02 mov r3, #2, 24
00008 e5901000 ldr r1, [r0]
0000c e2812004 add r2, r1, #4
00010 |$L41370|
; 1013 : {
; 1014 :
; 1015 :
; 1016 :
; 1017 : dStatus = READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS);
00010 e5920000 ldr r0, [r2]
; 1018 :
; 1019 : if ( (dStatus & DONE_PROG_RDWR) || (dStatus & DONE_WDATA_XFER) )
00014 e3100a01 tst r0, #1, 20
00018 1a000005 bne |$L41658|
0001c e3100b02 tst r0, #2, 22
00020 1a000003 bne |$L41658|
; 1021 :
; 1022 : dtimer--;
00024 e2533001 subs r3, r3, #1
; 1007 :
; 1008 :
; 1012 : while ( dtimer )
00028 1afffff8 bne |$L41370|
; 1023 : }
; 1024 :
; 1025 :
; 1026 : return NO;
0002c e3a00000 mov r0, #0
; 1027 : }
00030 e12fff1e bx lr
00034 |$L41658|
; 1020 : return YES;
00034 e3a00001 mov r0, #1
; 1027 : }
00038 e12fff1e bx lr
0003c |$L41667|
0003c 00000000 DCD |gSDMMCRegPtr|
00040 |$M41664|
ENDP ; |checkCardBusy|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -