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

📄 sddriver.lis

📁 mega128的串口发送文件.可以发送0X55上位机使用串口调试工具就可以接收了.
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00DA 0A85              ldd R16,y+10
 00DC 1127              clr R17
 00DE 0078              andi R16,128
 00E0 1070              andi R17,0
 00E2 0E940000          xcall asr16
 00E6 8985              ldd R24,y+9
 00E8 9927              clr R25
 00EA 8370              andi R24,3
 00EC 9070              andi R25,0
 00EE 880F              lsl R24
 00F0 991F              rol R25
 00F2 800F              add R24,R16
 00F4 911F              adc R25,R17
 00F6 0296              adiw R24,2
 00F8 1C01              movw R2,R24
 00FA 4424              clr R4
 00FC 37FC              sbrc R3,7
 00FE 4094              com R4
 0100 5524              clr R5
 0102 47FC              sbrc R4,7
 0104 5094              com R5
 0106 FE01              movw R30,R28
 0108 208A              std z+16,R2
 010A 318A              std z+17,R3
 010C 428A              std z+18,R4
 010E 538A              std z+19,R5
 0110                   .dbline 104
 0110           ;             ((csdbuf[C_SIZE_MULT_POS2] & C_SIZE_MULT_MSK2) >> 7) + 2;                         /* (C_SIZE_MULT + 2) */
 0110           ;       
 0110           ;     /* 获得卡中块的数量 */                                                                                                            /* get the block numbers in card */
 0110           ;       sds.block_num = sds.block_num * (1 << tmp);                                                                     /* (C_SIZE + 1) * 2 ^ (C_SIZE_MULT + 2) */
 0110 FE01              movw R30,R28
 0112 2089              ldd R18,z+16
 0114 3189              ldd R19,z+17
 0116 01E0              ldi R16,1
 0118 10E0              ldi R17,0
 011A 0E940000          xcall lsl16
 011E 9801              movw R18,R16
 0120 00910000          lds R16,_sds
 0124 1127              clr R17
 0126 0E940000          xcall empy16s
 012A 00930000          sts _sds,R16
 012E                   .dbline 107
 012E           ;                                                                                                                                                       
 012E           ;       /* 计算扇区大小 */                                                                                                                      /*calculate the size of sector */
 012E           ;       sds.erase_unit = ((csdbuf[SECTOR_SIZE_POS1] & SECTOR_SIZE_MSK1) << 1) +                         
 012E 8B85              ldd R24,y+11
 0130 8078              andi R24,128
 0132 8695              lsr R24
 0134 8695              lsr R24
 0136 8695              lsr R24
 0138 8695              lsr R24
 013A 8695              lsr R24
 013C 8695              lsr R24
 013E 8695              lsr R24
 0140 9A85              ldd R25,y+10
 0142 9F73              andi R25,63
 0144 990F              lsl R25
 0146 980F              add R25,R24
 0148 9F5F              subi R25,255    ; addi 1
 014A 90930200          sts _sds+2,R25
 014E                   .dbline 110
 014E           ;                        ((csdbuf[SECTOR_SIZE_POS2] & SECTOR_SIZE_MSK2) >> 7) + 1; /* SD (SECTOR_SIZE + 1) */
 014E           ;                               
 014E           ;       return SD_NO_ERR;                                                                                                                       /* 返回执行成功 return perform sucessfully */
 014E 0027              clr R16
 0150                   .dbline -2
 0150           L15:
 0150 6496              adiw R28,20
 0152 0E940000          xcall pop_gset1
 0156                   .dbline 0 ; func end
 0156 0895              ret
 0158                   .dbsym l tmp 16 l
 0158                   .dbsym r ret 20 c
 0158                   .dbsym l csdbuf 0 A[16:16]c
 0158                   .dbend
 0158                   .dbfunc e SD_CalTimeout _SD_CalTimeout fV
 0158           ;         time_u -> R14
 0158           ;          fator -> R10
 0158           ;         time_v -> R12
 0158           ;            tmp -> y+0
 0158           ;         csdbuf -> y+14
                        .even
 0158           _SD_CalTimeout::
 0158 1A93              st -y,r17
 015A 0A93              st -y,r16
 015C 0E940000          xcall push_gset5
 0160 2497              sbiw R28,4
 0162                   .dbline -1
 0162                   .dbline 122
 0162           ; }
 0162           ; 
 0162           ; 
 0162           ; /*******************************************************************************************************************
 0162           ; ** 函数名称: INT8U SD_CalTimeout()                            Name:     INT8U SD_CalTimeout()
 0162           ; ** 功能描述: 计算读/写/擦超时时间                             Function: get the information of SD card
 0162           ; ** 输   入: INT8U cardtype: 卡类型                           Input:    INT8U cardtype: card type     
 0162           ;                        INT8U *csdbuf : CSD寄存器内容                        INT8U *csdbuf : CSD register content
 0162           ; ** 输   出: 0:   正确    >0:   错误码                        Output:   0:  right             >0:  error code
 0162           ; *******************************************************************************************************************/
 0162           ; void SD_CalTimeout(uint8 *csdbuf)
 0162           ; {
 0162                   .dbline 126
 0162           ;       uint32 tmp;
 0162           ;       uint8 time_u,time_v,fator;
 0162           ;       
 0162           ;       sds.timeout_read = READ_TIMEOUT_100MS;                                                          /* 默认读超时为100ms */
 0162 40E0              ldi R20,0
 0164 5EE0              ldi R21,14
 0166 61E0              ldi R22,1
 0168 70E0              ldi R23,0
 016A 1A01              movw R2,R20
 016C 20920300          sts _sds+3,R2
 0170                   .dbline 127
 0170           ;       sds.timeout_write = WRITE_TIMEOUT_250MS;                                                        /* 默认写超时为250ms */
 0170 40E0              ldi R20,0
 0172 53EA              ldi R21,163
 0174 62E0              ldi R22,2
 0176 70E0              ldi R23,0
 0178 1A01              movw R2,R20
 017A 20920400          sts _sds+4,R2
 017E                   .dbline 128
 017E           ;       sds.timeout_erase = WRITE_TIMEOUT_250MS;
 017E 40E0              ldi R20,0
 0180 53EA              ldi R21,163
 0182 62E0              ldi R22,2
 0184 70E0              ldi R23,0
 0186 1A01              movw R2,R20
 0188 20920500          sts _sds+5,R2
 018C                   .dbline 130
 018C           ;               
 018C           ;       time_u = (csdbuf[TAAC_POS] & TAAC_MSK);                                                         /* 读超时时间单位 read timeout unit */
 018C EE85              ldd R30,y+14
 018E FF85              ldd R31,y+15
 0190 8181              ldd R24,z+1
 0192 8770              andi R24,7
 0194 E82E              mov R14,R24
 0196                   .dbline 131
 0196           ;       time_v = (csdbuf[TAAC_POS] & NSAC_MSK) >> 3;                                            /* 读超时时间值   read timeout value */
 0196 EE85              ldd R30,y+14
 0198 FF85              ldd R31,y+15
 019A 8181              ldd R24,z+1
 019C 8877              andi R24,120
 019E C82E              mov R12,R24
 01A0 C694              lsr R12
 01A2 C694              lsr R12
 01A4 C694              lsr R12
 01A6                   .dbline 132
 01A6           ;       fator = (csdbuf[R2WFACTOR_POS] & R2WFACTOR_MSK) >> 2;                           /* 写超时时间因数 write timeout factor */
 01A6 EE85              ldd R30,y+14
 01A8 FF85              ldd R31,y+15
 01AA 8485              ldd R24,z+12
 01AC 8C71              andi R24,28
 01AE A82E              mov R10,R24
 01B0 A694              lsr R10
 01B2 A694              lsr R10
 01B4                   .dbline 134
 01B4           ;       
 01B4           ;       if(time_v == 0) return;
 01B4 CC20              tst R12
 01B6 09F4              brne L32
 01B8                   .dbline 134
 01B8 BAC0              xjmp L28
 01BA           L32:
 01BA                   .dbline 135
 01BA           ;       if(fator >= 6) return;
 01BA 8A2D              mov R24,R10
 01BC 8630              cpi R24,6
 01BE 08F0              brlo L34
 01C0                   .dbline 135
 01C0 B6C0              xjmp L28
 01C2           L34:
 01C2                   .dbline 137
 01C2           ;       
 01C2           ;       tmp = SPI_CLOCK * time_value[time_v] / 10 / time_unit[time_u];          /* TACC * f (单位 unit: clock) */
 01C2 80E0              ldi R24,<_time_value
 01C4 90E0              ldi R25,>_time_value
 01C6 EC2D              mov R30,R12
 01C8 FF27              clr R31
 01CA E80F              add R30,R24
 01CC F91F              adc R31,R25
 01CE 2490              lpm R2,Z
 01D0 3324              clr R3
 01D2 4424              clr R4
 01D4 5524              clr R5
 01D6 40E0              ldi R20,0
 01D8 50E6              ldi R21,96
 01DA 64E5              ldi R22,84
 01DC 70E0              ldi R23,0
 01DE 5A92              st -y,R5
 01E0 4A92              st -y,R4
 01E2 3A92              st -y,R3
 01E4 2A92              st -y,R2
 01E6 8A01              movw R16,R20
 01E8 9B01              movw R18,R22
 01EA 0E940000          xcall empy32s
 01EE 4AE0              ldi R20,10
 01F0 50E0              ldi R21,0
 01F2 60E0              ldi R22,0
 01F4 70E0              ldi R23,0
 01F6 7A93              st -y,R23
 01F8 6A93              st -y,R22
 01FA 5A93              st -y,R21
 01FC 4A93              st -y,R20
 01FE 0E940000          xcall div32s
 0202 1801              movw R2,R16
 0204 2901              movw R4,R18
 0206 84E0              ldi R24,4
 0208 8E9D              mul R24,R14
 020A 8001              movw R16,R0
 020C 80E0              ldi R24,<_time_unit
 020E 90E0              ldi R25,>_time_unit
 0210 080F              add R16,R24
 0212 191F              adc R17,R25
 0214 0E940000          xcall lpm32
 0218 3A93              st -y,R19
 021A 2A93              st -y,R18
 021C 1A93              st -y,R17
 021E 0A93              st -y,R16
 0220 8101              movw R16,R2
 0222 9201              movw R18,R4
 0224 0E940000          xcall div32u
 0228 FE01              movw R30,R28
 022A 0083              std z+0,R16
 022C 1183              std z+1,R17
 022E 2283              std z+2,R18
 0230 3383              std z+3,R19
 0232                   .dbline 138
 0232           ;       tmp = tmp + csdbuf[NSAC_POS] * 100;                                                                     /* TACC * f + NSAC * 100 (单位 unit: clock) */
 0232 EE85              ldd R30,y+14
 0234 FF85              ldd R31,y+15
 0236 2280              ldd R2,z+2
 0238 84E6              ldi R24,100
 023A 829D              mul R24,R2
 023C 1001              movw R2,R0
 023E 4424              clr R4
 0240 37FC              sbrc R3,7
 0242 4094              com R4
 0244 5524              clr R5
 0246 47FC              sbrc R4,7
 0248 5094              com R5
 024A FE01              movw R30,R28
 024C 6080              ldd R6,z+0
 024E 7180              ldd R7,z+1
 0250 8280              ldd R8,z+2
 0252 9380              ldd R9,z+3
 0254 620C              add R6,R2
 0256 731C              adc R7,R3
 0258 841C              adc R8,R4
 025A 951C              adc R9,R5
 025C FE01              movw R30,R28
 025E 6082              std z+0,R6
 0260 7182              std z+1,R7
 0262 8282              std z+2,R8
 0264 9382              std z+3,R9
 0266                   .dbline 141
 0266           ;       
 0266           ;       /* 计算得到的超时值 the timeout value of being calculated */
 0266           ;       sds.timeout_read = tmp;
 0266 FE01              movw R30,R28
 0268 2080              ldd R2,z+0
 026A 3180              ldd R3,z+1
 026C 4280              ldd R4,z+2
 026E 5380              ldd R5,z+3
 0270 20920300          sts _sds+3,R2
 0274                   .dbline 142
 0274           ;       sds.timeout_write = tmp * r2w_fator[fator];                                                     /* (TACC * f + NSAC * 100) * R2WFACTOR (单位 unit:clock)*/
 0274 80E0              ldi R24,<_r2w_fator
 0276 90E0              ldi R25,>_r2w_fator
 0278 EA2D              mov R30,R10
 027A FF27              clr R31
 027C E80F              add R30,R24
 027E F91F              adc R31,R25
 0280 2490              lpm R2,Z
 0282 3324              clr R3
 0284 4424              clr R4
 0286 5524              clr R5
 0288 FE01              movw R30,R28
 028A 6080              ldd R6,z+0
 028C 7180              ldd R7,z+1

⌨️ 快捷键说明

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