📄 sd.lis
字号:
012E L29:
012E .dbline 58
012E ; { dat=read_single();}
012E .dbline 58
012E 0E940000 xcall _read_single
0132 602F mov R22,R16
0134 .dbline 58
0134 L30:
0134 .dbline 59
0134 ; while(dat!=0xff);
0134 6F3F cpi R22,255
0136 D9F7 brne L29
0138 .dbline 60
0138 ; write_single(0xff);
0138 0FEF ldi R16,255
013A 0E940000 xcall _write_single
013E .dbline 61
013E ; }
013E L27:
013E .dbline 62
013E ; select_vs;//释放SD
013E C39A sbi 0x18,3
0140 .dbline 63
0140 ; return 1;
0140 01E0 ldi R16,1
0142 .dbline -2
0142 L10:
0142 0E940000 xcall pop_gset5
0146 .dbline 0 ; func end
0146 0895 ret
0148 .dbsym r response_length 14 c
0148 .dbsym r dat 22 c
0148 .dbsym r n 20 I
0148 .dbsym r response 10 pc
0148 .dbsym l arg 10 l
0148 .dbsym r response_type 12 c
0148 .dbsym r cmd 20 c
0148 .dbend
0148 .dbfunc e read_block _read_block fc
0148 ; dat -> R12
0148 ; n -> y+6
0148 ; mp3_data -> R10,R11
0148 ; length -> y+22
0148 ; blockadd -> y+18
.even
0148 _read_block::
0148 0E940000 xcall push_arg4
014C 0E940000 xcall push_gset4
0150 2A97 sbiw R28,10
0152 AA8C ldd R10,y+26
0154 BB8C ldd R11,y+27
0156 .dbline -1
0156 .dbline 67
0156 ; }
0156 ;
0156 ; uchar read_block(ulong blockadd,ulong length,uchar *mp3_data)
0156 ; { uchar dat;
0156 .dbline 69
0156 ; ulong n;
0156 ; sd_wait_nobusy();
0156 54DF xcall _sd_wait_nobusy
0158 .dbline 70
0158 ; if(sd_write_command(CMD16,CMD16_R,length,response)==0)//设置读取数据的长度
0158 80E0 ldi R24,<_response
015A 90E0 ldi R25,>_response
015C 9D83 std y+5,R25
015E 8C83 std y+4,R24
0160 FE01 movw R30,R28
0162 2688 ldd R2,z+22
0164 3788 ldd R3,z+23
0166 408C ldd R4,z+24
0168 518C ldd R5,z+25
016A 2882 std y+0,R2
016C 3982 std y+1,R3
016E 4A82 std y+2,R4
0170 5B82 std y+3,R5
0172 21E0 ldi R18,1
0174 00E1 ldi R16,16
0176 5DDF xcall _sd_write_command
0178 0023 tst R16
017A 11F4 brne L33
017C .dbline 71
017C ; return 0;
017C 0027 clr R16
017E 89C0 xjmp L32
0180 L33:
0180 .dbline 73
0180 ; //blockadd<<=9;//增加512B
0180 ; if(sd_write_command(CMD17,CMD17_R,blockadd,response)==0)
0180 80E0 ldi R24,<_response
0182 90E0 ldi R25,>_response
0184 9D83 std y+5,R25
0186 8C83 std y+4,R24
0188 FE01 movw R30,R28
018A 2288 ldd R2,z+18
018C 3388 ldd R3,z+19
018E 4488 ldd R4,z+20
0190 5588 ldd R5,z+21
0192 2882 std y+0,R2
0194 3982 std y+1,R3
0196 4A82 std y+2,R4
0198 5B82 std y+3,R5
019A 21E0 ldi R18,1
019C 01E1 ldi R16,17
019E 49DF xcall _sd_write_command
01A0 0023 tst R16
01A2 11F4 brne L35
01A4 .dbline 74
01A4 ; return 0;
01A4 0027 clr R16
01A6 75C0 xjmp L32
01A8 L35:
01A8 .dbline 75
01A8 ; if(response[0]!=0)//出现error
01A8 20900000 lds R2,_response
01AC 2220 tst R2
01AE 11F0 breq L37
01B0 .dbline 76
01B0 ; return 0;
01B0 0027 clr R16
01B2 6FC0 xjmp L32
01B4 L37:
01B4 .dbline 77
01B4 ; select_sd;
01B4 C398 cbi 0x18,3
01B6 .dbline 78
01B6 ; n=0;
01B6 40E0 ldi R20,0
01B8 50E0 ldi R21,0
01BA 60E0 ldi R22,0
01BC 70E0 ldi R23,0
01BE FE01 movw R30,R28
01C0 4683 std z+6,R20
01C2 5783 std z+7,R21
01C4 6087 std z+8,R22
01C6 7187 std z+9,R23
01C8 L39:
01C8 .dbline 80
01C8 ; do
01C8 ; { dat=read_single();
01C8 .dbline 80
01C8 0E940000 xcall _read_single
01CC C02E mov R12,R16
01CE .dbline 81
01CE ; n++;
01CE 41E0 ldi R20,1
01D0 50E0 ldi R21,0
01D2 60E0 ldi R22,0
01D4 70E0 ldi R23,0
01D6 FE01 movw R30,R28
01D8 2680 ldd R2,z+6
01DA 3780 ldd R3,z+7
01DC 4084 ldd R4,z+8
01DE 5184 ldd R5,z+9
01E0 240E add R2,R20
01E2 351E adc R3,R21
01E4 461E adc R4,R22
01E6 571E adc R5,R23
01E8 FE01 movw R30,R28
01EA 2682 std z+6,R2
01EC 3782 std z+7,R3
01EE 4086 std z+8,R4
01F0 5186 std z+9,R5
01F2 .dbline 82
01F2 ; }
01F2 L40:
01F2 .dbline 83
01F2 ; while((dat==0xff)&&(n<TIMEOUT_READ));//读出数据的头0xfe
01F2 8C2D mov R24,R12
01F4 8F3F cpi R24,255
01F6 71F4 brne L42
01F8 40E8 ldi R20,128
01FA 5AE1 ldi R21,26
01FC 66E0 ldi R22,6
01FE 70E0 ldi R23,0
0200 FE01 movw R30,R28
0202 2680 ldd R2,z+6
0204 3780 ldd R3,z+7
0206 4084 ldd R4,z+8
0208 5184 ldd R5,z+9
020A 2416 cp R2,R20
020C 3506 cpc R3,R21
020E 4606 cpc R4,R22
0210 5706 cpc R5,R23
0212 D0F2 brlo L39
0214 L42:
0214 .dbline 84
0214 ; for(n=0;n<length;n++)
0214 40E0 ldi R20,0
0216 50E0 ldi R21,0
0218 60E0 ldi R22,0
021A 70E0 ldi R23,0
021C FE01 movw R30,R28
021E 4683 std z+6,R20
0220 5783 std z+7,R21
0222 6087 std z+8,R22
0224 7187 std z+9,R23
0226 1FC0 xjmp L46
0228 L43:
0228 .dbline 85
0228 .dbline 85
0228 0E940000 xcall _read_single
022C FE01 movw R30,R28
022E AF93 push R26
0230 BF93 push R27
0232 A681 ldd R26,z+6
0234 B781 ldd R27,z+7
0236 FD01 movw R30,R26
0238 BF91 pop R27
023A AF91 pop R26
023C EA0D add R30,R10
023E FB1D adc R31,R11
0240 0083 std z+0,R16
0242 .dbline 85
0242 L44:
0242 .dbline 84
0242 41E0 ldi R20,1
0244 50E0 ldi R21,0
0246 60E0 ldi R22,0
0248 70E0 ldi R23,0
024A FE01 movw R30,R28
024C 2680 ldd R2,z+6
024E 3780 ldd R3,z+7
0250 4084 ldd R4,z+8
0252 5184 ldd R5,z+9
0254 240E add R2,R20
0256 351E adc R3,R21
0258 461E adc R4,R22
025A 571E adc R5,R23
025C FE01 movw R30,R28
025E 2682 std z+6,R2
0260 3782 std z+7,R3
0262 4086 std z+8,R4
0264 5186 std z+9,R5
0266 L46:
0266 .dbline 84
0266 FE01 movw R30,R28
0268 2688 ldd R2,z+22
026A 3788 ldd R3,z+23
026C 408C ldd R4,z+24
026E 518C ldd R5,z+25
0270 FE01 movw R30,R28
0272 6680 ldd R6,z+6
0274 7780 ldd R7,z+7
0276 8084 ldd R8,z+8
0278 9184 ldd R9,z+9
027A 6214 cp R6,R2
027C 7304 cpc R7,R3
027E 8404 cpc R8,R4
0280 9504 cpc R9,R5
0282 08F4 brsh X1
0284 D1CF xjmp L43
0286 X1:
0286 .dbline 86
0286 ; { mp3_data[n]=read_single();}
0286 ; read_single();//CRC 16bit
0286 0E940000 xcall _read_single
028A .dbline 87
028A ; read_single();
028A 0E940000 xcall _read_single
028E .dbline 88
028E ; select_vs;
028E C39A sbi 0x18,3
0290 .dbline 89
0290 ; return 1;
0290 01E0 ldi R16,1
0292 .dbline -2
0292 L32:
0292 2A96 adiw R28,10
0294 0E940000 xcall pop_gset4
0298 2496 adiw R28,4
029A .dbline 0 ; func end
029A 0895 ret
029C .dbsym r dat 12 c
029C .dbsym l n 6 l
029C .dbsym r mp3_data 10 pc
029C .dbsym l length 22 l
029C .dbsym l blockadd 18 l
029C .dbend
029C .dbfunc e sd_read_block _sd_read_block fV
029C ; mp3_data -> R20,R21
029C ; length -> y+12
029C ; blockadd -> y+8
.even
029C _sd_read_block::
029C 0E940000 xcall push_arg4
02A0 0E940000 xcall push_gset1
02A4 2697 sbiw R28,6
02A6 4889 ldd R20,y+16
02A8 5989 ldd R21,y+17
02AA .dbline -1
02AA .dbline 93
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -