开发板:K210 AIRV R3版 widora
开发环境:kendryte IDE 官方的
必须的参考文档:Standalone SDK编程指南v0.5.0,以及widora的原理图
(一) 新建文件夹10my_code_tfcard_music
礼物 + 地球
实例 搜索music 选择开发版本(develop) 然后下载到刚才新建的文件夹中
安装依赖
清理 + 构建
我这边报错了
显示 未定义 ,应该是我上一节SD/TF卡章节的锅吗
用到SPI0(上一节SD卡用的就是SPI0) 于是 我们自己补充一下宏定义就行
重新安装一次依赖(我习惯这样) , 然后 清理 + 构建
这样就废了, 看了一下, 原来是安装依赖的锅, 不要重新安装依赖,直接清理+构建就行
环境搭建完毕 下面开始改代码
(二) 修改代码
TF卡的引脚 先给绑定上
保存以下 SD卡搞定引脚
紫色区域先不管, 就里面dmac_init等下要看的, 现在先看SD卡要不要改
去看看点击sdcard_test() 然后按F12跳转
里面就sdinit有用 点金去看看
这些都没用到的 可以删了, 并且我给SPI设置频率为30M,我这边测试可以跑的起, 之前跑10M的(如果不行自己降低速率)
先一条龙看看有没有读取SD卡成功
报错了
把3个函数删掉就行, 双击进去, 删除就行
再一条龙走起
SD卡读不了 莫非速度太快了, 改回20M试试
确实是SPI太块了, 改20M我这边OK了 (因为之前CPU跑800M/2=400M的, 这次跑了320M/2 = 160M)
在main.c 里面的sysctl_pll_set_freq(SYSCTL_PLL0, 320000000UL); 这个函数 说明跑的160M还是320M?
SD卡 + fat文件系统移植没问题, 下面看看I2S音频了
(三)下面直接看I2S(音频协议)
线看原理图
I2S_WS -> IO33
I2S_DO -> IO34
I2S_BCK-> IO35
去config ->device那边绑定一下引脚即可,记得保存
下面看看代码 I2S在第17章
看看dmac 没什么好看的 就是DMA, 在14章
直接用就行 里面干了啥不用管,它给我们写好了
main.c这个刚才测试过了 没用了 把他注释掉
直接看wav_test
看看这个初始化,看了下 应该是初始化播放器的 不用管
这边用到了一个DMA中断, 等下要看看里面中断执行了什么
i2s_init() 才是用到的I2S
i2s_init(I2S_DEVICE_0, I2S_TRANSMITTER, 0x03);
对应 IIS0, 发送模式,通道掩码是3(什么作用的 说明书没有)
继续
i2s_tx_channel_config(
I2S_DEVICE_0, I2S_CHANNEL_0, RESOLUTION_16_BIT, SCLK_CYCLES_32,
/*TRIGGER_LEVEL_1*/ TRIGGER_LEVEL_4, RIGHT_JUSTIFYING_MODE);
对应 I2S0,通道0,发送位数16位,时钟选择32位的(I2S配置的那个时钟),DMA深度4,右对齐
初始 wav音频解码器 不用管
开始放歌
i2s_play(I2S_DEVICE_0, DMAC_CHANNEL3, (void *)wav_file.buff_current,
wav_file.buff_current_len, wav_file.buff_current_len, 16, 2);
对应 I2S0,解码器用的通道3(有个DMA中断的等下要看),存放的歌缓存,
缓存的长度,单次发送帧数(应该是256*1024),单次采样位宽16,2声道
开始解码,完之后就跳出死循环
看看DMA中断
很明显,是通过DMA来判断是不是播放完还是继续播放这些的 用的状态机形式
我的SD卡只有2首歌, 试试beyong的歌, 不知道mp3能不能用wav播放
一条龙试试
播放是沙沙声,应该是播不了,我去搜搜wav格式的歌
printf("result:%d\n", status);
if(BG_READ_WORD(index) != RIFF_ID)
return UNVALID_RIFF_ID;
返回了结果3,为无效ID,应该就是mp3不行了
我在U盘搞了个qiao.wav 试试
再一条龙试试
成功了 接上喇叭也能听到声音了 我这边用的8欧 2W的喇叭 非常小声
widola的喇叭接在这里
功放用的NS4168
建议你们用4欧2W及其以下的
代码太大 还是贴链接,里面有首测试的qiao.wav 所以文件有点大
链接:https://pan.baidu.com/s/1bP-I8wC5QoDdkfzM6XL1pA
提取码:5qn9
复制这段内容后打开百度网盘手机App,操作更方便哦