📄 bsp_sdio_sd.txt
字号:
0000f2 2404 MOVS r4,#4 ;2934
0000f4 4620 MOV r0,r4 ;2935
0000f6 e7a2 B |L7.62|
|L7.248|
0000f8 2002 MOVS r0,#2 ;2937
0000fa f7fffffe BL SDIO_GetFlagStatus
0000fe b128 CBZ r0,|L7.268|
000100 2002 MOVS r0,#2 ;2939
000102 f7fffffe BL SDIO_ClearFlag
000106 2402 MOVS r4,#2 ;2940
000108 4620 MOV r0,r4 ;2941
00010a e798 B |L7.62|
|L7.268|
00010c 2020 MOVS r0,#0x20 ;2943
00010e f7fffffe BL SDIO_GetFlagStatus
000112 b128 CBZ r0,|L7.288|
000114 2020 MOVS r0,#0x20 ;2945
000116 f7fffffe BL SDIO_ClearFlag
00011a 2406 MOVS r4,#6 ;2946
00011c 4620 MOV r0,r4 ;2947
00011e e78e B |L7.62|
|L7.288|
000120 f44f7000 MOV r0,#0x200 ;2949
000124 f7fffffe BL SDIO_GetFlagStatus
000128 b130 CBZ r0,|L7.312|
00012a f44f7000 MOV r0,#0x200 ;2951
00012e f7fffffe BL SDIO_ClearFlag
000132 2407 MOVS r4,#7 ;2952
000134 4620 MOV r0,r4 ;2953
000136 e782 B |L7.62|
|L7.312|
000138 f24050ff MOV r0,#0x5ff ;2957
00013c f7fffffe BL SDIO_ClearFlag
000140 9800 LDR r0,[sp,#0] ;2959
000142 0600 LSLS r0,r0,#24 ;2959
000144 9900 LDR r1,[sp,#0] ;2959
000146 f401417f AND r1,r1,#0xff00 ;2959
00014a ea402001 ORR r0,r0,r1,LSL #8 ;2959
00014e 9900 LDR r1,[sp,#0] ;2959
000150 f401017f AND r1,r1,#0xff0000 ;2959
000154 ea402011 ORR r0,r0,r1,LSR #8 ;2959
000158 9900 LDR r1,[sp,#0] ;2959
00015a ea406011 ORR r0,r0,r1,LSR #24 ;2959
00015e 6068 STR r0,[r5,#4] ;2959
000160 9801 LDR r0,[sp,#4] ;2961
000162 0600 LSLS r0,r0,#24 ;2961
000164 9901 LDR r1,[sp,#4] ;2961
000166 f401417f AND r1,r1,#0xff00 ;2961
00016a ea402001 ORR r0,r0,r1,LSL #8 ;2961
00016e 9901 LDR r1,[sp,#4] ;2961
000170 f401017f AND r1,r1,#0xff0000 ;2961
000174 ea402011 ORR r0,r0,r1,LSR #8 ;2961
000178 9901 LDR r1,[sp,#4] ;2961
00017a ea406011 ORR r0,r0,r1,LSR #24 ;2961
00017e 6028 STR r0,[r5,#0] ;2961
000180 4620 MOV r0,r4 ;2963
000182 e75c B |L7.62|
;;;2965
ENDP
|L7.388|
DCD SDIO_CmdInitStructure
|L7.392|
DCD ||RCA||
|L7.396|
DCD 0x000fffff
|L7.400|
DCD SDIO_DataInitStructure
|L7.404|
DCD 0x40018000
AREA ||i.IsCardProgramming||, CODE, READONLY, ALIGN=2
IsCardProgramming PROC
;;;2702 */
;;;2703 static SD_Error IsCardProgramming(uint8_t *pstatus)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;2704 {
000004 4606 MOV r6,r0
;;;2705 SD_Error errorstatus = SD_OK;
000006 272a MOVS r7,#0x2a
;;;2706 __IO uint32_t respR1 = 0, status = 0;
000008 2400 MOVS r4,#0
00000a 2500 MOVS r5,#0
;;;2707
;;;2708 SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16;
00000c 4852 LDR r0,|L8.344|
00000e 6800 LDR r0,[r0,#0] ; RCA
000010 0400 LSLS r0,r0,#16
000012 4952 LDR r1,|L8.348|
000014 6008 STR r0,[r1,#0] ; SDIO_CmdInitStructure
;;;2709 SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEND_STATUS;
000016 200d MOVS r0,#0xd
000018 6048 STR r0,[r1,#4] ; SDIO_CmdInitStructure
;;;2710 SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
00001a 2040 MOVS r0,#0x40
00001c 6088 STR r0,[r1,#8] ; SDIO_CmdInitStructure
;;;2711 SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
00001e 2000 MOVS r0,#0
000020 60c8 STR r0,[r1,#0xc] ; SDIO_CmdInitStructure
;;;2712 SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
000022 f44f6080 MOV r0,#0x400
000026 6108 STR r0,[r1,#0x10] ; SDIO_CmdInitStructure
;;;2713 SDIO_SendCommand(&SDIO_CmdInitStructure);
000028 4608 MOV r0,r1
00002a f7fffffe BL SDIO_SendCommand
;;;2714
;;;2715 status = SDIO->STA;
00002e 484c LDR r0,|L8.352|
000030 6b45 LDR r5,[r0,#0x34]
;;;2716 while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)))
000032 e001 B |L8.56|
|L8.52|
;;;2717 {
;;;2718 status = SDIO->STA;
000034 484a LDR r0,|L8.352|
000036 6b45 LDR r5,[r0,#0x34]
|L8.56|
000038 f0150f45 TST r5,#0x45 ;2716
00003c d0fa BEQ |L8.52|
;;;2719 }
;;;2720
;;;2721 if (status & SDIO_FLAG_CTIMEOUT)
00003e f0150f04 TST r5,#4
000042 d006 BEQ |L8.82|
;;;2722 {
;;;2723 errorstatus = SD_CMD_RSP_TIMEOUT;
000044 2703 MOVS r7,#3
;;;2724 SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
000046 2004 MOVS r0,#4
000048 f7fffffe BL SDIO_ClearFlag
;;;2725 return(errorstatus);
00004c 4638 MOV r0,r7
|L8.78|
;;;2726 }
;;;2727 else if (status & SDIO_FLAG_CCRCFAIL)
;;;2728 {
;;;2729 errorstatus = SD_CMD_CRC_FAIL;
;;;2730 SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
;;;2731 return(errorstatus);
;;;2732 }
;;;2733
;;;2734 status = (uint32_t)SDIO_GetCommandResponse();
;;;2735
;;;2736 /*!< Check response received is of desired command */
;;;2737 if (status != SD_CMD_SEND_STATUS)
;;;2738 {
;;;2739 errorstatus = SD_ILLEGAL_CMD;
;;;2740 return(errorstatus);
;;;2741 }
;;;2742
;;;2743 /*!< Clear all the static flags */
;;;2744 SDIO_ClearFlag(SDIO_STATIC_FLAGS);
;;;2745
;;;2746
;;;2747 /*!< We have received response, retrieve it for analysis */
;;;2748 respR1 = SDIO_GetResponse(SDIO_RESP1);
;;;2749
;;;2750 /*!< Find out card status */
;;;2751 *pstatus = (uint8_t) ((respR1 >> 9) & 0x0000000F);
;;;2752
;;;2753 if ((respR1 & SD_OCR_ERRORBITS) == SD_ALLZERO)
;;;2754 {
;;;2755 return(errorstatus);
;;;2756 }
;;;2757
;;;2758 if (respR1 & SD_OCR_ADDR_OUT_OF_RANGE)
;;;2759 {
;;;2760 return(SD_ADDR_OUT_OF_RANGE);
;;;2761 }
;;;2762
;;;2763 if (respR1 & SD_OCR_ADDR_MISALIGNED)
;;;2764 {
;;;2765 return(SD_ADDR_MISALIGNED);
;;;2766 }
;;;2767
;;;2768 if (respR1 & SD_OCR_BLOCK_LEN_ERR)
;;;2769 {
;;;2770 return(SD_BLOCK_LEN_ERR);
;;;2771 }
;;;2772
;;;2773 if (respR1 & SD_OCR_ERASE_SEQ_ERR)
;;;2774 {
;;;2775 return(SD_ERASE_SEQ_ERR);
;;;2776 }
;;;2777
;;;2778 if (respR1 & SD_OCR_BAD_ERASE_PARAM)
;;;2779 {
;;;2780 return(SD_BAD_ERASE_PARAM);
;;;2781 }
;;;2782
;;;2783 if (respR1 & SD_OCR_WRITE_PROT_VIOLATION)
;;;2784 {
;;;2785 return(SD_WRITE_PROT_VIOLATION);
;;;2786 }
;;;2787
;;;2788 if (respR1 & SD_OCR_LOCK_UNLOCK_FAILED)
;;;2789 {
;;;2790 return(SD_LOCK_UNLOCK_FAILED);
;;;2791 }
;;;2792
;;;2793 if (respR1 & SD_OCR_COM_CRC_FAILED)
;;;2794 {
;;;2795 return(SD_COM_CRC_FAILED);
;;;2796 }
;;;2797
;;;2798 if (respR1 & SD_OCR_ILLEGAL_CMD)
;;;2799 {
;;;2800 return(SD_ILLEGAL_CMD);
;;;2801 }
;;;2802
;;;2803 if (respR1 & SD_OCR_CARD_ECC_FAILED)
;;;2804 {
;;;2805 return(SD_CARD_ECC_FAILED);
;;;2806 }
;;;2807
;;;2808 if (respR1 & SD_OCR_CC_ERROR)
;;;2809 {
;;;2810 return(SD_CC_ERROR);
;;;2811 }
;;;2812
;;;2813 if (respR1 & SD_OCR_GENERAL_UNKNOWN_ERROR)
;;;2814 {
;;;2815 return(SD_GENERAL_UNKNOWN_ERROR);
;;;2816 }
;;;2817
;;;2818 if (respR1 & SD_OCR_STREAM_READ_UNDERRUN)
;;;2819 {
;;;2820 return(SD_STREAM_READ_UNDERRUN);
;;;2821 }
;;;2822
;;;2823 if (respR1 & SD_OCR_STREAM_WRITE_OVERRUN)
;;;2824 {
;;;2825 return(SD_STREAM_WRITE_OVERRUN);
;;;2826 }
;;;2827
;;;2828 if (respR1 & SD_OCR_CID_CSD_OVERWRIETE)
;;;2829 {
;;;2830 return(SD_CID_CSD_OVERWRITE);
;;;2831 }
;;;2832
;;;2833 if (respR1 & SD_OCR_WP_ERASE_SKIP)
;;;2834 {
;;;2835 return(SD_WP_ERASE_SKIP);
;;;2836 }
;;;2837
;;;2838 if (respR1 & SD_OCR_CARD_ECC_DISABLED)
;;;2839 {
;;;2840 return(SD_CARD_ECC_DISABLED);
;;;2841 }
;;;2842
;;;2843 if (respR1 & SD_OCR_ERASE_RESET)
;;;2844 {
;;;2845 return(SD_ERASE_RESET);
;;;2846 }
;;;2847
;;;2848 if (respR1 & SD_OCR_AKE_SEQ_ERROR)
;;;2849 {
;;;2850 return(SD_AKE_SEQ_ERROR);
;;;2851 }
;;;2852
;;;2853 return(errorstatus);
;;;2854 }
00004e e8bd81f0 POP {r4-r8,pc}
|L8.82|
000052 f0150f01 TST r5,#1 ;2727
000056 d005 BEQ |L8.100|
000058 2701 MOVS r7,#1 ;2729
00005a 2001 MOVS r0,#1 ;2730
00005c f7fffffe BL SDIO_ClearFlag
000060 4638 MOV r0,r7 ;2731
000062 e7f4 B |L8.78|
|L8.100|
000064 f7fffffe BL SDIO_GetCommandResponse
000068 4605 MOV r5,r0 ;2734
00006a 2d0d CMP r5,#0xd ;2737
00006c d002 BEQ |L8.116|
00006e 2710 MOVS r7,#0x10 ;2739
000070 4638 MOV r0,r7 ;2740
000072 e7ec B |L8.78|
|L8.116|
000074 f24050ff MOV r0,#0x5ff ;2744
000078 f7fffffe BL SDIO_ClearFlag
00007c 2000 MOVS r0,#0 ;2748
00007e f7fffffe BL SDIO_GetResponse
000082 4604 MOV r4,r0 ;2748
000084 f3c42043 UBFX r0,r4,#9,#4 ;2751
000088 7030 STRB r0,[r6,#0] ;2751
00008a 4836 LDR r0,|L8.356|
00008c 4204 TST r4,r0 ;2753
00008e d101 BNE |L8.148|
000090 4638 MOV r0,r7 ;2755
000092 e7dc B |L8.78|
|L8.148|
000094 f0144f00 TST r4,#0x80000000 ;2758
000098 d001 BEQ |L8.158|
00009a 201c MOVS r0,#0x1c ;2760
00009c e7d7 B |L8.78|
|L8.158|
00009e f0144f80 TST r4,#0x40000000 ;2763
0000a2 d001 BEQ |L8.168|
0000a4 2009 MOVS r0,#9 ;2765
0000a6 e7d2 B |L8.78|
|L8.168|
0000a8 f0145f00 TST r4,#0x20000000 ;2768
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -