📄 mmcoem.cod
字号:
; 614 : else if ( dstat & CRC_WR_ERR )
00040 e3110004 tst r1, #4
00044 1a00000e bne |$L41544|
; 615 : {
; 616 : return MMC_DATA_STATUS_CRC_ERROR;
; 617 : }
; 618 :
; 619 : else if ( dstat & CRC_RD_ERR )
00048 e3110008 tst r1, #8
0004c 1a00000c bne |$L41544|
; 622 : }
; 623 :
; 624 : else if ( dstat & END_CMD_RES )
00050 e3110a02 tst r1, #2, 20
00054 1a00000c bne |$L41545|
; 596 : while ( dtimer )
00058 e3520000 cmp r2, #0
0005c 1afffff1 bne |$L41222|
; 643 : }
; 644 : }
; 645 :
; 646 :
; 647 :
; 648 :
; 649 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK, 0x3F);
00060 e2840034 add r0, r4, #0x34
00064 e3a0103f mov r1, #0x3F
00068 e5801000 str r1, [r0]
0006c |$L41541|
; 650 :
; 651 : return (MMC_CARD_IS_NOT_RESPONDING);
0006c e3a070c9 mov r7, #0xC9
00070 |$L41215|
; 606 : {
; 607 : return MMC_CARD_IS_NOT_RESPONDING;
00070 e1a00007 mov r0, r7
; 652 : }
00074 e8bd41f0 ldmia sp!, {r4 - r8, lr}
00078 e12fff1e bx lr
0007c |$L41542|
; 611 : {
; 612 : return (MMC_CMD_CRC_ERROR );
0007c e3a070ca mov r7, #0xCA
00080 eafffffa b |$L41215|
00084 |$L41544|
; 620 : {
; 621 : return MMC_DATA_STATUS_CRC_ERROR;
00084 e3a070cc mov r7, #0xCC
00088 eafffff8 b |$L41215|
0008c |$L41545|
; 625 : {
; 626 :
; 627 : dtmp = (respLength + 1) & 0xFE;
; 628 : respLength = dtmp;
0008c e1a00803 mov r0, r3, lsl #16
00090 e1a01820 mov r1, r0, lsr #16
00094 e2812001 add r2, r1, #1
00098 e20200fe and r0, r2, #0xFE
; 629 : i = 0;
; 630 : while ( i < respLength )
0009c e1a01800 mov r1, r0, lsl #16
000a0 e1a05821 mov r5, r1, lsr #16
000a4 e3a07000 mov r7, #0
000a8 e3550000 cmp r5, #0
000ac 9affffef bls |$L41215|
000b0 e1a02007 mov r2, r7
000b4 ea000000 b |$L41235|
000b8 |$L41548|
000b8 e5964000 ldr r4, [r6]
000bc |$L41235|
; 631 : {
; 632 :
; 633 : dtmp = READ_REGISTER_ULONG(&gSDMMCRegPtr->RES_FIFO);
000bc e2840040 add r0, r4, #0x40
000c0 e5904000 ldr r4, [r0]
; 634 :
; 635 : respBuff[i] = (UCHAR)(dtmp & 0xFF);
; 636 : i++;
000c4 e2820001 add r0, r2, #1
000c8 e20410ff and r1, r4, #0xFF
000cc e7c24008 strb r4, [r2, +r8]
000d0 e1a01800 mov r1, r0, lsl #16
000d4 e1a02821 mov r2, r1, lsr #16
; 637 : respBuff[i] = (UCHAR)(dtmp >> 8);
000d8 e1a00802 mov r0, r2, lsl #16
000dc e1a03820 mov r3, r0, lsr #16
000e0 e1a01424 mov r1, r4, lsr #8
000e4 e20100ff and r0, r1, #0xFF
000e8 e7c31008 strb r1, [r3, +r8]
; 638 : i++;
000ec e2831001 add r1, r3, #1
000f0 e1a00801 mov r0, r1, lsl #16
000f4 e1a02820 mov r2, r0, lsr #16
000f8 e1a01802 mov r1, r2, lsl #16
000fc e1a02821 mov r2, r1, lsr #16
00100 e1520005 cmp r2, r5
00104 3affffeb bcc |$L41548|
; 639 : }
; 640 :
; 641 :
; 642 : return MMC_NO_ERROR;
00108 eaffffd8 b |$L41215|
0010c |$L41561|
0010c 00000000 DCD |gSDMMCRegPtr|
00110 |$M41558|
ENDP ; |getMMCResponseInfo|
EXPORT |mmcif_data_swap|
00000 AREA |.text| { |mmcif_data_swap| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$mmcif_data_swap|, PDATA, SELECTION=5, ASSOC=|.text| { |mmcif_data_swap| } ; comdat associative
|$T41568| DCD |mmcif_data_swap|
DCD 0x40000b01
; Function compile flags: /Ogsy
00000 AREA |.text| { |mmcif_data_swap| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |mmcif_data_swap| PROC
; 656 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M41566|
00004 e1a04000 mov r4, r0
; 657 : UINT16 hi, lo;
; 658 : hi = ((UINT16) val & 0x00FF) << 8;
; 659 : lo = ((UINT16) val & 0xFF00) >> 8;
; 660 : return (lo + hi);
00008 e1a00804 mov r0, r4, lsl #16
0000c e1a01820 mov r1, r0, lsr #16
00010 e1a02401 mov r2, r1, lsl #8
00014 e1a00802 mov r0, r2, lsl #16
00018 e1a03820 mov r3, r0, lsr #16
0001c e1a01804 mov r1, r4, lsl #16
00020 e0830c21 add r0, r3, r1, lsr #24
; 661 : }
00024 e8bd4010 ldmia sp!, {r4, lr}
00028 e12fff1e bx lr
0002c |$M41567|
ENDP ; |mmcif_data_swap|
EXPORT |MMCTransmit|
IMPORT |HalStallExecution|
00000 AREA |.text| { |MMCTransmit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCTransmit|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCTransmit| } ; comdat associative
|$T41593| DCD |MMCTransmit|
DCD 0x40005c01
; Function compile flags: /Ogsy
00000 AREA |.text| { |MMCTransmit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MMCTransmit| PROC
; 686 : {
00000 e92d47f0 stmdb sp!, {r4 - r10, lr}
00004 |$M41591|
00004 e1a05000 mov r5, r0
00008 e1a08001 mov r8, r1
; 687 : UINT16 *dBufPtr;
; 688 :
; 689 :
; 690 : UINT16 dLength;
; 691 : UINT16 y,data;
; 692 :
; 693 :
; 694 :
; 695 :
; 696 : dBufPtr = (UINT16 *)dBuf;
; 697 : dLength = dataLength;
; 698 :
; 699 :
; 700 : while(dLength)
0000c e59f9158 ldr r9, [pc, #0x158]
00010 e1a06005 mov r6, r5
00014 e3a0a000 mov r10, #0
00018 ea000043 b |$L41280|
0001c |$L41264|
0001c e5990000 ldr r0, [r9]
00020 e2801004 add r1, r0, #4
00024 |$L41268|
; 701 : {
; 702 : while(!(READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS) & FIFO_BUFFER_EMPTY));
00024 e5910000 ldr r0, [r1]
00028 e3100040 tst r0, #0x40
0002c 0afffffc beq |$L41268|
; 703 :
; 709 : HalStallExecution(10);
00030 e3a0000a mov r0, #0xA
00034 eb000000 bl HalStallExecution
; 710 :
; 711 : if(dLength%512==0)
00038 e1a03447 mov r3, r7, asr #8
0003c e0870ba3 add r0, r7, r3, lsr #23
00040 e1a014c0 mov r1, r0, asr #9
00044 e0572481 subs r2, r7, r1, lsl #9
00048 1a00001b bne |$L41270|
; 712 : {
; 713 : for(y = 0; y<256; y++)
0004c e1a0400a mov r4, r10
00050 |$L41271|
; 714 : {
; 715 :
; 716 :
; 717 :
; 718 : data = *(dBuf+1) | (((UINT16) *dBuf) << 8);
; 719 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO,data );
00050 e5d50000 ldrb r0, [r5]
00054 e1a01400 mov r1, r0, lsl #8
00058 e1a02801 mov r2, r1, lsl #16
0005c e5d51001 ldrb r1, [r5, #1]
00060 e1a00822 mov r0, r2, lsr #16
00064 e1a03800 mov r3, r0, lsl #16
00068 e5990000 ldr r0, [r9]
0006c e1812823 orr r2, r1, r3, lsr #16
00070 e2801048 add r1, r0, #0x48
; 720 :
; 721 : HalStallExecution(10);
00074 e3a0000a mov r0, #0xA
00078 e5812000 str r2, [r1]
0007c eb000000 bl HalStallExecution
; 722 : dBuf+=2;
; 723 :
; 724 :
; 725 : dLength-=2;
00080 e1a00808 mov r0, r8, lsl #16
00084 e1a01820 mov r1, r0, lsr #16
00088 e2812cff add r2, r1, #0xFF, 24
0008c e28200fe add r0, r2, #0xFE
00090 e1a01800 mov r1, r0, lsl #16
00094 e2840001 add r0, r4, #1
00098 e1a08821 mov r8, r1, lsr #16
0009c e1a01800 mov r1, r0, lsl #16
000a0 e1a02821 mov r2, r1, lsr #16
000a4 e1a00802 mov r0, r2, lsl #16
000a8 e1a04820 mov r4, r0, lsr #16
000ac e2855002 add r5, r5, #2
000b0 e3540c01 cmp r4, #1, 24
000b4 3affffe5 bcc |$L41271|
; 726 : }
; 727 : }
; 728 : else
000b8 ea00001b b |$L41280|
000bc |$L41270|
; 729 : {
; 730 :
; 731 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->BUF_PART_FULL, BUFF_PARTIAL_FULL);
000bc e5990000 ldr r0, [r9]
000c0 e3a02001 mov r2, #1
000c4 e280104c add r1, r0, #0x4C
; 732 :
; 733 : for(y = 0; y<dLength/2; y++)
000c8 e3c70001 bic r0, r7, #1
000cc e5812000 str r2, [r1]
000d0 e3500000 cmp r0, #0
000d4 9a000014 bls |$L41280|
000d8 e1a0400a mov r4, r10
000dc |$L41278|
; 734 : {
; 735 :
; 736 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO,
; 737 : mmcif_data_swap((UINT16)*dBufPtr));
000dc e0d600b2 ldrh r0, [r6], #2
000e0 eb000000 bl mmcif_data_swap
000e4 e1a01800 mov r1, r0, lsl #16
000e8 e5990000 ldr r0, [r9]
000ec e1a02821 mov r2, r1, lsr #16
000f0 e2801048 add r1, r0, #0x48
; 738 :
; 739 :
; 740 : dBufPtr++;
; 741 : dLength-=2;
000f4 e2870cff add r0, r7, #0xFF, 24
000f8 e5812000 str r2, [r1]
000fc e28010fe add r1, r0, #0xFE
00100 e2840001 add r0, r4, #1
00104 e1a02801 mov r2, r1, lsl #16
00108 e1a01800 mov r1, r0, lsl #16
0010c e1a08822 mov r8, r2, lsr #16
00110 e1a02821 mov r2, r1, lsr #16
00114 e1a00808 mov r0, r8, lsl #16
00118 e1a01802 mov r1, r2, lsl #16
0011c e1a07820 mov r7, r0, lsr #16
00120 e1a04821 mov r4, r1, lsr #16
00124 e15400a7 cmp r4, r7, lsr #1
00128 3affffeb bcc |$L41278|
0012c |$L41280|
; 687 : UINT16 *dBufPtr;
; 688 :
; 689 :
; 690 : UINT16 dLength;
; 691 : UINT16 y,data;
; 692 :
; 693 :
; 694 :
; 695 :
; 696 : dBufPtr = (UINT16 *)dBuf;
; 697 : dLength = dataLength;
; 698 :
; 699 :
; 700 : while(dLength)
0012c e1a00808 mov r0, r8, lsl #16
00130 e1b07820 movs r7, r0, lsr #16
00134 1affffb8 bne |$L41264|
; 742 : }
; 743 :
; 744 : }
; 745 : }
; 746 :
; 747 :
; 748 : startMMCClock();
00138 eb000000 bl startMMCClock
0013c e5993000 ldr r3, [r9]
00140 e2831004 add r1, r3, #4
00144 |$L41285|
; 749 :
; 750 :
; 751 :
; 752 :
; 753 : while(!(READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS) & MMCI_DATA_TRAN_DONE));
00144 e5910000 ldr r0, [r1]
00148 e3100b02 tst r0, #2, 22
0014c 0afffffc beq |$L41285|
00150 |$L41289|
; 754 :
; 755 :
; 756 :
; 757 :
; 758 :
; 759 :
; 760 :
; 761 : while(!(READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS) & MMCI_PRG_DONE));
00150 e5910000 ldr r0, [r1]
00154 e3100a01 tst r0, #1, 20
00158 0afffffc beq |$L41289|
; 762 :
; 763 :
; 764 :
; 765 :
; 766 : stopMMCClock();
0015c eb000000 bl stopMMCClock
; 767 :
; 768 : return MMC_NO_ERROR;
00160 e1a0000a mov r0, r10
; 769 : }
00164 e8bd47f0 ldmia sp!, {r4 - r10, lr}
00168 e12fff1e bx lr
0016c |$L41595|
0016c 00000000 DCD |gSDMMCRegPtr|
00170 |$M41592|
ENDP ; |MMCTransmit|
EXPORT |MMCReceive|
00000 AREA |.text| { |MMCReceive| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCReceive|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCReceive| } ; comdat associative
|$T41618| DCD |MMCReceive|
DCD 0x40005a01
; Function compile flags: /Ogsy
00000 AREA |.text| { |MMCReceive| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MMCReceive| PROC
; 795 : {
00000 e92d47f0 stmdb sp!, {r4 - r10, lr}
00004 |$M41616|
00004 e1a05000 mov r5, r0
00008 e1a09001 mov r9, r1
; 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)
0000c e1a00809 mov r0, r9, lsl #16
00010 e1a07005 mov r7, r5
00014 e3a0a000 mov r10, #0
00018 e1b08820 movs r8, r0, lsr #16
0001c 0a00004b beq |$L41309|
00020 e59f613c ldr r6, [pc, #0x13C]
00024 |$L41308|
; 814 : {
; 815 : if(dLength%512==0)
00024 e1a00448 mov r0, r8, asr #8
00028 e0881ba0 add r1, r8, r0, lsr #23
0002c e1a024c1 mov r2, r1, asr #9
00030 e0580482 subs r0, r8, r2, lsl #9
00034 1a000026 bne |$L41310|
; 816 : {
; 817 : for(i=0;i<waittime;i++)
00038 e5963000 ldr r3, [r6]
0003c e1a0200a mov r2, r10
00040 e2831004 add r1, r3, #4
00044 |$L41311|
; 818 : {
; 819 : if((READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS) & FIFO_BUFFER_FULL))
00044 e5910000 ldr r0, [r1]
00048 e3100080 tst r0, #0x80
0004c 1a000004 bne |$L41602|
00050 e3a00cff mov r0, #0xFF, 24
00054 e2822001 add r2, r2, #1
00058 e38000ff orr r0, r0, #0xFF
0005c e1520000 cmp r2, r0
00060 3afffff7 bcc |$L41311|
00064 |$L41602|
; 820 : break;
; 821 : }
; 822 :
; 823 :
; 824 :
; 825 : for(y = 0; y<256; y++)
00064 e1a0400a mov r4, r10
00068 ea000000 b |$L41316|
0006c |$L41607|
0006c e5963000 ldr r3, [r6]
00070 |$L41316|
; 826 : {
; 827 :
; 828 :
; 829 :
; 830 : data = (UINT16)READ_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO);
00070 e2830048 add r0, r3, #0x48
00074 e5901000 ldr r1, [r0]
00078 e1a02801 mov r2, r1, lsl #16
0007c e1a03822 mov r3, r2, lsr #16
00080 e1a00803 mov r0, r3, lsl #16
00084 e1a01820 mov r1, r0, lsr #16
; 831 :
; 832 :
; 833 :
; 834 : *dBuf++ = data >> 8;
00088 e1a02421 mov r2, r1, lsr #8
0008c e20200ff and r0, r2, #0xFF
00090 e4c52001 strb r2, [r5], #1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -