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

📄 sddriver.lis

📁 mega128的串口发送文件.可以发送0X55上位机使用串口调试工具就可以接收了.
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 028E 8280              ldd R8,z+2
 0290 9380              ldd R9,z+3
 0292 5A92              st -y,R5
 0294 4A92              st -y,R4
 0296 3A92              st -y,R3
 0298 2A92              st -y,R2
 029A 8301              movw R16,R6
 029C 9401              movw R18,R8
 029E 0E940000          xcall empy32u
 02A2 00930400          sts _sds+4,R16
 02A6                   .dbline 144
 02A6           ;       
 02A6           ;       sds.timeout_read  = sds.timeout_read * 100 / 8;                                         /* 实际值为计算值的100倍 */
 02A6 20900300          lds R2,_sds+3
 02AA 84E6              ldi R24,100
 02AC 829D              mul R24,R2
 02AE 8001              movw R16,R0
 02B0 28E0              ldi R18,8
 02B2 30E0              ldi R19,0
 02B4 0E940000          xcall div16s
 02B8 00930300          sts _sds+3,R16
 02BC                   .dbline 145
 02BC           ;       sds.timeout_write = sds.timeout_write * 100 / 8;
 02BC 20900400          lds R2,_sds+4
 02C0 84E6              ldi R24,100
 02C2 829D              mul R24,R2
 02C4 8001              movw R16,R0
 02C6 28E0              ldi R18,8
 02C8 30E0              ldi R19,0
 02CA 0E940000          xcall div16s
 02CE 00930400          sts _sds+4,R16
 02D2                   .dbline 147
 02D2           ;       
 02D2           ;       if (sds.timeout_read > READ_TIMEOUT_100MS)                                                      /* 取计算值与默认值中的最小值 */
 02D2 40E0              ldi R20,0
 02D4 5EE0              ldi R21,14
 02D6 61E0              ldi R22,1
 02D8 70E0              ldi R23,0
 02DA 20900300          lds R2,_sds+3
 02DE 3324              clr R3
 02E0 4424              clr R4
 02E2 5524              clr R5
 02E4 4215              cp R20,R2
 02E6 5305              cpc R21,R3
 02E8 6405              cpc R22,R4
 02EA 7505              cpc R23,R5
 02EC 3CF4              brge L42
 02EE                   .dbline 148
 02EE           ;               sds.timeout_read = READ_TIMEOUT_100MS;
 02EE 40E0              ldi R20,0
 02F0 5EE0              ldi R21,14
 02F2 61E0              ldi R22,1
 02F4 70E0              ldi R23,0
 02F6 1A01              movw R2,R20
 02F8 20920300          sts _sds+3,R2
 02FC           L42:
 02FC                   .dbline 150
 02FC           ;       
 02FC           ;       if (sds.timeout_write > WRITE_TIMEOUT_250MS)
 02FC 40E0              ldi R20,0
 02FE 53EA              ldi R21,163
 0300 62E0              ldi R22,2
 0302 70E0              ldi R23,0
 0304 20900400          lds R2,_sds+4
 0308 3324              clr R3
 030A 4424              clr R4
 030C 5524              clr R5
 030E 4215              cp R20,R2
 0310 5305              cpc R21,R3
 0312 6405              cpc R22,R4
 0314 7505              cpc R23,R5
 0316 3CF4              brge L46
 0318                   .dbline 151
 0318           ;               sds.timeout_write = WRITE_TIMEOUT_250MS;
 0318 40E0              ldi R20,0
 031A 53EA              ldi R21,163
 031C 62E0              ldi R22,2
 031E 70E0              ldi R23,0
 0320 1A01              movw R2,R20
 0322 20920400          sts _sds+4,R2
 0326           L46:
 0326                   .dbline 153
 0326           ; 
 0326           ;       sds.timeout_erase = sds.timeout_write;
 0326 20900400          lds R2,_sds+4
 032A 20920500          sts _sds+5,R2
 032E                   .dbline -2
 032E           L28:
 032E 2496              adiw R28,4
 0330 0E940000          xcall pop_gset5
 0334 2296              adiw R28,2
 0336                   .dbline 0 ; func end
 0336 0895              ret
 0338                   .dbsym r time_u 14 c
 0338                   .dbsym r fator 10 c
 0338                   .dbsym r time_v 12 c
 0338                   .dbsym l tmp 0 l
 0338                   .dbsym l csdbuf 14 pc
 0338                   .dbend
                        .area lit(rom, con, rel)
 0036           L53:
 0036 0000              .byte 0,0
 0038 0000              .byte 0,0
                        .area text(rom, con, rel)
 0338                   .dbfile D:\new_sd\SD\SD\sddriver.c
 0338                   .dbfunc e SD_ActiveInit _SD_ActiveInit fc
 0338           ;          param -> y+13
 0338           ;           resp -> y+8
 0338           ;              i -> y+4
 0338           ;            ret -> R10
                        .even
 0338           _SD_ActiveInit::
 0338 0E940000          xcall push_gset3
 033C 6197              sbiw R28,17
 033E                   .dbline -1
 033E                   .dbline 165
 033E           ; }
 033E           ; /*******************************************************************************************************************
 033E           ; ** 函数名称: INT8U SD_CalTimeout()                            Name:     INT8U SD_CalTimeout()
 033E           ; ** 功能描述: 计算读/写/擦超时时间                             Function: get the information of SD card
 033E           ; ** 输   入: INT8U *cardtype: 卡类型接收缓冲  Input:    INT8U *cardtype: card type receive buff
 033E           ; ** 输   出: 0:   正确    >0:   错误码                        Output:   0:  right             >0:  error code
 033E           ; ** 函数说明: 该命令不断重复发送到SD卡,直到响应R1的Bit0(Idle)位为0,表示SD卡内部初始化处理完成。
 033E           ;                    当响应的Idle位为0时,SD卡就完全进入SPI模式了。当然重复发送命令CMD1是有次数限制的,
 033E           ;                    最大次数为宏定义SD_IDLE_WAIT_MAX.
 033E           ; *******************************************************************************************************************/
 033E           ; uint8 SD_ActiveInit(void)
 033E           ; {
 033E                   .dbline 166
 033E           ;       uint8 param[4] = {0,0,0,0},resp[5],ret;
 033E 80E0              ldi R24,<L53
 0340 90E0              ldi R25,>L53
 0342 FE01              movw R30,R28
 0344 3D96              adiw R30,13
 0346 04E0              ldi R16,4
 0348 10E0              ldi R17,0
 034A FA93              st -y,R31
 034C EA93              st -y,R30
 034E 9A93              st -y,R25
 0350 8A93              st -y,R24
 0352 0E940000          xcall asgncblk
 0356                   .dbline 167
 0356           ;       uint32 i = 0;
 0356 40E0              ldi R20,0
 0358 50E0              ldi R21,0
 035A 60E0              ldi R22,0
 035C 70E0              ldi R23,0
 035E FE01              movw R30,R28
 0360 4483              std z+4,R20
 0362 5583              std z+5,R21
 0364 6683              std z+6,R22
 0366 7783              std z+7,R23
 0368           L54:
 0368                   .dbline 170
 0368           ; 
 0368           ;       do 
 0368           ;     {                                                                                                 /* 发出CMD1, 查询卡的状态, send CMD1 to poll card status */
 0368                   .dbline 171
 0368           ;         ret = SD_SendCmd(CMD1, param, CMD1_R, resp);
 0368 CE01              movw R24,R28
 036A 0896              adiw R24,8
 036C 9B83              std y+3,R25
 036E 8A83              std y+2,R24
 0370 81E0              ldi R24,1
 0372 8883              std y+0,R24
 0374 9E01              movw R18,R28
 0376 235F              subi R18,243  ; offset = 13
 0378 3F4F              sbci R19,255
 037A 01E0              ldi R16,1
 037C 0E940000          xcall _SD_SendCmd
 0380 A02E              mov R10,R16
 0382                   .dbline 172
 0382           ;         if (ret != SD_NO_ERR)
 0382 0023              tst R16
 0384 09F0              breq L57
 0386                   .dbline 173
 0386           ;                       return ret;
 0386 36C0              xjmp L52
 0388           L57:
 0388                   .dbline 175
 0388           ;   
 0388           ;         i++;
 0388 41E0              ldi R20,1
 038A 50E0              ldi R21,0
 038C 60E0              ldi R22,0
 038E 70E0              ldi R23,0
 0390 FE01              movw R30,R28
 0392 2480              ldd R2,z+4
 0394 3580              ldd R3,z+5
 0396 4680              ldd R4,z+6
 0398 5780              ldd R5,z+7
 039A 240E              add R2,R20
 039C 351E              adc R3,R21
 039E 461E              adc R4,R22
 03A0 571E              adc R5,R23
 03A2 FE01              movw R30,R28
 03A4 2482              std z+4,R2
 03A6 3582              std z+5,R3
 03A8 4682              std z+6,R4
 03AA 5782              std z+7,R5
 03AC                   .dbline 176
 03AC           ;     }
 03AC           L55:
 03AC                   .dbline 177
 03AC           ;       while (((resp[0] & MSK_IDLE) == MSK_IDLE) && (i < SD_IDLE_WAIT_MAX));
 03AC 8885              ldd R24,y+8
 03AE 8170              andi R24,1
 03B0 8130              cpi R24,1
 03B2 79F4              brne L59
 03B4 48EE              ldi R20,232
 03B6 53E0              ldi R21,3
 03B8 60E0              ldi R22,0
 03BA 70E0              ldi R23,0
 03BC FE01              movw R30,R28
 03BE 2480              ldd R2,z+4
 03C0 3580              ldd R3,z+5
 03C2 4680              ldd R4,z+6
 03C4 5780              ldd R5,z+7
 03C6 2416              cp R2,R20
 03C8 3506              cpc R3,R21
 03CA 4606              cpc R4,R22
 03CC 5706              cpc R5,R23
 03CE 08F4              brsh X0
 03D0 CBCF              xjmp L54
 03D2           X0:
 03D2           L59:
 03D2                   .dbline 180
 03D2           ;                                                                                                               /* 如果响应R1的最低位Idle位为1,则继续循环 */
 03D2           ;                                                                                                               
 03D2           ;     if (i >= SD_IDLE_WAIT_MAX)
 03D2 48EE              ldi R20,232
 03D4 53E0              ldi R21,3
 03D6 60E0              ldi R22,0
 03D8 70E0              ldi R23,0
 03DA FE01              movw R30,R28
 03DC 2480              ldd R2,z+4
 03DE 3580              ldd R3,z+5
 03E0 4680              ldd R4,z+6
 03E2 5780              ldd R5,z+7
 03E4 2416              cp R2,R20
 03E6 3506              cpc R3,R21
 03E8 4606              cpc R4,R22
 03EA 5706              cpc R5,R23
 03EC 10F0              brlo L60
 03EE                   .dbline 181
 03EE           ;         return SD_ERR_TIMEOUT_WAITIDLE;                                       /* 超时,返回错误 time out,return error */
 03EE 04E3              ldi R16,52
 03F0 01C0              xjmp L52
 03F2           L60:
 03F2                   .dbline 183
 03F2           ; 
 03F2           ;       return SD_NO_ERR;
 03F2 0027              clr R16
 03F4                   .dbline -2
 03F4           L52:
 03F4 6196              adiw R28,17
 03F6 0E940000          xcall pop_gset3
 03FA                   .dbline 0 ; func end
 03FA 0895              ret
 03FC                   .dbsym l param 13 A[4:4]c
 03FC                   .dbsym l resp 8 A[5:5]c
 03FC                   .dbsym l i 4 l
 03FC                   .dbsym r ret 10 c
 03FC                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\new_sd\SD\SD\sddriver.c
 0000           _sds::
 0000                   .blkb 6
 0006                   .dbstruct 0 6 SD_STRUCT
 0006                   .dbfield 0 block_num c
 0006                   .dbfield 1 block_len c
 0006                   .dbfield 2 erase_unit c
 0006                   .dbfield 3 timeout_read c
 0006                   .dbfield 4 timeout_write c
 0006                   .dbfield 5 timeout_erase c
 0006                   .dbend
 0006                   .dbsym e sds _sds S[SD_STRUCT]

⌨️ 快捷键说明

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