📄 mmcoem.cod
字号:
00070 00000000 DCD |gSDMMCRegPtr|
00074 |$M41576|
ENDP ; |mmc_nop_deselect|
EXPORT |MMCReceive|
00000 AREA |.text| { |MMCReceive| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCReceive|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCReceive| } ; comdat associative
|$T41598| DCD |MMCReceive|
DCD 0x40004d01
; Function compile flags: /Ogsy
00000 AREA |.text| { |MMCReceive| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MMCReceive| PROC
; 752 : {
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 |$M41596|
00004 e1a06000 mov r6, r0
00008 e1a08001 mov r8, r1
; 753 : UINT16 *dBufPtr;
; 754 :
; 755 :
; 756 : UINT16 dLength;
; 757 :
; 758 : UINT16 y,z;
; 759 :
; 760 :
; 761 :
; 762 : dBufPtr = (UINT16 *)dBuf;
; 763 : z = 0;
; 764 : dLength = dataLength;
; 765 :
; 766 :
; 767 :
; 768 : while(dLength)
0000c e1a00808 mov r0, r8, lsl #16
00010 e3a09000 mov r9, #0
00014 e1b07820 movs r7, r0, lsr #16
00018 0a000040 beq |$L41299|
0001c e59f510c ldr r5, [pc, #0x10C]
00020 |$L41298|
; 769 : {
; 770 : if(dLength%512==0)
00020 e1a00447 mov r0, r7, asr #8
00024 e0871ba0 add r1, r7, r0, lsr #23
00028 e1a024c1 mov r2, r1, asr #9
0002c e0570482 subs r0, r7, r2, lsl #9
00030 1a00001b bne |$L41300|
00034 e5952000 ldr r2, [r5]
00038 e2821004 add r1, r2, #4
0003c |$L41303|
; 771 : {
; 772 : while(!(READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS) & FIFO_BUFFER_FULL));
0003c e5910000 ldr r0, [r1]
00040 e3100080 tst r0, #0x80
00044 0afffffc beq |$L41303|
; 773 :
; 774 : for(y = 0; y<256; y++)
00048 e1a04009 mov r4, r9
0004c ea000000 b |$L41305|
00050 |$L41589|
00050 e5952000 ldr r2, [r5]
00054 |$L41305|
; 775 : {
; 776 :
; 777 : *dBufPtr = mmcif_data_swap((UINT16)READ_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO));
00054 e2820048 add r0, r2, #0x48
00058 e5901000 ldr r1, [r0]
0005c e1a02801 mov r2, r1, lsl #16
00060 e1a00822 mov r0, r2, lsr #16
00064 eb000000 bl mmcif_data_swap
00068 e0c600b2 strh r0, [r6], #2
; 778 :
; 779 :
; 780 :
; 781 : dBufPtr++;
; 782 : dLength-=2;
0006c e1a00808 mov r0, r8, lsl #16
00070 e1a01820 mov r1, r0, lsr #16
00074 e2812cff add r2, r1, #0xFF, 24
00078 e28200fe add r0, r2, #0xFE
0007c e1a01800 mov r1, r0, lsl #16
00080 e2840001 add r0, r4, #1
00084 e1a08821 mov r8, r1, lsr #16
00088 e1a01800 mov r1, r0, lsl #16
0008c e1a02821 mov r2, r1, lsr #16
00090 e1a00802 mov r0, r2, lsl #16
00094 e1a04820 mov r4, r0, lsr #16
00098 e3540c01 cmp r4, #1, 24
0009c 3affffeb bcc |$L41589|
; 783 : }
; 784 : }
; 785 : else
000a0 ea00001b b |$L41314|
000a4 |$L41300|
; 786 : {
; 787 :
; 788 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->BUF_PART_FULL, BUFF_PARTIAL_FULL);
000a4 e5950000 ldr r0, [r5]
000a8 e3a02001 mov r2, #1
000ac e280104c add r1, r0, #0x4C
; 789 :
; 790 : for(y = 0; y<dLength/2; y++)
000b0 e3c70001 bic r0, r7, #1
000b4 e5812000 str r2, [r1]
000b8 e3500000 cmp r0, #0
000bc 9a000014 bls |$L41314|
000c0 e1a04009 mov r4, r9
000c4 |$L41312|
; 791 : {
; 792 :
; 793 : *dBufPtr = mmcif_data_swap((UINT16)READ_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO));
000c4 e5950000 ldr r0, [r5]
000c8 e2801048 add r1, r0, #0x48
000cc e5912000 ldr r2, [r1]
000d0 e1a00802 mov r0, r2, lsl #16
000d4 e1a00820 mov r0, r0, lsr #16
000d8 eb000000 bl mmcif_data_swap
000dc e0c600b2 strh r0, [r6], #2
; 794 :
; 795 :
; 796 : dBufPtr++;
; 797 : dLength-=2;
000e0 e2870cff add r0, r7, #0xFF, 24
000e4 e28010fe add r1, r0, #0xFE
000e8 e2840001 add r0, r4, #1
000ec e1a02801 mov r2, r1, lsl #16
000f0 e1a01800 mov r1, r0, lsl #16
000f4 e1a08822 mov r8, r2, lsr #16
000f8 e1a02821 mov r2, r1, lsr #16
000fc e1a00808 mov r0, r8, lsl #16
00100 e1a01802 mov r1, r2, lsl #16
00104 e1a07820 mov r7, r0, lsr #16
00108 e1a04821 mov r4, r1, lsr #16
0010c e15400a7 cmp r4, r7, lsr #1
00110 3affffeb bcc |$L41312|
00114 |$L41314|
; 753 : UINT16 *dBufPtr;
; 754 :
; 755 :
; 756 : UINT16 dLength;
; 757 :
; 758 : UINT16 y,z;
; 759 :
; 760 :
; 761 :
; 762 : dBufPtr = (UINT16 *)dBuf;
; 763 : z = 0;
; 764 : dLength = dataLength;
; 765 :
; 766 :
; 767 :
; 768 : while(dLength)
00114 e1a00808 mov r0, r8, lsl #16
00118 e1b07820 movs r7, r0, lsr #16
0011c 1affffbf bne |$L41298|
00120 |$L41299|
; 798 : }
; 799 :
; 800 : }
; 801 : }
; 802 :
; 803 :
; 804 :
; 805 :
; 806 :
; 807 : mmc_nop_deselect();
00120 eb000000 bl mmc_nop_deselect
; 808 : stopMMCClock();
00124 eb000000 bl stopMMCClock
; 809 :
; 810 : return MMC_NO_ERROR;
00128 e1a00009 mov r0, r9
; 811 : }
0012c e8bd83f0 ldmia sp!, {r4 - r9, pc}
00130 |$L41600|
00130 00000000 DCD |gSDMMCRegPtr|
00134 |$M41597|
ENDP ; |MMCReceive|
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
|$T41611| DCD |MMCSetupXfer|
DCD 0x40003302
; Function compile flags: /Ogsy
00000 AREA |.text| { |MMCSetupXfer| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MMCSetupXfer| PROC
; 836 : {
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 e24dd008 sub sp, sp, #8
00008 |$M41609|
00008 e1a04000 mov r4, r0
0000c e1a06002 mov r6, r2
; 837 : UINT16 cmdDatContReg;
; 838 : UINT16 blkLength;
; 839 : UINT16 noBlocks = nBlocks;
00010 e1cd10b2 strh r1, [sp, #2]
; 840 :
; 841 : cmdDatContReg = NO;
00014 e3a00000 mov r0, #0
00018 e1cd00b4 strh r0, [sp, #4]
; 842 : blkLength = 0;
; 843 : 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
; 844 :
; 845 :
; 846 : #if (USE_INTERRUPT)
; 847 :
; 848 :
; 849 : #else
; 850 :
; 851 :
; 852 : #endif
; 853 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK, 0x3F);
00034 e59f508c ldr r5, [pc, #0x8C]
00038 e3a0203f mov r2, #0x3F
0003c e5950000 ldr r0, [r5]
00040 e2801034 add r1, r0, #0x34
; 854 :
; 855 : if (cmdIndex != SSTOP_TRANSMISSION)
00044 e1a00804 mov r0, r4, lsl #16
00048 e5812000 str r2, [r1]
0004c e1a01820 mov r1, r0, lsr #16
; 856 : {
; 857 :
; 858 : if ( cmdDatContReg != NO )
00050 e1dd20b4 ldrh r2, [sp, #4]
00054 e351004c cmp r1, #0x4C
00058 0a00000f beq |$L41339|
0005c e1a00802 mov r0, r2, lsl #16
00060 e1b01820 movs r1, r0, lsr #16
00064 0a00000c beq |$L41339|
; 859 : {
; 860 :
; 861 :
; 862 :
; 863 : 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]
; 864 :
; 865 :
; 866 :
; 867 :
; 868 : 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 |$L41339|
; 869 : }
; 870 : }
; 871 :
; 872 :
; 873 : 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
; 874 :
; 875 :
; 876 :
; 877 :
; 878 : 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]
; 879 :
; 880 : }
000c0 e28dd008 add sp, sp, #8
000c4 e8bd8070 ldmia sp!, {r4 - r6, pc}
000c8 |$L41613|
000c8 00000000 DCD |gSDMMCRegPtr|
000cc |$M41610|
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
|$T41623| DCD |MMCPrepareAndSetup|
DCD 0x40001401
; Function compile flags: /Ogsy
00000 AREA |.text| { |MMCPrepareAndSetup| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MMCPrepareAndSetup| PROC
; 904 : {
00000 e92d40f0 stmdb sp!, {r4 - r7, lr}
00004 |$M41621|
00004 e1a05000 mov r5, r0
00008 e1a07001 mov r7, r1
0000c e1a06002 mov r6, r2
00010 e1a04003 mov r4, r3
; 905 :
; 906 : if ( !stopMMCClock() )
00014 eb000000 bl stopMMCClock
00018 e3500000 cmp r0, #0
; 907 : return NO;
0001c 03a00000 moveq r0, #0
; 922 : }
00020 08bd80f0 ldmeqia sp!, {r4 - r7, pc}
; 908 :
; 909 :
; 913 : MMCSendCommand( Arg, Cmd, 0 );
00024 e3a02000 mov r2, #0
00028 e1a01007 mov r1, r7
0002c e1a00005 mov r0, r5
00030 eb000000 bl MMCSendCommand
; 914 :
; 915 :
; 916 : MMCSetupXfer( Cmd, noBlocks, Resp );
00034 e1a02004 mov r2, r4
00038 e1a01006 mov r1, r6
0003c e1a00007 mov r0, r7
00040 eb000000 bl MMCSetupXfer
; 917 :
; 918 :
; 919 : startMMCClock();
00044 eb000000 bl startMMCClock
; 920 :
; 921 : return YES;
00048 e3a00001 mov r0, #1
; 922 : }
0004c e8bd80f0 ldmia sp!, {r4 - r7, pc}
00050 |$M41622|
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
|$T41635| DCD |checkCardBusy|
DCD 0x40001000
; Function compile flags: /Ogsy
00000 AREA |.text| { |checkCardBusy| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |checkCardBusy| PROC
; 942 : {
00000 |$M41633|
; 943 : UINT32 dStatus, dtimer;
; 944 :
; 945 : 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 |$L41359|
; 952 : {
; 953 :
; 954 :
; 955 :
; 956 : dStatus = READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS);
00010 e5920000 ldr r0, [r2]
; 957 :
; 958 : if ( (dStatus & DONE_PROG_RDWR) || (dStatus & DONE_WDATA_XFER) )
00014 e3100a01 tst r0, #1, 20
00018 1a000005 bne |$L41628|
0001c e3100b02 tst r0, #2, 22
00020 1a000003 bne |$L41628|
; 960 :
; 961 : dtimer--;
00024 e2533001 subs r3, r3, #1
; 946 :
; 947 :
; 951 : while ( dtimer )
00028 1afffff8 bne |$L41359|
; 962 : }
; 963 :
; 964 :
; 965 : return NO;
0002c e3a00000 mov r0, #0
; 966 : }
00030 e1a0f00e mov pc, lr
00034 |$L41628|
; 959 : return YES;
00034 e3a00001 mov r0, #1
; 966 : }
00038 e1a0f00e mov pc, lr
0003c |$L41637|
0003c 00000000 DCD |gSDMMCRegPtr|
00040 |$M41634|
ENDP ; |checkCardBusy|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -