📄 mmcoem.cod
字号:
; 602 : }
; 603 :
; 604 : else if ( dstat & END_CMD_RES )
00050 e3110a02 tst r1, #2, 20
00054 1a00000d bne |$L41522|
; 576 : while ( dtimer )
00058 e3520000 cmp r2, #0
0005c 1afffff1 bne |$L41216|
; 619 : }
; 620 :
; 621 :
; 622 : return MMC_NO_ERROR;
; 623 : }
; 624 : }
; 625 :
; 626 :
; 627 :
; 628 :
; 629 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK, 0x3F);
00060 e2840034 add r0, r4, #0x34
00064 e3a0103f mov r1, #0x3F
00068 e5801000 str r1, [r0]
0006c |$L41518|
; 630 :
; 631 : return (MMC_CARD_IS_NOT_RESPONDING);
0006c e3a070c9 mov r7, #0xC9
00070 |$L41209|
; 586 : {
; 587 : return MMC_CARD_IS_NOT_RESPONDING;
00070 e1a00007 mov r0, r7
; 632 : }
00074 e8bd81f0 ldmia sp!, {r4 - r8, pc}
00078 |$L41519|
; 591 : {
; 592 : return (MMC_CMD_CRC_ERROR );
00078 e3a070ca mov r7, #0xCA
; 586 : {
; 587 : return MMC_CARD_IS_NOT_RESPONDING;
0007c e1a00007 mov r0, r7
; 632 : }
00080 e8bd81f0 ldmia sp!, {r4 - r8, pc}
00084 |$L41521|
; 600 : {
; 601 : return MMC_DATA_STATUS_CRC_ERROR;
00084 e3a070cc mov r7, #0xCC
; 586 : {
; 587 : return MMC_CARD_IS_NOT_RESPONDING;
00088 e1a00007 mov r0, r7
; 632 : }
0008c e8bd81f0 ldmia sp!, {r4 - r8, pc}
00090 |$L41522|
; 605 : {
; 606 :
; 607 : dtmp = (respLength + 1) & 0xFE;
; 608 : respLength = dtmp;
00090 e1a00803 mov r0, r3, lsl #16
00094 e1a01820 mov r1, r0, lsr #16
00098 e2812001 add r2, r1, #1
0009c e20200fe and r0, r2, #0xFE
; 609 : i = 0;
; 610 : while ( i < respLength )
000a0 e1a01800 mov r1, r0, lsl #16
000a4 e1a05821 mov r5, r1, lsr #16
000a8 e3a07000 mov r7, #0
000ac e3550000 cmp r5, #0
000b0 9affffee bls |$L41209|
000b4 e1a02007 mov r2, r7
000b8 ea000000 b |$L41229|
000bc |$L41525|
000bc e5964000 ldr r4, [r6]
000c0 |$L41229|
; 611 : {
; 612 :
; 613 : dtmp = READ_REGISTER_ULONG(&gSDMMCRegPtr->RES_FIFO);
000c0 e2840040 add r0, r4, #0x40
000c4 e5904000 ldr r4, [r0]
; 614 :
; 615 : respBuff[i] = (UCHAR)(dtmp & 0xFF);
; 616 : i++;
000c8 e2820001 add r0, r2, #1
000cc e20410ff and r1, r4, #0xFF
000d0 e7c24008 strb r4, [r2, +r8]
000d4 e1a01800 mov r1, r0, lsl #16
000d8 e1a02821 mov r2, r1, lsr #16
; 617 : respBuff[i] = (UCHAR)(dtmp >> 8);
000dc e1a00802 mov r0, r2, lsl #16
000e0 e1a03820 mov r3, r0, lsr #16
000e4 e1a01424 mov r1, r4, lsr #8
000e8 e20100ff and r0, r1, #0xFF
000ec e7c31008 strb r1, [r3, +r8]
; 618 : i++;
000f0 e2831001 add r1, r3, #1
000f4 e1a00801 mov r0, r1, lsl #16
000f8 e1a02820 mov r2, r0, lsr #16
000fc e1a01802 mov r1, r2, lsl #16
00100 e1a02821 mov r2, r1, lsr #16
00104 e1520005 cmp r2, r5
00108 3affffeb bcc |$L41525|
; 586 : {
; 587 : return MMC_CARD_IS_NOT_RESPONDING;
0010c e1a00007 mov r0, r7
; 632 : }
00110 e8bd81f0 ldmia sp!, {r4 - r8, pc}
00114 |$L41538|
00114 00000000 DCD |gSDMMCRegPtr|
00118 |$M41535|
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
|$T41545| DCD |mmcif_data_swap|
DCD 0x40000a01
; Function compile flags: /Ogsy
00000 AREA |.text| { |mmcif_data_swap| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |mmcif_data_swap| PROC
; 636 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M41543|
00004 e1a04000 mov r4, r0
; 637 : UINT16 hi, lo;
; 638 : hi = ((UINT16) val & 0x00FF) << 8;
; 639 : lo = ((UINT16) val & 0xFF00) >> 8;
; 640 : 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
; 641 : }
00024 e8bd8010 ldmia sp!, {r4, pc}
00028 |$M41544|
ENDP ; |mmcif_data_swap|
EXPORT |MMCTransmit|
00000 AREA |.text| { |MMCTransmit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCTransmit|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCTransmit| } ; comdat associative
|$T41567| DCD |MMCTransmit|
DCD 0x40005401
; Function compile flags: /Ogsy
00000 AREA |.text| { |MMCTransmit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MMCTransmit| PROC
; 666 : {
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 |$M41565|
00004 e1a05000 mov r5, r0
00008 e1a07001 mov r7, r1
; 667 : UINT16 *dBufPtr;
; 668 :
; 669 :
; 670 : UINT16 dLength;
; 671 : UINT16 y;
; 672 :
; 673 :
; 674 : dBufPtr = (UINT16 *)dBuf;
; 675 : dLength = dataLength;
; 676 :
; 677 :
; 678 : while(dLength)
0000c e59f8138 ldr r8, [pc, #0x138]
00010 e3a09000 mov r9, #0
00014 ea00003a b |$L41272|
00018 |$L41257|
00018 e5983000 ldr r3, [r8]
0001c e2831004 add r1, r3, #4
00020 |$L41261|
; 679 : {
; 680 : while(!(READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS) & FIFO_BUFFER_EMPTY));
00020 e5910000 ldr r0, [r1]
00024 e3100040 tst r0, #0x40
00028 0afffffc beq |$L41261|
; 681 :
; 682 : if(dLength%512==0)
0002c e1a00446 mov r0, r6, asr #8
00030 e0861ba0 add r1, r6, r0, lsr #23
00034 e1a024c1 mov r2, r1, asr #9
00038 e0560482 subs r0, r6, r2, lsl #9
0003c 1a000015 bne |$L41263|
; 683 : {
; 684 : for(y = 0; y<256; y++)
00040 e1a04009 mov r4, r9
00044 |$L41264|
; 685 : {
; 686 :
; 687 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO,
; 688 : mmcif_data_swap(*dBufPtr));
00044 e0d500b2 ldrh r0, [r5], #2
00048 eb000000 bl mmcif_data_swap
0004c e1a01800 mov r1, r0, lsl #16
00050 e5980000 ldr r0, [r8]
00054 e1a02821 mov r2, r1, lsr #16
00058 e2801048 add r1, r0, #0x48
; 689 :
; 690 :
; 691 : dBufPtr++;
; 692 : dLength-=2;
0005c e1a00807 mov r0, r7, lsl #16
00060 e5812000 str r2, [r1]
00064 e1a01820 mov r1, r0, lsr #16
00068 e2812cff add r2, r1, #0xFF, 24
0006c e28200fe add r0, r2, #0xFE
00070 e1a01800 mov r1, r0, lsl #16
00074 e2840001 add r0, r4, #1
00078 e1a07821 mov r7, r1, lsr #16
0007c e1a01800 mov r1, r0, lsl #16
00080 e1a02821 mov r2, r1, lsr #16
00084 e1a00802 mov r0, r2, lsl #16
00088 e1a04820 mov r4, r0, lsr #16
0008c e3540c01 cmp r4, #1, 24
00090 3affffeb bcc |$L41264|
; 693 : }
; 694 : }
; 695 : else
00094 ea00001a b |$L41272|
00098 |$L41263|
; 696 : {
; 697 :
; 698 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->BUF_PART_FULL, BUFF_PARTIAL_FULL);
00098 e283004c add r0, r3, #0x4C
0009c e3a01001 mov r1, #1
000a0 e5801000 str r1, [r0]
; 699 :
; 700 : for(y = 0; y<dLength/2; y++)
000a4 e3c60001 bic r0, r6, #1
000a8 e3500000 cmp r0, #0
000ac 9a000014 bls |$L41272|
000b0 e1a04009 mov r4, r9
000b4 |$L41270|
; 701 : {
; 702 :
; 703 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO,
; 704 : mmcif_data_swap((UINT16)*dBufPtr));
000b4 e0d500b2 ldrh r0, [r5], #2
000b8 eb000000 bl mmcif_data_swap
000bc e1a01800 mov r1, r0, lsl #16
000c0 e5980000 ldr r0, [r8]
000c4 e1a02821 mov r2, r1, lsr #16
000c8 e2801048 add r1, r0, #0x48
; 705 :
; 706 :
; 707 : dBufPtr++;
; 708 : dLength-=2;
000cc e2860cff add r0, r6, #0xFF, 24
000d0 e5812000 str r2, [r1]
000d4 e28010fe add r1, r0, #0xFE
000d8 e2840001 add r0, r4, #1
000dc e1a02801 mov r2, r1, lsl #16
000e0 e1a01800 mov r1, r0, lsl #16
000e4 e1a07822 mov r7, r2, lsr #16
000e8 e1a02821 mov r2, r1, lsr #16
000ec e1a00807 mov r0, r7, lsl #16
000f0 e1a01802 mov r1, r2, lsl #16
000f4 e1a06820 mov r6, r0, lsr #16
000f8 e1a04821 mov r4, r1, lsr #16
000fc e15400a6 cmp r4, r6, lsr #1
00100 3affffeb bcc |$L41270|
00104 |$L41272|
; 667 : UINT16 *dBufPtr;
; 668 :
; 669 :
; 670 : UINT16 dLength;
; 671 : UINT16 y;
; 672 :
; 673 :
; 674 : dBufPtr = (UINT16 *)dBuf;
; 675 : dLength = dataLength;
; 676 :
; 677 :
; 678 : while(dLength)
00104 e1a00807 mov r0, r7, lsl #16
00108 e1b06820 movs r6, r0, lsr #16
0010c 1affffc1 bne |$L41257|
; 709 : }
; 710 :
; 711 : }
; 712 : }
; 713 :
; 714 :
; 715 : startMMCClock();
00110 eb000000 bl startMMCClock
00114 e5983000 ldr r3, [r8]
00118 e2831004 add r1, r3, #4
0011c |$L41277|
; 716 :
; 717 :
; 718 :
; 719 : while(!(READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS) & MMCI_DATA_TRAN_DONE));
0011c e5910000 ldr r0, [r1]
00120 e3100b02 tst r0, #2, 22
00124 0afffffc beq |$L41277|
; 720 :
; 721 : mmc_nop_deselect();
00128 eb000000 bl mmc_nop_deselect
0012c e5983000 ldr r3, [r8]
00130 e2831040 add r1, r3, #0x40
00134 |$L41281|
; 722 :
; 723 :
; 724 : while(!(READ_REGISTER_ULONG(&gSDMMCRegPtr->RES_FIFO) & MMCI_PRG_DONE));
00134 e5910000 ldr r0, [r1]
00138 e3100a01 tst r0, #1, 20
0013c 0afffffc beq |$L41281|
; 725 :
; 726 : stopMMCClock();
00140 eb000000 bl stopMMCClock
; 727 : return MMC_NO_ERROR;
00144 e1a00009 mov r0, r9
; 728 : }
00148 e8bd83f0 ldmia sp!, {r4 - r9, pc}
0014c |$L41569|
0014c 00000000 DCD |gSDMMCRegPtr|
00150 |$M41566|
ENDP ; |MMCTransmit|
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
|$T41577| DCD |mmc_nop_deselect|
DCD 0x40001d01
; Function compile flags: /Ogsy
00000 AREA |.text| { |mmc_nop_deselect| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |mmc_nop_deselect| PROC
; 506 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M41575|
; 507 : mmc_status_type cstatus;
; 508 :
; 509 : UINT32 *response;
; 510 : INT32 index, resp_size;
; 511 : stopMMCClock ();
00004 eb000000 bl stopMMCClock
; 512 :
; 513 :
; 514 :
; 515 :
; 516 : WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD, SELECT_DESELECT_CARD);
00008 e59f4060 ldr r4, [pc, #0x60]
0000c e3a02007 mov r2, #7
00010 e5940000 ldr r0, [r4]
00014 e2801038 add r1, r0, #0x38
00018 e5812000 str r2, [r1]
; 517 :
; 518 :
; 519 : 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]
; 520 :
; 521 :
; 522 :
; 523 : 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]
; 524 :
; 525 :
; 526 : startMMCClock ();
0003c eb000000 bl startMMCClock
00040 e5943000 ldr r3, [r4]
00044 e2831004 add r1, r3, #4
00048 |$L41197|
; 527 :
; 528 : response = (UINT32 *) (&cstatus);
; 529 : resp_size = sizeof(cstatus);
; 530 :
; 531 : 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 |$L41197|
00054 e2831040 add r1, r3, #0x40
; 532 : ;
; 533 :
; 534 :
; 535 :
; 536 : for (index = 0; index < (resp_size / 2); index++)
00058 e3a02004 mov r2, #4
0005c |$L41199|
0005c e2422001 sub r2, r2, #1
; 537 : {
; 538 :
; 539 :
; 540 : READ_REGISTER_ULONG(&gSDMMCRegPtr->RES_FIFO);
00060 e5910000 ldr r0, [r1]
00064 e3520000 cmp r2, #0
00068 8afffffb bhi |$L41199|
; 541 :
; 542 : }
; 543 : }
0006c e8bd8010 ldmia sp!, {r4, pc}
00070 |$L41579|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -