📄 sdcmd.lis
字号:
0146 FE01 movw R30,R28
0148 2080 ldd R2,z+0
014A 3180 ldd R3,z+1
014C 4280 ldd R4,z+2
014E 5380 ldd R5,z+3
0150 240E add R2,R20
0152 351E adc R3,R21
0154 461E adc R4,R22
0156 571E adc R5,R23
0158 FE01 movw R30,R28
015A 2082 std z+0,R2
015C 3182 std z+1,R3
015E 4282 std z+2,R4
0160 5382 std z+3,R5
0162 .dbline 56
0162 ; }
0162 L13:
0162 .dbline 57
0162 ; while (((tmp & 0x80) != 0) && (i < SD_CMD_TIMEOUT));
0162 A7FE sbrs R10,7
0164 0EC0 rjmp L15
0166 44E6 ldi R20,100
0168 50E0 ldi R21,0
016A 60E0 ldi R22,0
016C 70E0 ldi R23,0
016E FE01 movw R30,R28
0170 2080 ldd R2,z+0
0172 3180 ldd R3,z+1
0174 4280 ldd R4,z+2
0176 5380 ldd R5,z+3
0178 2416 cp R2,R20
017A 3506 cpc R3,R21
017C 4606 cpc R4,R22
017E 5706 cpc R5,R23
0180 DCF2 brlt L12
0182 L15:
0182 .dbline 59
0182 ;
0182 ; if (i >= SD_CMD_TIMEOUT)
0182 44E6 ldi R20,100
0184 50E0 ldi R21,0
0186 60E0 ldi R22,0
0188 70E0 ldi R23,0
018A FE01 movw R30,R28
018C 2080 ldd R2,z+0
018E 3180 ldd R3,z+1
0190 4280 ldd R4,z+2
0192 5380 ldd R5,z+3
0194 2416 cp R2,R20
0196 3506 cpc R3,R21
0198 4606 cpc R4,R22
019A 5706 cpc R5,R23
019C 24F0 brlt L16
019E .dbline 60
019E ; {
019E .dbline 61
019E ; SPI_CS_Deassert();
019E 0E940000 xcall _SPI_CS_Deassert
01A2 .dbline 62
01A2 ; return SD_ERR_CMD_TIMEOUT; /* 返回命令超时 return response timeout of command */
01A2 01E1 ldi R16,17
01A4 45C0 xjmp L1
01A6 L16:
01A6 .dbline 65
01A6 ; }
01A6 ;
01A6 ; for (i = rlen - 1; i >= 0; i--)
01A6 41E0 ldi R20,1
01A8 50E0 ldi R21,0
01AA 60E0 ldi R22,0
01AC 70E0 ldi R23,0
01AE FE01 movw R30,R28
01B0 2480 ldd R2,z+4
01B2 3580 ldd R3,z+5
01B4 4680 ldd R4,z+6
01B6 5780 ldd R5,z+7
01B8 241A sub R2,R20
01BA 350A sbc R3,R21
01BC 460A sbc R4,R22
01BE 570A sbc R5,R23
01C0 FE01 movw R30,R28
01C2 2082 std z+0,R2
01C4 3182 std z+1,R3
01C6 4282 std z+2,R4
01C8 5382 std z+3,R5
01CA 20C0 xjmp L21
01CC L18:
01CC .dbline 66
01CC .dbline 67
01CC FE01 movw R30,R28
01CE AF93 push R26
01D0 BF93 push R27
01D2 A081 ldd R26,z+0
01D4 B181 ldd R27,z+1
01D6 FD01 movw R30,R26
01D8 BF91 pop R27
01DA AF91 pop R26
01DC EC0D add R30,R12
01DE FD1D adc R31,R13
01E0 A082 std z+0,R10
01E2 .dbline 68
01E2 0E940000 xcall _SPI_RecByte
01E6 A02E mov R10,R16
01E8 .dbline 69
01E8 L19:
01E8 .dbline 65
01E8 41E0 ldi R20,1
01EA 50E0 ldi R21,0
01EC 60E0 ldi R22,0
01EE 70E0 ldi R23,0
01F0 FE01 movw R30,R28
01F2 2080 ldd R2,z+0
01F4 3180 ldd R3,z+1
01F6 4280 ldd R4,z+2
01F8 5380 ldd R5,z+3
01FA 241A sub R2,R20
01FC 350A sbc R3,R21
01FE 460A sbc R4,R22
0200 570A sbc R5,R23
0202 FE01 movw R30,R28
0204 2082 std z+0,R2
0206 3182 std z+1,R3
0208 4282 std z+2,R4
020A 5382 std z+3,R5
020C L21:
020C .dbline 65
020C 40E0 ldi R20,0
020E 50E0 ldi R21,0
0210 60E0 ldi R22,0
0212 70E0 ldi R23,0
0214 FE01 movw R30,R28
0216 2080 ldd R2,z+0
0218 3180 ldd R3,z+1
021A 4280 ldd R4,z+2
021C 5380 ldd R5,z+3
021E 2416 cp R2,R20
0220 3506 cpc R3,R21
0222 4606 cpc R4,R22
0224 5706 cpc R5,R23
0226 0CF0 brlt X3
0228 D1CF xjmp L18
022A X3:
022A .dbline 71
022A ; {
022A ; resp[i] = tmp;
022A ; tmp = SPI_RecByte(); /* 循环的最后发送8clock at the last recycle,clock out 8 clock */
022A ; }
022A ;
022A ; SPI_CS_Deassert();
022A 0E940000 xcall _SPI_CS_Deassert
022E .dbline 72
022E ; return SD_NO_ERR; /* 返回执行成功 return perform sucessfully */
022E 0027 clr R16
0230 .dbline -2
0230 L1:
0230 2896 adiw R28,8
0232 0E940000 xcall pop_gset5
0236 2496 adiw R28,4
0238 .dbline 0 ; func end
0238 0895 ret
023A .dbsym l rlen 4 L
023A .dbsym r tmp 10 c
023A .dbsym l i 0 L
023A .dbsym r resp 12 pc
023A .dbsym l resptype 22 c
023A .dbsym l param 20 pc
023A .dbsym l cmd 18 c
023A .dbend
023A .dbfunc e SD_PackParam _SD_PackParam fV
023A ; value -> y+2
023A ; parameter -> R20,R21
.even
023A _SD_PackParam::
023A 3A93 st -y,r19
023C 2A93 st -y,r18
023E 0E940000 xcall push_gset1
0242 A801 movw R20,R16
0244 .dbline -1
0244 .dbline 83
0244 ; }
0244 ;
0244 ; /********************************************************************************************************************
0244 ; ** 函数名称: void SD_PackParam() Name: void SD_PackParam()
0244 ; ** 功能描述: 将32位的参数转为字节形式 Function: change 32bit parameter to bytes form
0244 ; ** 输 入: INT8U *parameter: 字节参数缓冲区 Input: INT8U *parameter: the buffer of bytes parameter
0244 ; INT32U value : 32位参数 INT32U value : 32bit parameter
0244 ; ** 输 出: 无 Output: NULL
0244 ; *********************************************************************************************************************/
0244 ; void SD_PackParam(uint8 *parameter, uint32 value)
0244 ; {
0244 .dbline 84
0244 ; parameter[3] = (uint8)(value >> 24);
0244 88E1 ldi R24,24
0246 90E0 ldi R25,0
0248 FE01 movw R30,R28
024A 2280 ldd R2,z+2
024C 3380 ldd R3,z+3
024E 4480 ldd R4,z+4
0250 5580 ldd R5,z+5
0252 8A93 st -y,R24
0254 8101 movw R16,R2
0256 9201 movw R18,R4
0258 0E940000 xcall lsr32
025C FA01 movw R30,R20
025E 0383 std z+3,R16
0260 .dbline 85
0260 ; parameter[2] = (uint8)(value >> 16);
0260 FE01 movw R30,R28
0262 2280 ldd R2,z+2
0264 3380 ldd R3,z+3
0266 4480 ldd R4,z+4
0268 5580 ldd R5,z+5
026A 1201 movw R2,R4
026C 4424 clr R4
026E 5524 clr R5
0270 FA01 movw R30,R20
0272 2282 std z+2,R2
0274 .dbline 86
0274 ; parameter[1] = (uint8)(value >> 8);
0274 88E0 ldi R24,8
0276 90E0 ldi R25,0
0278 FE01 movw R30,R28
027A 2280 ldd R2,z+2
027C 3380 ldd R3,z+3
027E 4480 ldd R4,z+4
0280 5580 ldd R5,z+5
0282 8A93 st -y,R24
0284 8101 movw R16,R2
0286 9201 movw R18,R4
0288 0E940000 xcall lsr32
028C FA01 movw R30,R20
028E 0183 std z+1,R16
0290 .dbline 87
0290 ; parameter[0] = (uint8)(value);
0290 FE01 movw R30,R28
0292 2280 ldd R2,z+2
0294 3380 ldd R3,z+3
0296 4480 ldd R4,z+4
0298 5580 ldd R5,z+5
029A FA01 movw R30,R20
029C 2082 std z+0,R2
029E .dbline -2
029E L22:
029E 0E940000 xcall pop_gset1
02A2 2296 adiw R28,2
02A4 .dbline 0 ; func end
02A4 0895 ret
02A6 .dbsym l value 2 l
02A6 .dbsym r parameter 20 pc
02A6 .dbend
02A6 .dbfunc e SD_BlockCommand _SD_BlockCommand fc
02A6 ; resp -> y+8
02A6 ; param -> y+4
02A6 ; ret -> R20
02A6 ; parameter -> y+13
02A6 ; resptype -> R22
02A6 ; cmd -> R20
.even
02A6 _SD_BlockCommand::
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -