📄 sdcmd.lis
字号:
03A8 0AD1 xcall _SD_ReadRegister
03AA .dbline -2
03AA L30:
03AA 2996 adiw R28,9
03AC 0E940000 xcall pop_gset3
03B0 .dbline 0 ; func end
03B0 0895 ret
03B2 .dbsym l resp 8 c
03B2 .dbsym l param 4 A[4:4]c
03B2 .dbsym r ret 10 c
03B2 .dbsym r recbuf 22 pc
03B2 .dbsym r csdlen 20 c
03B2 .dbend
.area lit(rom, con, rel)
0008 L37:
0008 0000 .byte 0,0
000A 0000 .byte 0,0
.area text(rom, con, rel)
03B2 .dbfile D:\new_sd\SD\SD\sdcmd.c
03B2 .dbfunc e SD_StopTransmission _SD_StopTransmission fc
03B2 ; resp -> y+8
03B2 ; param -> y+4
.even
03B2 _SD_StopTransmission::
03B2 2997 sbiw R28,9
03B4 .dbline -1
03B4 .dbline 188
03B4 ; }
03B4 ;
03B4 ; /*******************************************************************************************************************
03B4 ; ** 函数名称: INT8U SD_ReadCID() Name: INT8U SD_ReadCID()
03B4 ; ** 功能描述: 读SD卡的CID寄存器 Function: read CID register of sd card
03B4 ; ** 输 入: INT8U cidlen : 寄存器长度(固定为16) INT8U cidlen : len of register (fixed,is 16)
03B4 ; INT8U *recbuf : 接收缓冲区 INT8U *recbuf : recbuffer
03B4 ; ** 输 出: 0: 正确 >0: 错误码 Output: 0: right >0: error code
03B4 ; ********************************************************************************************************************/
03B4 ; #if SD_ReadCID_EN
03B4 ; uint8 SD_ReadCID(uint8 cidlen, uint8 *recbuf)
03B4 ; {
03B4 ; uint8 param[4] = {0,0,0,0},resp,ret;
03B4 ;
03B4 ; ret = SD_SendCmd(CMD10, param, CMD10_R, &resp); /* 读CID寄存器命令 command that read CID register */
03B4 ; if ( ret != SD_NO_ERR)
03B4 ; return ret;
03B4 ;
03B4 ; if (resp != 0)
03B4 ; return SD_ERR_CMD_RESP; /* 响应错误 response is error */
03B4 ;
03B4 ; return (SD_ReadRegister(cidlen, recbuf));
03B4 ; }
03B4 ; #endif
03B4 ;
03B4 ; /********************************************************************************************************************
03B4 ; ** 函数名称: INT8U SD_StopTransmission() Name: INT8U SD_StopTransmission()
03B4 ; ** 功能描述: 停止数据传输 Function: stop data transmission
03B4 ; ** 输 入: 无 Input: NULL
03B4 ; ** 输 出: 0: 正确 >0: 错误码 Output: 0: right >0: error code
03B4 ; *********************************************************************************************************************/
03B4 ; uint8 SD_StopTransmission(void)
03B4 ; {
03B4 .dbline 189
03B4 ; uint8 param[4] = {0,0,0,0},resp;
03B4 80E0 ldi R24,<L37
03B6 90E0 ldi R25,>L37
03B8 FE01 movw R30,R28
03BA 3496 adiw R30,4
03BC 04E0 ldi R16,4
03BE 10E0 ldi R17,0
03C0 FA93 st -y,R31
03C2 EA93 st -y,R30
03C4 9A93 st -y,R25
03C6 8A93 st -y,R24
03C8 0E940000 xcall asgncblk
03CC .dbline 191
03CC ;
03CC ; return (SD_SendCmd(CMD12, param, CMD12_R, &resp)); /* 结束数据传输命令失败 stop transmission command fail */
03CC CE01 movw R24,R28
03CE 0896 adiw R24,8
03D0 9B83 std y+3,R25
03D2 8A83 std y+2,R24
03D4 82E0 ldi R24,2
03D6 8883 std y+0,R24
03D8 9E01 movw R18,R28
03DA 2C5F subi R18,252 ; offset = 4
03DC 3F4F sbci R19,255
03DE 0CE0 ldi R16,12
03E0 0FDE xcall _SD_SendCmd
03E2 .dbline -2
03E2 L36:
03E2 2996 adiw R28,9
03E4 .dbline 0 ; func end
03E4 0895 ret
03E6 .dbsym l resp 8 c
03E6 .dbsym l param 4 A[4:4]c
03E6 .dbend
.area lit(rom, con, rel)
000C L39:
000C 0000 .byte 0,0
000E 0000 .byte 0,0
.area text(rom, con, rel)
03E6 .dbfile D:\new_sd\SD\SD\sdcmd.c
03E6 .dbfunc e SD_ReadCard_Status _SD_ReadCard_Status fc
03E6 ; param -> y+4
03E6 ; buffer -> R20,R21
03E6 ; len -> R22
.even
03E6 _SD_ReadCard_Status::
03E6 0E940000 xcall push_gset2
03EA A901 movw R20,R18
03EC 602F mov R22,R16
03EE 2897 sbiw R28,8
03F0 .dbline -1
03F0 .dbline 202
03F0 ; }
03F0 ;
03F0 ; /*********************************************************************************************************************
03F0 ; ** 函数名称: INT8U SD_ReadCard_Status() Name: INT8U SD_ReadCard_Status()
03F0 ; ** 功能描述: 读SD卡的 Card Status 寄存器 Function: read Card Status register of sd card
03F0 ; ** 输 入: INT8U len: 寄存器长度(固定为2) INT8U len: len of register (fixed,is 2)
03F0 ; INT8U *recbuf : 接收缓冲区 INT8U *recbuf : recbuffer
03F0 ; ** 输 出: 0: 正确 >0: 错误码 Output: 0: right >0: error code
03F0 ; **********************************************************************************************************************/
03F0 ; uint8 SD_ReadCard_Status(uint8 len, uint8 *buffer)
03F0 ; {
03F0 .dbline 203
03F0 ; uint8 param[4] = {0,0,0,0};
03F0 80E0 ldi R24,<L39
03F2 90E0 ldi R25,>L39
03F4 FE01 movw R30,R28
03F6 3496 adiw R30,4
03F8 04E0 ldi R16,4
03FA 10E0 ldi R17,0
03FC FA93 st -y,R31
03FE EA93 st -y,R30
0400 9A93 st -y,R25
0402 8A93 st -y,R24
0404 0E940000 xcall asgncblk
0408 .dbline 205
0408 ;
0408 ; return (SD_SendCmd(CMD13, param, CMD13_R, buffer)); /* 读 Card Status 寄存器 */
0408 5B83 std y+3,R21
040A 4A83 std y+2,R20
040C 83E0 ldi R24,3
040E 8883 std y+0,R24
0410 9E01 movw R18,R28
0412 2C5F subi R18,252 ; offset = 4
0414 3F4F sbci R19,255
0416 0DE0 ldi R16,13
0418 F3DD xcall _SD_SendCmd
041A .dbline -2
041A L38:
041A 2896 adiw R28,8
041C 0E940000 xcall pop_gset2
0420 .dbline 0 ; func end
0420 0895 ret
0422 .dbsym l param 4 A[4:4]c
0422 .dbsym r buffer 20 pc
0422 .dbsym r len 22 c
0422 .dbend
0422 .dbfunc e SD_SetBlockLen _SD_SetBlockLen fc
0422 ; resp -> y+8
0422 ; param -> y+4
0422 ; ret -> R20
0422 ; length -> y+11
.even
0422 _SD_SetBlockLen::
0422 0E940000 xcall push_arg4
0426 0E940000 xcall push_gset1
042A 2997 sbiw R28,9
042C .dbline -1
042C .dbline 217
042C ; /* read register of Card Status */
042C ; }
042C ;
042C ;
042C ; /********************************************************************************************************************
042C ; ** 函数名称: INT8U Sd_SetBlockLen() Name: INT8U Sd_SetBlockLen()
042C ; ** 功能描述: 设置一个块的长度 Function: set a block len of sd card
042C ; ** 输 入: INT32U length : 块的长度值 Input: INT32U length : the length of a block
042C ; ** 输 出: 0: 正确 >0: 错误码 Output: 0: right >0: error code
042C ; *********************************************************************************************************************/
042C ; uint8 SD_SetBlockLen(uint32 length)
042C ; {
042C .dbline 220
042C ; uint8 param[4],resp,ret;
042C ;
042C ; SD_PackParam(param, length); /* 将参数转化为字节形式 change the parameter to bytes form */
042C FE01 movw R30,R28
042E 2384 ldd R2,z+11
0430 3484 ldd R3,z+12
0432 4584 ldd R4,z+13
0434 5684 ldd R5,z+14
0436 4882 std y+0,R4
0438 5982 std y+1,R5
043A 9101 movw R18,R2
043C 8E01 movw R16,R28
043E 0C5F subi R16,252 ; offset = 4
0440 1F4F sbci R17,255
0442 FBDE xcall _SD_PackParam
0444 .dbline 222
0444 ;
0444 ; ret = SD_SendCmd(CMD16, param, CMD16_R, &resp);
0444 CE01 movw R24,R28
0446 0896 adiw R24,8
0448 9B83 std y+3,R25
044A 8A83 std y+2,R24
044C 81E0 ldi R24,1
044E 8883 std y+0,R24
0450 9E01 movw R18,R28
0452 2C5F subi R18,252 ; offset = 4
0454 3F4F sbci R19,255
0456 00E1 ldi R16,16
0458 D3DD xcall _SD_SendCmd
045A 402F mov R20,R16
045C .dbline 223
045C ; if (ret != SD_NO_ERR)
045C 0023 tst R16
045E 09F0 breq L41
0460 .dbline 224
0460 ; return ret; /* 设置块的长度为length失败 set the length of block to length fail */
0460 06C0 xjmp L40
0462 L41:
0462 .dbline 226
0462 ;
0462 ; if (resp != 0)
0462 2884 ldd R2,y+8
0464 2220 tst R2
0466 11F0 breq L43
0468 .dbline 227
0468 ; return SD_ERR_CMD_RESP; /* 响应错误 response is error */
0468 02E1 ldi R16,18
046A 01C0 xjmp L40
046C L43:
046C .dbline 229
046C ;
046C ; return SD_NO_ERR; /* 返回执行成功 return perform sucessfully */
046C 0027 clr R16
046E .dbline -2
046E L40:
046E 2996 adiw R28,9
0470 0E940000 xcall pop_gset1
0474 2496 adiw R28,4
0476 .dbline 0 ; func end
0476 0895 ret
0478 .dbsym l resp 8 c
0478 .dbsym l param 4 A[4:4]c
0478 .dbsym r ret 20 c
0478 .dbsym l length 11 l
0478 .dbend
0478 .dbfunc e SD_ReadSingleBlock _SD_ReadSingleBlock fc
0478 ; blockaddr -> y+4
.even
0478 _SD_ReadSingleBlock::
0478 0E940000 xcall push_arg4
047C 2497 sbiw R28,4
047E .dbline -1
047E .dbline 239
047E ; }
047E ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -