自己做的MP3播放歌曲了!!!音质还不错!!!

MP3方案为: Atmega16l+Sta013+Ch375A+Cs4334 终于可以播放歌曲了!!!体会到Mcu处理速度的重要了!!!!

恭喜! 可以公布出来,让大家学习吗?


谈谈我做MP3的一些经验吧。 1.首先把Fat16/Fat32文件系统弄清楚(网上这方面资料很多),知道文件是怎样存储,这样才能在U盘找到MP3歌曲。 2.Sta013看其Datasheet很难使其正常工作,主要是要把起官方的配置文件加载进去,后面的就很好控制了。 3.读U盘数据和发数据给Sta013要求速度很快,否则你听到的就是噪音了!


羡慕啊, 详细的给大家介绍一下好么


开讲座,不错!! 赞!!!


本来要说,在xQueryInterrupt子程序也要送MP3数据提高速度的,看你已经解决了,就不多说了


引用回复:MP3方案为: Atmega16l+Sta013+Ch375A+Cs4334 终于可以播放歌曲了!!!体会到Mcu处理速度的重要了!!!!

哦,可以介绍一下你用的MCU吗?


用的MCU是Atmel公司的AVR单片机,Atmegal16l Fos:8M 处理速度可达8MIPS.


本人也有用单片机在做一个MP3的方案,(STA013)我用的是8051,现在声音是出的来了,就是断断断续续,头大啊,读取文件数据的速度不够快,兄台可否分享一下你的经验呀,CH375读出一个扇区大致要多少时间呀(12MHZ)


12M的速度太慢了,缓冲区开两个,,你得开大一点了,


双缓冲.一进一出.要保证STA013要数据就给它.


to CAESATZAR { M } 这样解决: 1.你改用24M晶体试试。 2.在程序中精简指令,提高速度. 3.我用AVR单片机只开了一个512字节缓存,AVR速度够快,你也可以考虑。


24M 51,最少你也得要两个1.5KRAM,AVR的确实快.


a


goodys,店小二兄,我用的晶振是24M的,雙緩沖區。問題應該出在像STA013下載數據,請店小二講解一下xQueryInterrupt子程序送数据,可以麼。


void xQueryInterrupt( void ) /* 查询CH375中断并更新中断状态 */ { unsigned char i; do{ /*这里首先响应013的数据请求*/ if(F_DEC){ //如果有数据则下传 do{ if(!DataStrBit())goto XCC; /*启动下传数据*/ /*返回为0,STA013缓冲区满则跳出*/ }while(--DATACOUNT.mDataCount8[0]); /*外循环*/ F_DEC=0; /*数据发送完毕设置标志*/ } XCC: i=0; /*无意义*/ }while(CH375_INT_WIRE); /*如果CH375的中断没到来则继续*/

/*以下为操作CH375*/ CH375_CMD_PORT = CMD_GET_STATUS; /* 获取当前中断状态 */ CH375IntStatus &= 0x80; if ( CH375IntStatus ) CH375IntStatus = 0; /* 操作无意义,用于至少延时2uS */ CH375IntStatus = CH375_DAT_PORT; /* 获取中断状态 */ if ( CH375IntStatus == USB_INT_DISCONNECT ) CH375DiskStatus = DISK_DISCONNECT; /* 检测到USB设备断开事件 */ else if ( CH375IntStatus == USB_INT_CONNECT ) CH375DiskStatus = DISK_CONNECT; /* 检测到USB设备连接事件 */

}

这里要求当013有数据请求时首先响应013而不去关心375的中断请求,当响应375的请求时不要关心013的数据请求.做到分而致之.


只有登录才能回复,可以选择微信账号登录