📄 sd.lis
字号:
02AA L48:
02AA .dbline 93
02AA L49:
02AA .dbline 93
02AA ; }
02AA ;
02AA ; void sd_read_block(ulong blockadd,ulong length,uchar *mp3_data)//读SD数据
02AA ; { while(read_block(blockadd,length,mp3_data)==0);}
02AA 5D83 std y+5,R21
02AC 4C83 std y+4,R20
02AE FE01 movw R30,R28
02B0 2484 ldd R2,z+12
02B2 3584 ldd R3,z+13
02B4 4684 ldd R4,z+14
02B6 5784 ldd R5,z+15
02B8 2882 std y+0,R2
02BA 3982 std y+1,R3
02BC 4A82 std y+2,R4
02BE 5B82 std y+3,R5
02C0 FE01 movw R30,R28
02C2 0085 ldd R16,z+8
02C4 1185 ldd R17,z+9
02C6 2285 ldd R18,z+10
02C8 3385 ldd R19,z+11
02CA 3EDF xcall _read_block
02CC 0023 tst R16
02CE 69F3 breq L48
02D0 .dbline -2
02D0 .dbline 93
02D0 L47:
02D0 2696 adiw R28,6
02D2 0E940000 xcall pop_gset1
02D6 2496 adiw R28,4
02D8 .dbline 0 ; func end
02D8 0895 ret
02DA .dbsym r mp3_data 20 pc
02DA .dbsym l length 12 l
02DA .dbsym l blockadd 8 l
02DA .dbend
02DA .dbfunc e do_sd_init _do_sd_init fc
02DA ; n -> R10
.even
02DA _do_sd_init::
02DA 0E940000 xcall push_gset3
02DE 2697 sbiw R28,6
02E0 .dbline -1
02E0 .dbline 96
02E0 ;
02E0 ; uchar do_sd_init(void)//sd初始化
02E0 ; { uchar n;
02E0 .dbline 97
02E0 ; delay(200);
02E0 08EC ldi R16,200
02E2 10E0 ldi R17,0
02E4 0E940000 xcall _delay
02E8 .dbline 98
02E8 ; select_sd;
02E8 C398 cbi 0x18,3
02EA .dbline 99
02EA ; sd_delay(100);
02EA 04E6 ldi R16,100
02EC 8FDE xcall _sd_delay
02EE .dbline 100
02EE ; select_vs;
02EE C39A sbi 0x18,3
02F0 .dbline 101
02F0 ; sd_delay(2);
02F0 02E0 ldi R16,2
02F2 8CDE xcall _sd_delay
02F4 .dbline 102
02F4 ; if(sd_write_command(CMD0,CMD0_R,0,response)==0)
02F4 80E0 ldi R24,<_response
02F6 90E0 ldi R25,>_response
02F8 9D83 std y+5,R25
02FA 8C83 std y+4,R24
02FC 40E0 ldi R20,0
02FE 50E0 ldi R21,0
0300 60E0 ldi R22,0
0302 70E0 ldi R23,0
0304 4883 std y+0,R20
0306 5983 std y+1,R21
0308 6A83 std y+2,R22
030A 7B83 std y+3,R23
030C 21E0 ldi R18,1
030E 0027 clr R16
0310 90DE xcall _sd_write_command
0312 0023 tst R16
0314 11F4 brne L52
0316 .dbline 103
0316 ; return 0;
0316 0027 clr R16
0318 51C0 xjmp L51
031A L52:
031A .dbline 104
031A ; n=0;
031A AA24 clr R10
031C L54:
031C .dbline 106
031C ; do
031C ; { n++;
031C .dbline 106
031C A394 inc R10
031E .dbline 107
031E ; if(sd_write_command(CMD55,CMD55_R,0,response)==1)//进入special command
031E 80E0 ldi R24,<_response
0320 90E0 ldi R25,>_response
0322 9D83 std y+5,R25
0324 8C83 std y+4,R24
0326 40E0 ldi R20,0
0328 50E0 ldi R21,0
032A 60E0 ldi R22,0
032C 70E0 ldi R23,0
032E 4883 std y+0,R20
0330 5983 std y+1,R21
0332 6A83 std y+2,R22
0334 7B83 std y+3,R23
0336 21E0 ldi R18,1
0338 07E3 ldi R16,55
033A 7BDE xcall _sd_write_command
033C 0130 cpi R16,1
033E 81F4 brne L57
0340 .dbline 108
0340 ; { /*getin OCR*/
0340 .dbline 109
0340 ; sd_write_command(ACMD41,ACMD41_R,0,response);
0340 80E0 ldi R24,<_response
0342 90E0 ldi R25,>_response
0344 9D83 std y+5,R25
0346 8C83 std y+4,R24
0348 40E0 ldi R20,0
034A 50E0 ldi R21,0
034C 60E0 ldi R22,0
034E 70E0 ldi R23,0
0350 4883 std y+0,R20
0352 5983 std y+1,R21
0354 6A83 std y+2,R22
0356 7B83 std y+3,R23
0358 21E0 ldi R18,1
035A 09E2 ldi R16,41
035C 6ADE xcall _sd_write_command
035E .dbline 110
035E ; }
035E 02C0 xjmp L58
0360 L57:
0360 .dbline 112
0360 ; else
0360 ; n=SD_IDLE_WAIT_MAX; //no response
0360 84E6 ldi R24,100
0362 A82E mov R10,R24
0364 L58:
0364 .dbline 113
0364 ; delay(500);//经调试需要加延迟
0364 04EF ldi R16,500
0366 11E0 ldi R17,1
0368 0E940000 xcall _delay
036C .dbline 114
036C ; }
036C L55:
036C .dbline 115
036C ; while(((response[0]&MSK_IDLE)==MSK_IDLE)&&(n<SD_IDLE_WAIT_MAX));
036C 80910000 lds R24,_response
0370 8170 andi R24,1
0372 8130 cpi R24,1
0374 19F4 brne L59
0376 8A2D mov R24,R10
0378 8436 cpi R24,100
037A 80F2 brlo L54
037C L59:
037C .dbline 116
037C ; if(n>=SD_IDLE_WAIT_MAX)
037C 8A2D mov R24,R10
037E 8436 cpi R24,100
0380 10F0 brlo L60
0382 .dbline 117
0382 ; return 0;
0382 0027 clr R16
0384 1BC0 xjmp L51
0386 L60:
0386 .dbline 118
0386 ; if(sd_write_command(CMD58,CMD58_R,0,response)==0)//读取OCR
0386 80E0 ldi R24,<_response
0388 90E0 ldi R25,>_response
038A 9D83 std y+5,R25
038C 8C83 std y+4,R24
038E 40E0 ldi R20,0
0390 50E0 ldi R21,0
0392 60E0 ldi R22,0
0394 70E0 ldi R23,0
0396 4883 std y+0,R20
0398 5983 std y+1,R21
039A 6A83 std y+2,R22
039C 7B83 std y+3,R23
039E 24E0 ldi R18,4
03A0 0AE3 ldi R16,58
03A2 47DE xcall _sd_write_command
03A4 0023 tst R16
03A6 11F4 brne L62
03A8 .dbline 119
03A8 ; return 0;
03A8 0027 clr R16
03AA 08C0 xjmp L51
03AC L62:
03AC .dbline 120
03AC ; if((response[2]&MSK_OCR_33)!=MSK_OCR_33)//电压最低为3.3V
03AC 80910200 lds R24,_response+2
03B0 807C andi R24,192
03B2 803C cpi R24,192
03B4 11F0 breq L64
03B6 .dbline 121
03B6 ; return 0;
03B6 0027 clr R16
03B8 01C0 xjmp L51
03BA L64:
03BA .dbline 126
03BA ; /*set block length
03BA ; if(sd_write_command(CMD16,CMD16_R,DATA_LENGTH,response)==0)
03BA ; return 0;
03BA ; */
03BA ; return 1;
03BA 01E0 ldi R16,1
03BC .dbline -2
03BC L51:
03BC 2696 adiw R28,6
03BE 0E940000 xcall pop_gset3
03C2 .dbline 0 ; func end
03C2 0895 ret
03C4 .dbsym r n 10 c
03C4 .dbend
03C4 .dbfunc e sd_init _sd_init fc
03C4 ; j -> R20
03C4 ; n -> R22
.even
03C4 _sd_init::
03C4 0E940000 xcall push_gset2
03C8 .dbline -1
03C8 .dbline 130
03C8 ; }
03C8 ;
03C8 ; uchar sd_init(void)
03C8 ; { uchar n,j;
03C8 .dbline 131
03C8 ; j=0;
03C8 4427 clr R20
03CA .dbline 132
03CA ; for(n=0;(n<SD_INIT_TRY)&&(j!=1);n++)
03CA 6627 clr R22
03CC 03C0 xjmp L71
03CE L68:
03CE .dbline 133
03CE 85DF xcall _do_sd_init
03D0 402F mov R20,R16
03D2 L69:
03D2 .dbline 132
03D2 6395 inc R22
03D4 L71:
03D4 .dbline 132
03D4 6233 cpi R22,50
03D6 10F4 brsh L72
03D8 4130 cpi R20,1
03DA C9F7 brne L68
03DC L72:
03DC .dbline 134
03DC ; j=do_sd_init();
03DC ; if(n>=SD_INIT_TRY)//超次数
03DC 6233 cpi R22,50
03DE 10F0 brlo L73
03E0 .dbline 135
03E0 ; return 0;
03E0 0027 clr R16
03E2 01C0 xjmp L67
03E4 L73:
03E4 .dbline 136
03E4 ; return 1;
03E4 01E0 ldi R16,1
03E6 .dbline -2
03E6 L67:
03E6 0E940000 xcall pop_gset2
03EA .dbline 0 ; func end
03EA 0895 ret
03EC .dbsym r j 20 c
03EC .dbsym r n 22 c
03EC .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\mine\mp3\MP3\sd.c
0000 _response::
0000 .blkb 5
0005 .dbsym e response _response A[5:5]c
0005 _mp3_data::
0005 .blkb 512
0205 .dbsym e mp3_data _mp3_data A[512:512]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -