本 demo 演示 I2S 播放flash内置的音频数据, 使用的音频芯片 ES8388 解码, 另外需要使用 I2C 对 ES8388 配置。 若使用其他音频解码芯片,请自行配置,本文档仅重点讲述 I2S 的使用,对音频芯片不做过多介绍。
硬件连接
本 demo 基于 BL706_AVB 开发板,需要用到 ES8388 音频子板,连接方式如下:
如果使用的是BL706_AVB板,请确保FUN1 FUN2两个跳帽处于短接的状态,如下图所示
本 demo 用到的内部外设资源如下:
软件实现
软件代码见 examples/i2s/i2s_play_form_flash
本文档不再详细介绍 I2C 与 DMA,仅介绍 I2S 相关配置,其他外设可以查看对应的文档。
配置 I2S, I2C, CLK_OUT(MCLK) 相关复用引脚,见 bsp/board/bl706_iot/pinmux_config.h 中的宏定义选项:
配置 ES8388 的参数,初始化 ES8388 ,其中会用到 I2C 外设,具体过程可见 bsp/bsp_common/es8388/es8388.c
I2S 的配置与使能:
使能 BSP_USING_I2S0 并配置 I2S 设备配置,见 bsp/board/bl706_iot/peripheral_config.h 中:
先调用 i2s_register 函数注册 I2S 设备
然后通过 find 函数找到设备对应的句柄,保存于 i2s 中
最后填写配置参数后,使用 device_open 来打开 I2S 设备
如果不填写配置参数,会默认使用 bsp/board/bl706_iot/peripheral_config.h 中预设的参数
DMA 的配置与使能 - 为了 I2S 更高效,减少对 CPU 的占用,需要配置 DMA 来搬运数据,具体配置可见 DMA 文档,代码如下:
最后启动 I2S-DMA ,发送包含在程序里烧录到flash里的音频数据:
编译和烧录
CDK 编译
打开项目中提供的工程文件:i2s_play_form_flash.cdkproj
参照 Windows 下使用 CDK (类 MDK Keil)开发指南 的步骤编译下载即可
命令行编译
实验现象
会播放一段约为 20 秒的歌曲。
原作者:BL_MCU_SDK 开发指南
|