📄 bsp_sdio_sd.txt
字号:
0000d8 d001 BEQ |L2.222|
0000da 2013 MOVS r0,#0x13 ;2409
0000dc e7a4 B |L2.40|
|L2.222|
0000de f4142f80 TST r4,#0x40000 ;2412
0000e2 d001 BEQ |L2.232|
0000e4 2014 MOVS r0,#0x14 ;2414
0000e6 e79f B |L2.40|
|L2.232|
0000e8 f4143f00 TST r4,#0x20000 ;2417
0000ec d001 BEQ |L2.242|
0000ee 2015 MOVS r0,#0x15 ;2419
0000f0 e79a B |L2.40|
|L2.242|
0000f2 f4143f80 TST r4,#0x10000 ;2422
0000f6 d001 BEQ |L2.252|
0000f8 2016 MOVS r0,#0x16 ;2424
0000fa e795 B |L2.40|
|L2.252|
0000fc f4144f00 TST r4,#0x8000 ;2427
000100 d001 BEQ |L2.262|
000102 2017 MOVS r0,#0x17 ;2429
000104 e790 B |L2.40|
|L2.262|
000106 f4144f80 TST r4,#0x4000 ;2432
00010a d001 BEQ |L2.272|
00010c 2018 MOVS r0,#0x18 ;2434
00010e e78b B |L2.40|
|L2.272|
000110 f4145f00 TST r4,#0x2000 ;2437
000114 d001 BEQ |L2.282|
000116 2019 MOVS r0,#0x19 ;2439
000118 e786 B |L2.40|
|L2.282|
00011a f0140f08 TST r4,#8 ;2442
00011e d001 BEQ |L2.292|
000120 201a MOVS r0,#0x1a ;2444
000122 e781 B |L2.40|
|L2.292|
000124 4638 MOV r0,r7 ;2446
000126 e77f B |L2.40|
;;;2448
ENDP
|L2.296|
DCD 0x40018000
|L2.300|
DCD 0xfdffe008
AREA ||i.CmdResp2Error||, CODE, READONLY, ALIGN=2
CmdResp2Error PROC
;;;2481 */
;;;2482 static SD_Error CmdResp2Error(void)
000000 b570 PUSH {r4-r6,lr}
;;;2483 {
;;;2484 SD_Error errorstatus = SD_OK;
000002 252a MOVS r5,#0x2a
;;;2485 uint32_t status;
;;;2486
;;;2487 status = SDIO->STA;
000004 480f LDR r0,|L3.68|
000006 6b44 LDR r4,[r0,#0x34]
;;;2488
;;;2489 while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND)))
000008 e001 B |L3.14|
|L3.10|
;;;2490 {
;;;2491 status = SDIO->STA;
00000a 480e LDR r0,|L3.68|
00000c 6b44 LDR r4,[r0,#0x34]
|L3.14|
00000e f0140f45 TST r4,#0x45 ;2489
000012 d0fa BEQ |L3.10|
;;;2492 }
;;;2493
;;;2494 if (status & SDIO_FLAG_CTIMEOUT)
000014 f0140f04 TST r4,#4
000018 d005 BEQ |L3.38|
;;;2495 {
;;;2496 errorstatus = SD_CMD_RSP_TIMEOUT;
00001a 2503 MOVS r5,#3
;;;2497 SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
00001c 2004 MOVS r0,#4
00001e f7fffffe BL SDIO_ClearFlag
;;;2498 return(errorstatus);
000022 4628 MOV r0,r5
|L3.36|
;;;2499 }
;;;2500 else if (status & SDIO_FLAG_CCRCFAIL)
;;;2501 {
;;;2502 errorstatus = SD_CMD_CRC_FAIL;
;;;2503 SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
;;;2504 return(errorstatus);
;;;2505 }
;;;2506
;;;2507 /*!< Clear all the static flags */
;;;2508 SDIO_ClearFlag(SDIO_STATIC_FLAGS);
;;;2509
;;;2510 return(errorstatus);
;;;2511 }
000024 bd70 POP {r4-r6,pc}
|L3.38|
000026 f0140f01 TST r4,#1 ;2500
00002a d005 BEQ |L3.56|
00002c 2501 MOVS r5,#1 ;2502
00002e 2001 MOVS r0,#1 ;2503
000030 f7fffffe BL SDIO_ClearFlag
000034 4628 MOV r0,r5 ;2504
000036 e7f5 B |L3.36|
|L3.56|
000038 f24050ff MOV r0,#0x5ff ;2508
00003c f7fffffe BL SDIO_ClearFlag
000040 4628 MOV r0,r5 ;2510
000042 e7ef B |L3.36|
;;;2512
ENDP
|L3.68|
DCD 0x40018000
AREA ||i.CmdResp3Error||, CODE, READONLY, ALIGN=2
CmdResp3Error PROC
;;;2453 */
;;;2454 static SD_Error CmdResp3Error(void)
000000 b570 PUSH {r4-r6,lr}
;;;2455 {
;;;2456 SD_Error errorstatus = SD_OK;
000002 252a MOVS r5,#0x2a
;;;2457 uint32_t status;
;;;2458
;;;2459 status = SDIO->STA;
000004 480b LDR r0,|L4.52|
000006 6b44 LDR r4,[r0,#0x34]
;;;2460
;;;2461 while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)))
000008 e001 B |L4.14|
|L4.10|
;;;2462 {
;;;2463 status = SDIO->STA;
00000a 480a LDR r0,|L4.52|
00000c 6b44 LDR r4,[r0,#0x34]
|L4.14|
00000e f0140f45 TST r4,#0x45 ;2461
000012 d0fa BEQ |L4.10|
;;;2464 }
;;;2465
;;;2466 if (status & SDIO_FLAG_CTIMEOUT)
000014 f0140f04 TST r4,#4
000018 d005 BEQ |L4.38|
;;;2467 {
;;;2468 errorstatus = SD_CMD_RSP_TIMEOUT;
00001a 2503 MOVS r5,#3
;;;2469 SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
00001c 2004 MOVS r0,#4
00001e f7fffffe BL SDIO_ClearFlag
;;;2470 return(errorstatus);
000022 4628 MOV r0,r5
|L4.36|
;;;2471 }
;;;2472 /*!< Clear all the static flags */
;;;2473 SDIO_ClearFlag(SDIO_STATIC_FLAGS);
;;;2474 return(errorstatus);
;;;2475 }
000024 bd70 POP {r4-r6,pc}
|L4.38|
000026 f24050ff MOV r0,#0x5ff ;2473
00002a f7fffffe BL SDIO_ClearFlag
00002e 4628 MOV r0,r5 ;2474
000030 e7f8 B |L4.36|
;;;2476
ENDP
000032 0000 DCW 0x0000
|L4.52|
DCD 0x40018000
AREA ||i.CmdResp6Error||, CODE, READONLY, ALIGN=2
CmdResp6Error PROC
;;;2519 */
;;;2520 static SD_Error CmdResp6Error(uint8_t cmd, uint16_t *prca)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;2521 {
000004 4606 MOV r6,r0
000006 460f MOV r7,r1
;;;2522 SD_Error errorstatus = SD_OK;
000008 f04f082a MOV r8,#0x2a
;;;2523 uint32_t status;
;;;2524 uint32_t response_r1;
;;;2525
;;;2526 status = SDIO->STA;
00000c 4822 LDR r0,|L5.152|
00000e 6b45 LDR r5,[r0,#0x34]
;;;2527
;;;2528 while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND)))
000010 e001 B |L5.22|
|L5.18|
;;;2529 {
;;;2530 status = SDIO->STA;
000012 4821 LDR r0,|L5.152|
000014 6b45 LDR r5,[r0,#0x34]
|L5.22|
000016 f0150f45 TST r5,#0x45 ;2528
00001a d0fa BEQ |L5.18|
;;;2531 }
;;;2532
;;;2533 if (status & SDIO_FLAG_CTIMEOUT)
00001c f0150f04 TST r5,#4
000020 d007 BEQ |L5.50|
;;;2534 {
;;;2535 errorstatus = SD_CMD_RSP_TIMEOUT;
000022 f04f0803 MOV r8,#3
;;;2536 SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
000026 2004 MOVS r0,#4
000028 f7fffffe BL SDIO_ClearFlag
;;;2537 return(errorstatus);
00002c 4640 MOV r0,r8
|L5.46|
;;;2538 }
;;;2539 else if (status & SDIO_FLAG_CCRCFAIL)
;;;2540 {
;;;2541 errorstatus = SD_CMD_CRC_FAIL;
;;;2542 SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
;;;2543 return(errorstatus);
;;;2544 }
;;;2545
;;;2546 /*!< Check response received is of desired command */
;;;2547 if (SDIO_GetCommandResponse() != cmd)
;;;2548 {
;;;2549 errorstatus = SD_ILLEGAL_CMD;
;;;2550 return(errorstatus);
;;;2551 }
;;;2552
;;;2553 /*!< Clear all the static flags */
;;;2554 SDIO_ClearFlag(SDIO_STATIC_FLAGS);
;;;2555
;;;2556 /*!< We have received response, retrieve it. */
;;;2557 response_r1 = SDIO_GetResponse(SDIO_RESP1);
;;;2558
;;;2559 if (SD_ALLZERO == (response_r1 & (SD_R6_GENERAL_UNKNOWN_ERROR | SD_R6_ILLEGAL_CMD | SD_R6_COM_CRC_FAILED)))
;;;2560 {
;;;2561 *prca = (uint16_t) (response_r1 >> 16);
;;;2562 return(errorstatus);
;;;2563 }
;;;2564
;;;2565 if (response_r1 & SD_R6_GENERAL_UNKNOWN_ERROR)
;;;2566 {
;;;2567 return(SD_GENERAL_UNKNOWN_ERROR);
;;;2568 }
;;;2569
;;;2570 if (response_r1 & SD_R6_ILLEGAL_CMD)
;;;2571 {
;;;2572 return(SD_ILLEGAL_CMD);
;;;2573 }
;;;2574
;;;2575 if (response_r1 & SD_R6_COM_CRC_FAILED)
;;;2576 {
;;;2577 return(SD_COM_CRC_FAILED);
;;;2578 }
;;;2579
;;;2580 return(errorstatus);
;;;2581 }
00002e e8bd81f0 POP {r4-r8,pc}
|L5.50|
000032 f0150f01 TST r5,#1 ;2539
000036 d006 BEQ |L5.70|
000038 f04f0801 MOV r8,#1 ;2541
00003c 2001 MOVS r0,#1 ;2542
00003e f7fffffe BL SDIO_ClearFlag
000042 4640 MOV r0,r8 ;2543
000044 e7f3 B |L5.46|
|L5.70|
000046 f7fffffe BL SDIO_GetCommandResponse
00004a 42b0 CMP r0,r6 ;2547
00004c d003 BEQ |L5.86|
00004e f04f0810 MOV r8,#0x10 ;2549
000052 4640 MOV r0,r8 ;2550
000054 e7eb B |L5.46|
|L5.86|
000056 f24050ff MOV r0,#0x5ff ;2554
00005a f7fffffe BL SDIO_ClearFlag
00005e 2000 MOVS r0,#0 ;2557
000060 f7fffffe BL SDIO_GetResponse
000064 4604 MOV r4,r0 ;2557
000066 f4144f60 TST r4,#0xe000 ;2559
00006a d103 BNE |L5.116|
00006c 0c20 LSRS r0,r4,#16 ;2561
00006e 8038 STRH r0,[r7,#0] ;2561
000070 4640 MOV r0,r8 ;2562
000072 e7dc B |L5.46|
|L5.116|
000074 f4145f00 TST r4,#0x2000 ;2565
000078 d001 BEQ |L5.126|
00007a 2013 MOVS r0,#0x13 ;2567
00007c e7d7 B |L5.46|
|L5.126|
00007e f4144f80 TST r4,#0x4000 ;2570
000082 d001 BEQ |L5.136|
000084 2010 MOVS r0,#0x10 ;2572
000086 e7d2 B |L5.46|
|L5.136|
000088 f4144f00 TST r4,#0x8000 ;2575
00008c d001 BEQ |L5.146|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -