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

📄 mp3.lst

📁 mp3源码,是自己写的,关于vs1001与CD卡的读取歌曲,和播放.
💻 LST
📖 第 1 页 / 共 3 页
字号:
    012B 5041      SUBI	R20,1
    012C 4050      SBCI	R21,0
    012D 3040      CPI	R20,0
    012E E0E0      LDI	R30,0
    012F 075E      CPC	R21,R30
    0130 F79C      BGE	0x0124
(0055)   }	
(0056)   if(response_type==R1B)//忙等待结束
    0131 2D8C      MOV	R24,R12
    0132 3082      CPI	R24,2
    0133 F441      BNE	0x013C
(0057)   { do
(0058)     { dat=read_single();}
    0134 940E02B1  CALL	_read_single
    0136 2F60      MOV	R22,R16
(0059) 	while(dat!=0xff);
    0137 3F6F      CPI	R22,0xFF
    0138 F7D9      BNE	0x0134
(0060) 	write_single(0xff);
    0139 EF0F      LDI	R16,0xFF
    013A 940E02AC  CALL	_write_single
(0061)   }
(0062)   select_vs;//释放SD
    013C 9AC3      SBI	0x18,3
(0063)   return 1;	  
    013D E001      LDI	R16,1
    013E 940E0A77  CALL	pop_gset5
    0140 9508      RET
_read_block:
  dat                  --> R12
  n                    --> Y+6
  mp3_data             --> R10
  length               --> Y+22
  blockadd             --> Y+18
    0141 940E0A0D  CALL	push_arg4
    0143 940E0A99  CALL	push_gset4
    0145 972A      SBIW	R28,0xA
    0146 8CAA      LDD	R10,Y+26
    0147 8CBB      LDD	R11,Y+27
(0064) }
(0065) 
(0066) uchar read_block(ulong blockadd,ulong length,uchar *mp3_data) 
(0067) { uchar dat;
(0068)   ulong n;  
(0069)   sd_wait_nobusy();
    0148 DF54      RCALL	_sd_wait_nobusy
(0070)   if(sd_write_command(CMD16,CMD16_R,length,response)==0)//设置读取数据的长度
    0149 E685      LDI	R24,0x65
    014A E090      LDI	R25,0
    014B 839D      STD	Y+5,R25
    014C 838C      STD	Y+4,R24
    014D 01FE      MOVW	R30,R28
    014E 8826      LDD	R2,Z+22
    014F 8837      LDD	R3,Z+23
    0150 8C40      LDD	R4,Z+24
    0151 8C51      LDD	R5,Z+25
    0152 8228      STD	Y+0,R2
    0153 8239      STD	Y+1,R3
    0154 824A      STD	Y+2,R4
    0155 825B      STD	Y+3,R5
    0156 E021      LDI	R18,1
    0157 E100      LDI	R16,0x10
    0158 DF5D      RCALL	_sd_write_command
    0159 2300      TST	R16
    015A F411      BNE	0x015D
(0071)     return 0; 
    015B 2700      CLR	R16
    015C C089      RJMP	0x01E6
(0072)   //blockadd<<=9;//增加512B
(0073)   if(sd_write_command(CMD17,CMD17_R,blockadd,response)==0)
    015D E685      LDI	R24,0x65
    015E E090      LDI	R25,0
    015F 839D      STD	Y+5,R25
    0160 838C      STD	Y+4,R24
    0161 01FE      MOVW	R30,R28
    0162 8822      LDD	R2,Z+18
    0163 8833      LDD	R3,Z+19
    0164 8844      LDD	R4,Z+20
    0165 8855      LDD	R5,Z+21
    0166 8228      STD	Y+0,R2
    0167 8239      STD	Y+1,R3
    0168 824A      STD	Y+2,R4
    0169 825B      STD	Y+3,R5
    016A E021      LDI	R18,1
    016B E101      LDI	R16,0x11
    016C DF49      RCALL	_sd_write_command
    016D 2300      TST	R16
    016E F411      BNE	0x0171
(0074)     return 0;
    016F 2700      CLR	R16
    0170 C075      RJMP	0x01E6
(0075)   if(response[0]!=0)//出现error
    0171 90200065  LDS	R2,_response
    0173 2022      TST	R2
    0174 F011      BEQ	0x0177
(0076)     return 0;
    0175 2700      CLR	R16
    0176 C06F      RJMP	0x01E6
(0077)   select_sd;
    0177 98C3      CBI	0x18,3
(0078)   n=0;
    0178 E040      LDI	R20,0
    0179 E050      LDI	R21,0
    017A E060      LDI	R22,0
    017B E070      LDI	R23,0
    017C 01FE      MOVW	R30,R28
    017D 8346      STD	Z+6,R20
    017E 8357      STD	Z+7,R21
    017F 8760      STD	Z+8,R22
    0180 8771      STD	Z+9,R23
(0079)   do
(0080)   { dat=read_single();
    0181 940E02B1  CALL	_read_single
    0183 2EC0      MOV	R12,R16
(0081)     n++;
    0184 E041      LDI	R20,1
    0185 E050      LDI	R21,0
    0186 E060      LDI	R22,0
    0187 E070      LDI	R23,0
    0188 01FE      MOVW	R30,R28
    0189 8026      LDD	R2,Z+6
    018A 8037      LDD	R3,Z+7
    018B 8440      LDD	R4,Z+8
    018C 8451      LDD	R5,Z+9
    018D 0E24      ADD	R2,R20
    018E 1E35      ADC	R3,R21
    018F 1E46      ADC	R4,R22
    0190 1E57      ADC	R5,R23
    0191 01FE      MOVW	R30,R28
    0192 8226      STD	Z+6,R2
    0193 8237      STD	Z+7,R3
    0194 8640      STD	Z+8,R4
    0195 8651      STD	Z+9,R5
(0082)   }
(0083)   while((dat==0xff)&&(n<TIMEOUT_READ));//读出数据的头0xfe	
    0196 2D8C      MOV	R24,R12
    0197 3F8F      CPI	R24,0xFF
    0198 F471      BNE	0x01A7
    0199 E840      LDI	R20,0x80
    019A E15A      LDI	R21,0x1A
    019B E066      LDI	R22,6
    019C E070      LDI	R23,0
    019D 01FE      MOVW	R30,R28
    019E 8026      LDD	R2,Z+6
    019F 8037      LDD	R3,Z+7
    01A0 8440      LDD	R4,Z+8
    01A1 8451      LDD	R5,Z+9
    01A2 1624      CP	R2,R20
    01A3 0635      CPC	R3,R21
    01A4 0646      CPC	R4,R22
    01A5 0657      CPC	R5,R23
    01A6 F2D0      BCS	0x0181
(0084)   for(n=0;n<length;n++)
    01A7 E040      LDI	R20,0
    01A8 E050      LDI	R21,0
    01A9 E060      LDI	R22,0
    01AA E070      LDI	R23,0
    01AB 01FE      MOVW	R30,R28
    01AC 8346      STD	Z+6,R20
    01AD 8357      STD	Z+7,R21
    01AE 8760      STD	Z+8,R22
    01AF 8771      STD	Z+9,R23
    01B0 C01F      RJMP	0x01D0
(0085)   { mp3_data[n]=read_single();}
    01B1 940E02B1  CALL	_read_single
    01B3 01FE      MOVW	R30,R28
    01B4 93AF      PUSH	R26
    01B5 93BF      PUSH	R27
    01B6 81A6      LDD	R26,Z+6
    01B7 81B7      LDD	R27,Z+7
    01B8 01FD      MOVW	R30,R26
    01B9 91BF      POP	R27
    01BA 91AF      POP	R26
    01BB 0DEA      ADD	R30,R10
    01BC 1DFB      ADC	R31,R11
    01BD 8300      STD	Z+0,R16
    01BE E041      LDI	R20,1
    01BF E050      LDI	R21,0
    01C0 E060      LDI	R22,0
    01C1 E070      LDI	R23,0
    01C2 01FE      MOVW	R30,R28
    01C3 8026      LDD	R2,Z+6
    01C4 8037      LDD	R3,Z+7
    01C5 8440      LDD	R4,Z+8
    01C6 8451      LDD	R5,Z+9
    01C7 0E24      ADD	R2,R20
    01C8 1E35      ADC	R3,R21
    01C9 1E46      ADC	R4,R22
    01CA 1E57      ADC	R5,R23
    01CB 01FE      MOVW	R30,R28
    01CC 8226      STD	Z+6,R2
    01CD 8237      STD	Z+7,R3
    01CE 8640      STD	Z+8,R4
    01CF 8651      STD	Z+9,R5
    01D0 01FE      MOVW	R30,R28
    01D1 8826      LDD	R2,Z+22
    01D2 8837      LDD	R3,Z+23
    01D3 8C40      LDD	R4,Z+24
    01D4 8C51      LDD	R5,Z+25
    01D5 01FE      MOVW	R30,R28
    01D6 8066      LDD	R6,Z+6
    01D7 8077      LDD	R7,Z+7
    01D8 8480      LDD	R8,Z+8
    01D9 8491      LDD	R9,Z+9
    01DA 1462      CP	R6,R2
    01DB 0473      CPC	R7,R3
    01DC 0484      CPC	R8,R4
    01DD 0495      CPC	R9,R5
    01DE F408      BCC	0x01E0
    01DF CFD1      RJMP	0x01B1
(0086)   read_single();//CRC 16bit
    01E0 940E02B1  CALL	_read_single
(0087)   read_single();
    01E2 940E02B1  CALL	_read_single
(0088)   select_vs;
    01E4 9AC3      SBI	0x18,3
(0089)   return 1;
    01E5 E001      LDI	R16,1
    01E6 962A      ADIW	R28,0xA
    01E7 940E0A74  CALL	pop_gset4
    01E9 9624      ADIW	R28,4
    01EA 9508      RET
_sd_read_block:
  mp3_data             --> R20
  length               --> Y+12
  blockadd             --> Y+8
    01EB 940E0A0D  CALL	push_arg4
    01ED 940E0A7A  CALL	push_gset1
    01EF 9726      SBIW	R28,6
    01F0 8948      LDD	R20,Y+16
    01F1 8959      LDD	R21,Y+17
(0090) }
(0091) 
(0092) void sd_read_block(ulong blockadd,ulong length,uchar *mp3_data)//读SD数据
(0093) { while(read_block(blockadd,length,mp3_data)==0);}
    01F2 835D      STD	Y+5,R21
    01F3 834C      STD	Y+4,R20
    01F4 01FE      MOVW	R30,R28
    01F5 8424      LDD	R2,Z+12
    01F6 8435      LDD	R3,Z+13
    01F7 8446      LDD	R4,Z+14
    01F8 8457      LDD	R5,Z+15
    01F9 8228      STD	Y+0,R2
    01FA 8239      STD	Y+1,R3
    01FB 824A      STD	Y+2,R4
    01FC 825B      STD	Y+3,R5
    01FD 01FE      MOVW	R30,R28
    01FE 8500      LDD	R16,Z+8
    01FF 8511      LDD	R17,Z+9
    0200 8522      LDD	R18,Z+10
    0201 8533      LDD	R19,Z+11
    0202 DF3E      RCALL	_read_block
    0203 2300      TST	R16
    0204 F369      BEQ	0x01F2
    0205 9626      ADIW	R28,6
    0206 940E0A7D  CALL	pop_gset1
    0208 9624      ADIW	R28,4
    0209 9508      RET
_do_sd_init:
  n                    --> R10
    020A 940E0A95  CALL	push_gset3
    020C 9726      SBIW	R28,6
(0094) 
(0095) uchar do_sd_init(void)//sd初始化
(0096) { uchar n;
(0097)   delay(200);
    020D EC08      LDI	R16,0xC8
    020E E010      LDI	R17,0
    020F 940E0293  CALL	_delay
(0098)   select_sd;
    0211 98C3      CBI	0x18,3
(0099)   sd_delay(100);
    0212 E604      LDI	R16,0x64
    0213 DE8F      RCALL	_sd_delay
(0100)   select_vs;
    0214 9AC3      SBI	0x18,3
(0101)   sd_delay(2);
    0215 E002      LDI	R16,2
    0216 DE8C      RCALL	_sd_delay
(0102)   if(sd_write_command(CMD0,CMD0_R,0,response)==0)
    0217 E685      LDI	R24,0x65
    0218 E090      LDI	R25,0
    0219 839D      STD	Y+5,R25
    021A 838C      STD	Y+4,R24
    021B E040      LDI	R20,0
    021C E050      LDI	R21,0
    021D E060      LDI	R22,0
    021E E070      LDI	R23,0
    021F 8348      STD	Y+0,R20
    0220 8359      STD	Y+1,R21
    0221 836A      STD	Y+2,R22
    0222 837B      STD	Y+3,R23
    0223 E021      LDI	R18,1
    0224 2700      CLR	R16
    0225 DE90      RCALL	_sd_write_command
    0226 2300      TST	R16
    0227 F411      BNE	0x022A
(0103)     return 0;
    0228 2700      CLR	R16
    0229 C051      RJMP	0x027B
(0104)   n=0;
    022A 24AA      CLR	R10
(0105)   do
(0106)   { n++;
    022B 94A3      INC	R10
(0107)     if(sd_write_command(CMD55,CMD55_R,0,response)==1)//进入special command
    022C E685      LDI	R24,0x65
    022D E090      LDI	R25,0
    022E 839D      STD	Y+5,R25
    022F 838C      STD	Y+4,R24
    0230 E040      LDI	R20,0
    0231 E050      LDI	R21,0
    0232 E060      LDI	R22,0
    0233 E070      LDI	R23,0
    0234 8348      STD	Y+0,R20
    0235 8359      STD	Y+1,R21
    0236 836A      STD	Y+2,R22
    0237 837B      STD	Y+3,R23
    0238 E021      LDI	R18,1
    0239 E307      LDI	R16,0x37
    023A DE7B      RCALL	_sd_write_command
    023B 3001      CPI	R16,1
    023C F481      BNE	0x024D
(0108) 	 { /*getin OCR*/
(0109) 	  sd_write_command(ACMD41,ACMD41_R,0,response);
    023D E685      LDI	R24,0x65
    023E E090      LDI	R25,0
    023F 839D      STD	Y+5,R25
    0240 838C      STD	Y+4,R24
    0241 E040      LDI	R20,0
    0242 E050      LDI	R21,0
    0243 E060      LDI	R22,0
    0244 E070      LDI	R23,0
    0245 8348      STD	Y+0,R20
    0246 8359      STD	Y+1,R21
    0247 836A      STD	Y+2,R22

⌨️ 快捷键说明

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