此前我有一篇帖子提出将Helix修改成能够运行在任何处理器上的解码算法。并着重以基于RISC-V处理器的国产单片机进行测试。此前测试了中科蓝汛出品的AB32VG1单片机,虽然解码没有出现错误,但是由于AB32VG1的处理器性能不足无法流畅播放,且超频至极限速度230MHZ后仍然无法流畅播放,未果,又踏上了寻找足够性能的国产单片机的道路。之后发现了W801单片机,该单片机额定工作频率就达到了240MHZ,且其处理器还带有一级指令缓存,这样一通硬核加持下来应该性能足够了,实测也是果真如此,热血沸腾,构想终于实现,国产基于RISC-V单片机流畅运行Helix解码库。
上文提到的两篇此前我发的帖子如下:
Helix MP3解码库脱离汇编指令束缚,运行在任何处理器上的解决方案_三月花科技的博客-CSDN博客
AB32VG1超频,编译器优化设置_三月花科技的博客-CSDN博客
修改好的MP3解码程序包下载如下:
CSDN下载:
HelixMP3解码库脱离汇编指令束缚,运行在任何处理器上的解决方案-单片机文档类资源-CSDN下载
百度云下载
链接:https://pan.baidu.com/s/1U4eVkZZ1IZaeGf4zzBerNQ
提取码:SYHT
添加Helix解码库进入工程后,记得先删除asm文件夹,因为这个文件夹里面的两个汇编文件是针对Cortex-M处理器的,RISC-V 处理器无法运行。添加后如下图所示:
现在需要使用C代码实现原汇编函数的功能。修改文件polyphase.c和assembly.h,具体修改的流程请见:
Helix MP3解码库脱离汇编指令束缚,运行在任何处理器上的解决方案_三月花科技的博客-CSDN博客
正常解码,流畅播放。不得不说W801的XT804处理器性能非常优秀,其性能与Cortex-,M4差不多。DAC采用曾乐之邦的PCM5120A,连接W801单片机的I2S外设即可开始听歌。SD卡采用SD卡模块,并将W801的SDIO配置成单线模式。完整如下图所示:
现阶段除了移植了Helix以支持MP3格式音频文件外,还移植了FLAC无损音频格式的解码库,还有测试I2S时使用的WAV音频格式解码库,故当前供支持MP3,FALC,WAV三种格式。APE格式敬请期待。
现阶段是将歌曲名固定在程序中,还未实现自动搜歌的功能。而且,由于CDK使用的是UTF-8格式的文档,在程序中输入中文文件名将会出错。故只能用英文文件名,测试如下图:
测试曲目:咱当兵的人.flac,由于不支持中文文件名,用了首拼
测试曲目:打靶归来.mp3(320kpbs, 16bits),我是一个兵.mp3(128kbps, 16bits)
SD卡部分(单线模式):
CLK -> PA9
CMD -> PA10
D0 -> PA11
I2S部分(不含MCLK模式,因为PCM5120A无需MCLK,若使用其它DAC可以找到MCLK引脚设置处的代码,去掉注释,如下图所示)(该函数在userapp/audioplayerbase/playerbase.c):
BCK 位时钟 -》 PB8
WS字选择(声道切换) -》 PB9
DO数据输出 -》 PB11
DI数据输入 -》 PB10(本例程中未使用,播放器只涉及数据输出)
CSDN下载:
基于W801的音频播放器-单片机文档类资源-CSDN下载
百度云下载:
链接:https://pan.baidu.com/s/1arpoAyh3sZXESIooQq3qiA
提取码:SYHT
现阶段是将歌曲名固定在程序中,还未实现自动搜歌的功能。请确保SD卡中对应目录下有与程序中相对应的文件,或者修改程序为SD中现有文件的文件名。程序修改的地方如下图:
文件位置如左侧所示,右侧调用PlayMusicFname函数时修改第一个参数即可,第一个参数是文件名,后面两个参数是播放时所需的二值信号量,请不要修改。
其次,由于CDK使用的是UTF-8格式的文档,在程序中输入中文文件名将会出错。故只能用英文文件名。