📄 sdcard.txt
字号:
;;;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 + -