本帖最后由 西窗雪 于 2017-12-29 09:28 编辑
大概在一个月(或者更久)前左右,我死皮赖脸的从善良的管理那里骗来了一块LPC54110板子。我到现在都忘不了管理用他那真诚的语气说的“期待你的大作啊”(嗯,应该就是这么个语气)。 板子到手后,各种忙,就放着了。然后到了现在,想着今年都快过完了,年底改欠着东西总不好,于是拿出来玩玩了。好吧,我玩的还是很低端的功能,双核没用上,外设也没有用太多。 板子上有一个音频芯片,我平时比较喜欢听歌来着,就想着做一个音乐播放器。由于能力有限,我的工程是在板子自带的演示程序的工程上修改的。MP3文件是压缩后的文件,在播放前还要进行解码,LPC54110和板上的音频芯片WM8904好像都没有硬件解码的功能,那就来软解呗,软解的话我知道的有两个库可以用---libmad和helix。Helix软解播放mp3在野火开发板上有一个例程(在这里感谢火哥),嘿嘿,那就用这个了。
大概的软件流程如下: 1、 硬件初始化 2、 扫描SD卡中的音频文件(MP3和wav),并将文件路径写到txt中保存 3、 从txt中取出一个文件路径,通过这个路径来读取音频文件。 4、 音频解码 5、 通过IIS的DMA功能传输解码后是数据到WM8904 6、 在等待DMA传输完成期间可以读取音频文件和解码,DMA传输完成后传输新解码的数据(这样可以在一定程度上避免SPI驱动SD卡导致读取慢)。
好吧最开始我是这么想的,然后,然后。。。。各种错,各种warning 各种error。比如上面说的“写到txt中保存”,然后我发现写入不了,我也没找原因。就是用了一个数组存放文件的路径,再从数组中读出来。 刚开始时的音质简直是不能忍受,然后我注意到演示程序里传数据到WM8904时是传的重复的数据,并且传来两遍。虽然不知道为什么,我还是试了试,然后还真行(果然是神奇的代码)。 我左耳听LPC54110播放的歌,右耳听电脑放的,然后发现LPC54110放的稍微慢些,我本以为是LPC54110读sd卡加上软件解码耗费的时间太长,所以慢,然后找了下系统时钟配置的地方,还真找着一个配置MCU时钟为96MHz的函数,果断试了试,然而并没有太大的提升。感觉应该是IIS速度或者WM8904速度没配置好,WM8904配置的是44.1KHz,但IIS我就没找着配置速度的。 不管了,就这样吧,听听响也还凑合着。 功能如下:1、自动查找sd卡中的mp3、wav文件并保存路径 2、播放找到的第一首歌 附加功能(自带bug属性) 1、 绝对不会自动播放下一首(较易改进) 2、 放歌的时间长一点的话会莫名其妙的卡死 3、自带轻微慢放功能 播放时串口数据如下
工程打包如下 |