📄 bsp_sdio_sd.txt
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 561]
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\CpuRAM\Obj\bsp_sdio_sd.o --depend=.\CpuRAM\Obj\bsp_sdio_sd.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=870 -I..\..\Libraries\CMSIS\CM3\CoreSupport -I..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\User\bsp -I..\..\User\fatfs -I..\..\User -IC:\Keil\ARM\INC -IC:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DVECT_TAB_SRAM ..\..\User\bsp\bsp_sdio_sd.c]
THUMB
AREA ||i.CmdError||, CODE, READONLY, ALIGN=1
CmdError PROC
;;;2241 */
;;;2242 static SD_Error CmdError(void)
000000 b570 PUSH {r4-r6,lr}
;;;2243 {
;;;2244 SD_Error errorstatus = SD_OK;
000002 252a MOVS r5,#0x2a
;;;2245 uint32_t timeout;
;;;2246
;;;2247 timeout = SDIO_CMD0TIMEOUT; /*!< 10000 */
000004 f44f3480 MOV r4,#0x10000
;;;2248
;;;2249 while ((timeout > 0) && (SDIO_GetFlagStatus(SDIO_FLAG_CMDSENT) == RESET))
000008 e000 B |L1.12|
|L1.10|
;;;2250 {
;;;2251 timeout--;
00000a 1e64 SUBS r4,r4,#1
|L1.12|
00000c b124 CBZ r4,|L1.24|
00000e 2080 MOVS r0,#0x80 ;2249
000010 f7fffffe BL SDIO_GetFlagStatus
000014 2800 CMP r0,#0 ;2249
000016 d0f8 BEQ |L1.10|
|L1.24|
;;;2252 }
;;;2253
;;;2254 if (timeout == 0)
000018 b914 CBNZ r4,|L1.32|
;;;2255 {
;;;2256 errorstatus = SD_CMD_RSP_TIMEOUT;
00001a 2503 MOVS r5,#3
;;;2257 return(errorstatus);
00001c 4628 MOV r0,r5
|L1.30|
;;;2258 }
;;;2259
;;;2260 /*!< Clear all the static flags */
;;;2261 SDIO_ClearFlag(SDIO_STATIC_FLAGS);
;;;2262
;;;2263 return(errorstatus);
;;;2264 }
00001e bd70 POP {r4-r6,pc}
|L1.32|
000020 f24050ff MOV r0,#0x5ff ;2261
000024 f7fffffe BL SDIO_ClearFlag
000028 4628 MOV r0,r5 ;2263
00002a e7f8 B |L1.30|
;;;2265
ENDP
AREA ||i.CmdResp1Error||, CODE, READONLY, ALIGN=2
CmdResp1Error PROC
;;;2307 */
;;;2308 static SD_Error CmdResp1Error(uint8_t cmd)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;2309 {
000004 4606 MOV r6,r0
;;;2310 SD_Error errorstatus = SD_OK;
000006 272a MOVS r7,#0x2a
;;;2311 uint32_t status;
;;;2312 uint32_t response_r1;
;;;2313
;;;2314 status = SDIO->STA;
000008 4847 LDR r0,|L2.296|
00000a 6b45 LDR r5,[r0,#0x34]
;;;2315
;;;2316 while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)))
00000c e001 B |L2.18|
|L2.14|
;;;2317 {
;;;2318 status = SDIO->STA;
00000e 4846 LDR r0,|L2.296|
000010 6b45 LDR r5,[r0,#0x34]
|L2.18|
000012 f0150f45 TST r5,#0x45 ;2316
000016 d0fa BEQ |L2.14|
;;;2319 }
;;;2320
;;;2321 if (status & SDIO_FLAG_CTIMEOUT)
000018 f0150f04 TST r5,#4
00001c d006 BEQ |L2.44|
;;;2322 {
;;;2323 errorstatus = SD_CMD_RSP_TIMEOUT;
00001e 2703 MOVS r7,#3
;;;2324 SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
000020 2004 MOVS r0,#4
000022 f7fffffe BL SDIO_ClearFlag
;;;2325 return(errorstatus);
000026 4638 MOV r0,r7
|L2.40|
;;;2326 }
;;;2327 else if (status & SDIO_FLAG_CCRCFAIL)
;;;2328 {
;;;2329 errorstatus = SD_CMD_CRC_FAIL;
;;;2330 SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
;;;2331 return(errorstatus);
;;;2332 }
;;;2333
;;;2334 /*!< Check response received is of desired command */
;;;2335 if (SDIO_GetCommandResponse() != cmd)
;;;2336 {
;;;2337 errorstatus = SD_ILLEGAL_CMD;
;;;2338 return(errorstatus);
;;;2339 }
;;;2340
;;;2341 /*!< Clear all the static flags */
;;;2342 SDIO_ClearFlag(SDIO_STATIC_FLAGS);
;;;2343
;;;2344 /*!< We have received response, retrieve it for analysis */
;;;2345 response_r1 = SDIO_GetResponse(SDIO_RESP1);
;;;2346
;;;2347 if ((response_r1 & SD_OCR_ERRORBITS) == SD_ALLZERO)
;;;2348 {
;;;2349 return(errorstatus);
;;;2350 }
;;;2351
;;;2352 if (response_r1 & SD_OCR_ADDR_OUT_OF_RANGE)
;;;2353 {
;;;2354 return(SD_ADDR_OUT_OF_RANGE);
;;;2355 }
;;;2356
;;;2357 if (response_r1 & SD_OCR_ADDR_MISALIGNED)
;;;2358 {
;;;2359 return(SD_ADDR_MISALIGNED);
;;;2360 }
;;;2361
;;;2362 if (response_r1 & SD_OCR_BLOCK_LEN_ERR)
;;;2363 {
;;;2364 return(SD_BLOCK_LEN_ERR);
;;;2365 }
;;;2366
;;;2367 if (response_r1 & SD_OCR_ERASE_SEQ_ERR)
;;;2368 {
;;;2369 return(SD_ERASE_SEQ_ERR);
;;;2370 }
;;;2371
;;;2372 if (response_r1 & SD_OCR_BAD_ERASE_PARAM)
;;;2373 {
;;;2374 return(SD_BAD_ERASE_PARAM);
;;;2375 }
;;;2376
;;;2377 if (response_r1 & SD_OCR_WRITE_PROT_VIOLATION)
;;;2378 {
;;;2379 return(SD_WRITE_PROT_VIOLATION);
;;;2380 }
;;;2381
;;;2382 if (response_r1 & SD_OCR_LOCK_UNLOCK_FAILED)
;;;2383 {
;;;2384 return(SD_LOCK_UNLOCK_FAILED);
;;;2385 }
;;;2386
;;;2387 if (response_r1 & SD_OCR_COM_CRC_FAILED)
;;;2388 {
;;;2389 return(SD_COM_CRC_FAILED);
;;;2390 }
;;;2391
;;;2392 if (response_r1 & SD_OCR_ILLEGAL_CMD)
;;;2393 {
;;;2394 return(SD_ILLEGAL_CMD);
;;;2395 }
;;;2396
;;;2397 if (response_r1 & SD_OCR_CARD_ECC_FAILED)
;;;2398 {
;;;2399 return(SD_CARD_ECC_FAILED);
;;;2400 }
;;;2401
;;;2402 if (response_r1 & SD_OCR_CC_ERROR)
;;;2403 {
;;;2404 return(SD_CC_ERROR);
;;;2405 }
;;;2406
;;;2407 if (response_r1 & SD_OCR_GENERAL_UNKNOWN_ERROR)
;;;2408 {
;;;2409 return(SD_GENERAL_UNKNOWN_ERROR);
;;;2410 }
;;;2411
;;;2412 if (response_r1 & SD_OCR_STREAM_READ_UNDERRUN)
;;;2413 {
;;;2414 return(SD_STREAM_READ_UNDERRUN);
;;;2415 }
;;;2416
;;;2417 if (response_r1 & SD_OCR_STREAM_WRITE_OVERRUN)
;;;2418 {
;;;2419 return(SD_STREAM_WRITE_OVERRUN);
;;;2420 }
;;;2421
;;;2422 if (response_r1 & SD_OCR_CID_CSD_OVERWRIETE)
;;;2423 {
;;;2424 return(SD_CID_CSD_OVERWRITE);
;;;2425 }
;;;2426
;;;2427 if (response_r1 & SD_OCR_WP_ERASE_SKIP)
;;;2428 {
;;;2429 return(SD_WP_ERASE_SKIP);
;;;2430 }
;;;2431
;;;2432 if (response_r1 & SD_OCR_CARD_ECC_DISABLED)
;;;2433 {
;;;2434 return(SD_CARD_ECC_DISABLED);
;;;2435 }
;;;2436
;;;2437 if (response_r1 & SD_OCR_ERASE_RESET)
;;;2438 {
;;;2439 return(SD_ERASE_RESET);
;;;2440 }
;;;2441
;;;2442 if (response_r1 & SD_OCR_AKE_SEQ_ERROR)
;;;2443 {
;;;2444 return(SD_AKE_SEQ_ERROR);
;;;2445 }
;;;2446 return(errorstatus);
;;;2447 }
000028 e8bd81f0 POP {r4-r8,pc}
|L2.44|
00002c f0150f01 TST r5,#1 ;2327
000030 d005 BEQ |L2.62|
000032 2701 MOVS r7,#1 ;2329
000034 2001 MOVS r0,#1 ;2330
000036 f7fffffe BL SDIO_ClearFlag
00003a 4638 MOV r0,r7 ;2331
00003c e7f4 B |L2.40|
|L2.62|
00003e f7fffffe BL SDIO_GetCommandResponse
000042 42b0 CMP r0,r6 ;2335
000044 d002 BEQ |L2.76|
000046 2710 MOVS r7,#0x10 ;2337
000048 4638 MOV r0,r7 ;2338
00004a e7ed B |L2.40|
|L2.76|
00004c f24050ff MOV r0,#0x5ff ;2342
000050 f7fffffe BL SDIO_ClearFlag
000054 2000 MOVS r0,#0 ;2345
000056 f7fffffe BL SDIO_GetResponse
00005a 4604 MOV r4,r0 ;2345
00005c 4833 LDR r0,|L2.300|
00005e 4204 TST r4,r0 ;2347
000060 d101 BNE |L2.102|
000062 4638 MOV r0,r7 ;2349
000064 e7e0 B |L2.40|
|L2.102|
000066 f0144f00 TST r4,#0x80000000 ;2352
00006a d001 BEQ |L2.112|
00006c 201c MOVS r0,#0x1c ;2354
00006e e7db B |L2.40|
|L2.112|
000070 f0144f80 TST r4,#0x40000000 ;2357
000074 d001 BEQ |L2.122|
000076 2009 MOVS r0,#9 ;2359
000078 e7d6 B |L2.40|
|L2.122|
00007a f0145f00 TST r4,#0x20000000 ;2362
00007e d001 BEQ |L2.132|
000080 200a MOVS r0,#0xa ;2364
000082 e7d1 B |L2.40|
|L2.132|
000084 f0145f80 TST r4,#0x10000000 ;2367
000088 d001 BEQ |L2.142|
00008a 200b MOVS r0,#0xb ;2369
00008c e7cc B |L2.40|
|L2.142|
00008e f0146f00 TST r4,#0x8000000 ;2372
000092 d001 BEQ |L2.152|
000094 200c MOVS r0,#0xc ;2374
000096 e7c7 B |L2.40|
|L2.152|
000098 f0146f80 TST r4,#0x4000000 ;2377
00009c d001 BEQ |L2.162|
00009e 200d MOVS r0,#0xd ;2379
0000a0 e7c2 B |L2.40|
|L2.162|
0000a2 f0147f80 TST r4,#0x1000000 ;2382
0000a6 d001 BEQ |L2.172|
0000a8 200e MOVS r0,#0xe ;2384
0000aa e7bd B |L2.40|
|L2.172|
0000ac f4140f00 TST r4,#0x800000 ;2387
0000b0 d001 BEQ |L2.182|
0000b2 200f MOVS r0,#0xf ;2389
0000b4 e7b8 B |L2.40|
|L2.182|
0000b6 f4140f80 TST r4,#0x400000 ;2392
0000ba d001 BEQ |L2.192|
0000bc 2010 MOVS r0,#0x10 ;2394
0000be e7b3 B |L2.40|
|L2.192|
0000c0 f4141f00 TST r4,#0x200000 ;2397
0000c4 d001 BEQ |L2.202|
0000c6 2011 MOVS r0,#0x11 ;2399
0000c8 e7ae B |L2.40|
|L2.202|
0000ca f4141f80 TST r4,#0x100000 ;2402
0000ce d001 BEQ |L2.212|
0000d0 2012 MOVS r0,#0x12 ;2404
0000d2 e7a9 B |L2.40|
|L2.212|
0000d4 f4142f00 TST r4,#0x80000 ;2407
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -