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

📄 sdcmd.lis

📁 mega128的串口发送文件.可以发送0X55上位机使用串口调试工具就可以接收了.
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02A6 0E940000          xcall push_gset2
 02AA 622F              mov R22,R18
 02AC 402F              mov R20,R16
 02AE 2997              sbiw R28,9
 02B0                   .dbline -1
 02B0                   .dbline 99
 02B0           ; }
 02B0           ; 
 02B0           ; /********************************************************************************************************************
 02B0           ; ** 函数名称: INT8U SD_BlockCommand()                          Name:     INT8U SD_BlockCommand()
 02B0           ; ** 功能描述: 块命令                                                                   Function: command about block operation
 02B0           ; ** 输   入: INT8U cmd             : 命令字                           Input:    INT8U cmd           : command byte 
 02B0           ;                        INT8U resptype  : 响应类型                                               INT8U resptype  : response type
 02B0           ;                        INT32U parameter: 块操作参数                                     INT32U parameter: parameter of block operation
 02B0           ; ** 输   出: 0:   正确    >0:   错误码                                Output:   0:  right             >0:  error code
 02B0           ; *********************************************************************************************************************/
 02B0           ; uint8 SD_BlockCommand(uint8 cmd, uint8 resptype, uint32 parameter)
 02B0           ; {
 02B0                   .dbline 102
 02B0           ;       uint8 param[4],resp,ret;
 02B0           ;       
 02B0           ;       parameter <<= SD_BLOCKSIZE_NBITS;                                        /* 调整地址:左移9位 adjust address: move 9 bits left */
 02B0 89E0              ldi R24,9
 02B2 90E0              ldi R25,0
 02B4 FE01              movw R30,R28
 02B6 2584              ldd R2,z+13
 02B8 3684              ldd R3,z+14
 02BA 4784              ldd R4,z+15
 02BC 5088              ldd R5,z+16
 02BE 8A93              st -y,R24
 02C0 8101              movw R16,R2
 02C2 9201              movw R18,R4
 02C4 0E940000          xcall lsl32
 02C8 FE01              movw R30,R28
 02CA 0587              std z+13,R16
 02CC 1687              std z+14,R17
 02CE 2787              std z+15,R18
 02D0 308B              std z+16,R19
 02D2                   .dbline 104
 02D2           ; 
 02D2           ;       SD_PackParam(param, parameter);                                          /* 将参数转化为字节形式 change the parameter to bytes form */  
 02D2 FE01              movw R30,R28
 02D4 2584              ldd R2,z+13
 02D6 3684              ldd R3,z+14
 02D8 4784              ldd R4,z+15
 02DA 5088              ldd R5,z+16
 02DC 4882              std y+0,R4
 02DE 5982              std y+1,R5
 02E0 9101              movw R18,R2
 02E2 8E01              movw R16,R28
 02E4 0C5F              subi R16,252  ; offset = 4
 02E6 1F4F              sbci R17,255
 02E8 A8DF              xcall _SD_PackParam
 02EA                   .dbline 106
 02EA           ; 
 02EA           ;       ret = SD_SendCmd(cmd, param, resptype, &resp);
 02EA CE01              movw R24,R28
 02EC 0896              adiw R24,8
 02EE 9B83              std y+3,R25
 02F0 8A83              std y+2,R24
 02F2 6883              std y+0,R22
 02F4 9E01              movw R18,R28
 02F6 2C5F              subi R18,252  ; offset = 4
 02F8 3F4F              sbci R19,255
 02FA 042F              mov R16,R20
 02FC 81DE              xcall _SD_SendCmd
 02FE 402F              mov R20,R16
 0300                   .dbline 107
 0300           ;       if (ret != SD_NO_ERR)
 0300 0023              tst R16
 0302 09F0              breq L24
 0304                   .dbline 108
 0304           ;                return ret;                                                                     /* 结束数据传输失败 stop transmission operation fail */
 0304 06C0              xjmp L23
 0306           L24:
 0306                   .dbline 110
 0306           ;       
 0306           ;       if (resp != 0)
 0306 2884              ldd R2,y+8
 0308 2220              tst R2
 030A 11F0              breq L26
 030C                   .dbline 111
 030C           ;                return SD_ERR_CMD_RESP;                                                 /* 响应错误 response is error */
 030C 02E1              ldi R16,18
 030E 01C0              xjmp L23
 0310           L26:
 0310                   .dbline 113
 0310           ;                
 0310           ;       return SD_NO_ERR;
 0310 0027              clr R16
 0312                   .dbline -2
 0312           L23:
 0312 2996              adiw R28,9
 0314 0E940000          xcall pop_gset2
 0318                   .dbline 0 ; func end
 0318 0895              ret
 031A                   .dbsym l resp 8 c
 031A                   .dbsym l param 4 A[4:4]c
 031A                   .dbsym r ret 20 c
 031A                   .dbsym l parameter 13 l
 031A                   .dbsym r resptype 22 c
 031A                   .dbsym r cmd 20 c
 031A                   .dbend
                        .area lit(rom, con, rel)
 0000           L29:
 0000 0000              .byte 0,0
 0002 0000              .byte 0,0
                        .area text(rom, con, rel)
 031A                   .dbfile D:\new_sd\SD\SD\sdcmd.c
 031A                   .dbfunc e SD_ResetSD _SD_ResetSD fc
 031A           ;           resp -> y+8
 031A           ;          param -> y+4
                        .even
 031A           _SD_ResetSD::
 031A 2997              sbiw R28,9
 031C                   .dbline -1
 031C                   .dbline 131
 031C           ; }
 031C           ; 
 031C           ;       /*
 031C           ;       ************************************************
 031C           ;       
 031C           ;               下面为SD卡SPI命令
 031C           ; 
 031C           ;       ************************************************
 031C           ;       */
 031C           ;       
 031C           ; /********************************************************************************************************************
 031C           ; ** 函数名称: INT8U SD_ResetSD()                                               Name:     INT8U SD_ResetSD()
 031C           ; ** 功能描述: 复位SD卡                                                         Function: reset sd card
 031C           ; ** 输   入: 无                                                                               Input:    NULL
 031C           ; ** 输   出: 0:   正确    >0:   错误码                                Output:   0:  right             >0:  error code
 031C           ; *********************************************************************************************************************/
 031C           ; uint8 SD_ResetSD(void)                /////
 031C           ; {
 031C                   .dbline 132
 031C           ;       uint8 param[4] = {0,0,0,0},resp;
 031C 80E0              ldi R24,<L29
 031E 90E0              ldi R25,>L29
 0320 FE01              movw R30,R28
 0322 3496              adiw R30,4
 0324 04E0              ldi R16,4
 0326 10E0              ldi R17,0
 0328 FA93              st -y,R31
 032A EA93              st -y,R30
 032C 9A93              st -y,R25
 032E 8A93              st -y,R24
 0330 0E940000          xcall asgncblk
 0334                   .dbline 134
 0334           ;       
 0334           ;     return (SD_SendCmd(CMD0, param, CMD0_R, &resp));  /* 复位命令 command that reset sd card */
 0334 CE01              movw R24,R28
 0336 0896              adiw R24,8
 0338 9B83              std y+3,R25
 033A 8A83              std y+2,R24
 033C 81E0              ldi R24,1
 033E 8883              std y+0,R24
 0340 9E01              movw R18,R28
 0342 2C5F              subi R18,252  ; offset = 4
 0344 3F4F              sbci R19,255
 0346 0027              clr R16
 0348 5BDE              xcall _SD_SendCmd
 034A                   .dbline -2
 034A           L28:
 034A 2996              adiw R28,9
 034C                   .dbline 0 ; func end
 034C 0895              ret
 034E                   .dbsym l resp 8 c
 034E                   .dbsym l param 4 A[4:4]c
 034E                   .dbend
                        .area lit(rom, con, rel)
 0004           L31:
 0004 0000              .byte 0,0
 0006 0000              .byte 0,0
                        .area text(rom, con, rel)
 034E                   .dbfile D:\new_sd\SD\SD\sdcmd.c
 034E                   .dbfunc e SD_ReadCSD _SD_ReadCSD fc
 034E           ;           resp -> y+8
 034E           ;          param -> y+4
 034E           ;            ret -> R10
 034E           ;         recbuf -> R22,R23
 034E           ;         csdlen -> R20
                        .even
 034E           _SD_ReadCSD::
 034E 0E940000          xcall push_gset3
 0352 B901              movw R22,R18
 0354 402F              mov R20,R16
 0356 2997              sbiw R28,9
 0358                   .dbline -1
 0358                   .dbline 145
 0358           ; }
 0358           ; 
 0358           ; /********************************************************************************************************************
 0358           ; ** 函数名称: INT8U SD_ReadCSD()                                               Name:     INT8U SD_ReadCSD()
 0358           ; ** 功能描述: 读SD卡的CSD寄存器                                                Function: read CSD register of sd card 
 0358           ; ** 输   入: INT8U csdlen  : 寄存器长度(固定为16)                       INT8U csdlen  : len of register (fixed,is 16)
 0358           ;                        INT8U *recbuf : 接收缓冲区                                           INT8U *recbuf : recbuffer 
 0358           ; ** 输   出: 0:   正确    >0:   错误码                                Output:   0:  right             >0:  error code
 0358           ; *********************************************************************************************************************/
 0358           ; uint8 SD_ReadCSD(uint8 csdlen, uint8 *recbuf)
 0358           ; {
 0358                   .dbline 146
 0358           ;     uint8 param[4] = {0,0,0,0},resp,ret;
 0358 80E0              ldi R24,<L31
 035A 90E0              ldi R25,>L31
 035C FE01              movw R30,R28
 035E 3496              adiw R30,4
 0360 04E0              ldi R16,4
 0362 10E0              ldi R17,0
 0364 FA93              st -y,R31
 0366 EA93              st -y,R30
 0368 9A93              st -y,R25
 036A 8A93              st -y,R24
 036C 0E940000          xcall asgncblk
 0370                   .dbline 148
 0370           ;   
 0370           ;     ret = SD_SendCmd(CMD9, param, CMD9_R, &resp);             /* 读CSD寄存器命令 command that read CSD register */
 0370 CE01              movw R24,R28
 0372 0896              adiw R24,8
 0374 9B83              std y+3,R25
 0376 8A83              std y+2,R24
 0378 81E0              ldi R24,1
 037A 8883              std y+0,R24
 037C 9E01              movw R18,R28
 037E 2C5F              subi R18,252  ; offset = 4
 0380 3F4F              sbci R19,255
 0382 09E0              ldi R16,9
 0384 3DDE              xcall _SD_SendCmd
 0386 A02E              mov R10,R16
 0388                   .dbline 149
 0388           ;     if (ret != SD_NO_ERR)                                                                     
 0388 0023              tst R16
 038A 09F0              breq L32
 038C                   .dbline 150
 038C           ;         return ret;                                                                   
 038C 0EC0              xjmp L30
 038E           L32:
 038E                   .dbline 152
 038E           ;   
 038E           ;     if (resp != 0)
 038E 2884              ldd R2,y+8
 0390 2220              tst R2
 0392 11F0              breq L34
 0394                   .dbline 153
 0394           ;         return SD_ERR_CMD_RESP;                                                       /* 响应错误 response is error */
 0394 02E1              ldi R16,18
 0396 09C0              xjmp L30
 0398           L34:
 0398                   .dbline 155
 0398           ;     
 0398           ;       return (SD_ReadRegister(csdlen, recbuf));
 0398 7983              std y+1,R23
 039A 6883              std y+0,R22
 039C 242E              mov R2,R20
 039E 3324              clr R3
 03A0 4424              clr R4
 03A2 5524              clr R5
 03A4 8101              movw R16,R2
 03A6 9201              movw R18,R4

⌨️ 快捷键说明

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