⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdcard.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;2296     }
;;;2297   
;;;2298     if (status & SDIO_FLAG_CTIMEOUT)
00000e  0741              LSLS     r1,r0,#29
000010  d502              BPL      |L2.24|
;;;2299     {
;;;2300       errorstatus = SD_CMD_RSP_TIMEOUT;
000012  2403              MOVS     r4,#3
;;;2301       SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
000014  2004              MOVS     r0,#4
;;;2302       return(errorstatus);
000016  e003              B        |L2.32|
                  |L2.24|
;;;2303     }
;;;2304     else if (status & SDIO_FLAG_CCRCFAIL)
000018  07c0              LSLS     r0,r0,#31
00001a  d005              BEQ      |L2.40|
;;;2305     {
;;;2306       errorstatus = SD_CMD_CRC_FAIL;
00001c  2401              MOVS     r4,#1
;;;2307       SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
00001e  4620              MOV      r0,r4
                  |L2.32|
;;;2308       return(errorstatus);
;;;2309     }
;;;2310   
;;;2311     /* Clear all the static flags */
;;;2312     SDIO_ClearFlag(SDIO_STATIC_FLAGS);
000020  f7fffffe          BL       SDIO_ClearFlag
;;;2313   
;;;2314     return(errorstatus);
000024  4620              MOV      r0,r4
;;;2315   }
000026  bd10              POP      {r4,pc}
                  |L2.40|
000028  f24050ff          MOV      r0,#0x5ff             ;2312
00002c  e7f8              B        |L2.32|
;;;2316   
                          ENDP

00002e  0000              DCW      0x0000
                  |L2.48|
                          DCD      0x40018000

                          AREA ||i.CmdResp6Error||, CODE, READONLY, ALIGN=2

                  CmdResp6Error PROC
;;;2326   *******************************************************************************/
;;;2327   static SD_Error CmdResp6Error(u8 cmd, u16 *prca)
000000  b570              PUSH     {r4-r6,lr}
;;;2328   {
000002  460c              MOV      r4,r1
;;;2329     SD_Error errorstatus = SD_OK;
;;;2330     u32 status;
;;;2331     u32 response_r1;
;;;2332   
;;;2333     status = SDIO->STA;
000004  4919              LDR      r1,|L3.108|
000006  4606              MOV      r6,r0                 ;2328
000008  252a              MOVS     r5,#0x2a              ;2329
                  |L3.10|
;;;2334   
;;;2335     while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND)))
;;;2336     {
;;;2337       status = SDIO->STA;
00000a  6b48              LDR      r0,[r1,#0x34]
00000c  f0100f45          TST      r0,#0x45              ;2335
000010  d0fb              BEQ      |L3.10|
;;;2338     }
;;;2339   
;;;2340     if (status & SDIO_FLAG_CTIMEOUT)
000012  0741              LSLS     r1,r0,#29
000014  d502              BPL      |L3.28|
;;;2341     {
;;;2342       errorstatus = SD_CMD_RSP_TIMEOUT;
000016  2403              MOVS     r4,#3
;;;2343       SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
000018  2004              MOVS     r0,#4
;;;2344       return(errorstatus);
00001a  e003              B        |L3.36|
                  |L3.28|
;;;2345     }
;;;2346     else if (status & SDIO_FLAG_CCRCFAIL)
00001c  07c0              LSLS     r0,r0,#31
00001e  d005              BEQ      |L3.44|
;;;2347     {
;;;2348       errorstatus = SD_CMD_CRC_FAIL;
000020  2401              MOVS     r4,#1
;;;2349       SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
000022  4620              MOV      r0,r4
                  |L3.36|
000024  f7fffffe          BL       SDIO_ClearFlag
;;;2350       return(errorstatus);
000028  4620              MOV      r0,r4
;;;2351     }
;;;2352   
;;;2353     /* Check response received is of desired command */
;;;2354     if (SDIO_GetCommandResponse() != cmd)
;;;2355     {
;;;2356       errorstatus = SD_ILLEGAL_CMD;
;;;2357       return(errorstatus);
;;;2358     }
;;;2359   
;;;2360     /* Clear all the static flags */
;;;2361     SDIO_ClearFlag(SDIO_STATIC_FLAGS);
;;;2362   
;;;2363     /* We have received response, retrieve it.  */
;;;2364     response_r1 = SDIO_GetResponse(SDIO_RESP1);
;;;2365   
;;;2366     if (SD_ALLZERO == (response_r1 & (SD_R6_GENERAL_UNKNOWN_ERROR | SD_R6_ILLEGAL_CMD | SD_R6_COM_CRC_FAILED)))
;;;2367     {
;;;2368       *prca = (u16) (response_r1 >> 16);
;;;2369       return(errorstatus);
;;;2370     }
;;;2371   
;;;2372     if (response_r1 & SD_R6_GENERAL_UNKNOWN_ERROR)
;;;2373     {
;;;2374       return(SD_GENERAL_UNKNOWN_ERROR);
;;;2375     }
;;;2376   
;;;2377     if (response_r1 & SD_R6_ILLEGAL_CMD)
;;;2378     {
;;;2379       return(SD_ILLEGAL_CMD);
;;;2380     }
;;;2381   
;;;2382     if (response_r1 & SD_R6_COM_CRC_FAILED)
;;;2383     {
;;;2384       return(SD_COM_CRC_FAILED);
;;;2385     }
;;;2386   
;;;2387     return(errorstatus);
;;;2388   }
00002a  bd70              POP      {r4-r6,pc}
                  |L3.44|
00002c  f7fffffe          BL       SDIO_GetCommandResponse
000030  42b0              CMP      r0,r6                 ;2354
000032  d113              BNE      |L3.92|
000034  f24050ff          MOV      r0,#0x5ff             ;2361
000038  f7fffffe          BL       SDIO_ClearFlag
00003c  2000              MOVS     r0,#0                 ;2364
00003e  f7fffffe          BL       SDIO_GetResponse
000042  f4104f60          TST      r0,#0xe000            ;2366
000046  d103              BNE      |L3.80|
000048  ea4f4010          LSR      r0,r0,#16             ;2368
00004c  8020              STRH     r0,[r4,#0]            ;2368
00004e  e00b              B        |L3.104|
                  |L3.80|
000050  0481              LSLS     r1,r0,#18             ;2372
000052  d501              BPL      |L3.88|
000054  2013              MOVS     r0,#0x13              ;2374
000056  bd70              POP      {r4-r6,pc}
                  |L3.88|
000058  0441              LSLS     r1,r0,#17             ;2377
00005a  d501              BPL      |L3.96|
                  |L3.92|
00005c  2010              MOVS     r0,#0x10              ;2379
00005e  bd70              POP      {r4-r6,pc}
                  |L3.96|
000060  0400              LSLS     r0,r0,#16             ;2382
000062  d501              BPL      |L3.104|
000064  200f              MOVS     r0,#0xf               ;2384
000066  bd70              POP      {r4-r6,pc}
                  |L3.104|
000068  4628              MOV      r0,r5                 ;2387
00006a  bd70              POP      {r4-r6,pc}
;;;2389   
                          ENDP

                  |L3.108|
                          DCD      0x40018000

                          AREA ||i.DMA_RxConfiguration||, CODE, READONLY, ALIGN=2

                  DMA_RxConfiguration PROC
;;;2867   *******************************************************************************/
;;;2868   static void DMA_RxConfiguration(u32 *BufferDST, u32 BufferSize)
000000  b570              PUSH     {r4-r6,lr}
;;;2869   {
000002  4606              MOV      r6,r0
000004  b08c              SUB      sp,sp,#0x30
000006  460d              MOV      r5,r1
;;;2870     DMA_InitTypeDef DMA_InitStructure;
;;;2871   
;;;2872     DMA_ClearFlag(DMA2_FLAG_TC4 | DMA2_FLAG_TE4 | DMA2_FLAG_HT4 | DMA2_FLAG_GL4);
000008  4811              LDR      r0,|L4.80|
00000a  f7fffffe          BL       DMA_ClearFlag
;;;2873   
;;;2874     /* DMA2 Channel4 disable */
;;;2875     DMA_Cmd(DMA2_Channel4, DISABLE);
00000e  4c11              LDR      r4,|L4.84|
000010  2100              MOVS     r1,#0
000012  4620              MOV      r0,r4
000014  f7fffffe          BL       DMA_Cmd
;;;2876   
;;;2877     /* DMA2 Channel4 Config */
;;;2878     DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)SDIO_FIFO_Address;
000018  480f              LDR      r0,|L4.88|
;;;2879     DMA_InitStructure.DMA_MemoryBaseAddr = (u32)BufferDST;
;;;2880     DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
00001a  e9cd0601          STRD     r0,r6,[sp,#4]
00001e  2000              MOVS     r0,#0
;;;2881     DMA_InitStructure.DMA_BufferSize = BufferSize / 4;
000020  08a9              LSRS     r1,r5,#2
;;;2882     DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
000022  e9cd0103          STRD     r0,r1,[sp,#0xc]
;;;2883     DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
000026  2180              MOVS     r1,#0x80
;;;2884     DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
000028  e9cd0105          STRD     r0,r1,[sp,#0x14]
00002c  0089              LSLS     r1,r1,#2
;;;2885     DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
00002e  9107              STR      r1,[sp,#0x1c]
000030  0089              LSLS     r1,r1,#2
;;;2886     DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
;;;2887     DMA_InitStructure.DMA_Priority = DMA_Priority_High;
000032  e9cd1008          STRD     r1,r0,[sp,#0x20]
000036  0089              LSLS     r1,r1,#2
;;;2888     DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
;;;2889     DMA_Init(DMA2_Channel4, &DMA_InitStructure);
000038  e9cd100a          STRD     r1,r0,[sp,#0x28]
00003c  a901              ADD      r1,sp,#4
00003e  4620              MOV      r0,r4
000040  f7fffffe          BL       DMA_Init
;;;2890   
;;;2891     /* DMA2 Channel4 enable */
;;;2892     DMA_Cmd(DMA2_Channel4, ENABLE);
000044  2101              MOVS     r1,#1
000046  4620              MOV      r0,r4
000048  f7fffffe          BL       DMA_Cmd
;;;2893   }
00004c  b00c              ADD      sp,sp,#0x30
00004e  bd70              POP      {r4-r6,pc}
;;;2894   
                          ENDP

                  |L4.80|
                          DCD      0x1000f000
                  |L4.84|
                          DCD      0x40020444
                  |L4.88|
                          DCD      0x40018080

                          AREA ||i.DMA_TxConfiguration||, CODE, READONLY, ALIGN=2

                  DMA_TxConfiguration PROC
;;;2832   *******************************************************************************/
;;;2833   static void DMA_TxConfiguration(u32 *BufferSRC, u32 BufferSize)
000000  b570              PUSH     {r4-r6,lr}
;;;2834   {
000002  4606              MOV      r6,r0
000004  b08c              SUB      sp,sp,#0x30
000006  460c              MOV      r4,r1
;;;2835     DMA_InitTypeDef DMA_InitStructure;
;;;2836   
;;;2837     DMA_ClearFlag(DMA2_FLAG_TC4 | DMA2_FLAG_TE4 | DMA2_FLAG_HT4 | DMA2_FLAG_GL4);
000008  4812              LDR      r0,|L5.84|
00000a  f7fffffe          BL       DMA_ClearFlag
;;;2838   
;;;2839     /* DMA2 Channel4 disable */
;;;2840     DMA_Cmd(DMA2_Channel4, DISABLE);
00000e  4d12              LDR      r5,|L5.88|
000010  2100              MOVS     r1,#0
000012  4628              MOV      r0,r5
000014  f7fffffe          BL       DMA_Cmd
;;;2841   
;;;2842     /* DMA2 Channel4 Config */
;;;2843     DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)SDIO_FIFO_Address;
000018  4810              LDR      r0,|L5.92|
;;;2844     DMA_InitStructure.DMA_MemoryBaseAddr = (u32)BufferSRC;
;;;2845     DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
00001a  e9cd0601          STRD     r0,r6,[sp,#4]
00001e  2010              MOVS     r0,#0x10
;;;2846     DMA_InitStructure.DMA_BufferSize = BufferSize / 4;
000020  9003              STR      r0,[sp,#0xc]
000022  08a0              LSRS     r0,r4,#2
;;;2847     DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
000024  9004              STR      r0,[sp,#0x10]
000026  2000              MOVS     r0,#0
;;;2848     DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
000028  2180              MOVS     r1,#0x80
;;;2849     DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
00002a  e9cd0105          STRD     r0,r1,[sp,#0x14]
00002e  0089              LSLS     r1,r1,#2
;;;2850     DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
000030  9107              STR      r1,[sp,#0x1c]
000032  0089              LSLS     r1,r1,#2
;;;2851     DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
;;;2852     DMA_InitStructure.DMA_Priority = DMA_Priority_High;
000034  e9cd1008          STRD     r1,r0,[sp,#0x20]
000038  0089              LSLS     r1,r1,#2
;;;2853     DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
;;;2854     DMA_Init(DMA2_Channel4, &DMA_InitStructure);
00003a  e9cd100a          STRD     r1,r0,[sp,#0x28]
00003e  a901              ADD      r1,sp,#4
000040  4628              MOV      r0,r5
000042  f7fffffe          BL       DMA_Init
;;;2855   
;;;2856     /* DMA2 Channel4 enable */
;;;2857     DMA_Cmd(DMA2_Channel4, ENABLE);
000046  2101              MOVS     r1,#1
000048  4628              MOV      r0,r5
00004a  f7fffffe          BL       DMA_Cmd
;;;2858   }
00004e  b00c              ADD      sp,sp,#0x30
000050  bd70              POP      {r4-r6,pc}
;;;2859   
                          ENDP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -