22.5.2. I2S DMA
22.5.2.1. 概述
该示例工程展示了使用I2S外设配合DMA传输音频数据, 并通过板载的codec进行播放的功能。
22.5.2.2. 工作流程
根据音频采样率,配置系统音频时钟MCLK
配置I2S外设: - 使能MCLK输出给Codec - 设置音频数据格式(位宽、通道数) - 配置DMA传输模式 - 使能DMA请求
配置Codec: - 设置音频数据格式和采样率 - 配置Codec的工作模式为播放模式 - 配置音频输出路径(如耳机输出)
配置DMA: - 设置源地址为音频数据缓冲区 - 设置目标地址为I2S发送FIFO - 配置传输大小和传输宽度
启动I2S外设和DMA传输: - 使能I2S外设 - 启动DMA传输
DMA自动将音频数据传输到I2S的TX FIFO
播放完毕后关闭DMA传输和I2S外设
22.5.2.3. 工程配置
在文件
CMakeLists.txt中,根据开发板原理图,设置匹配的audio codec类型:WM8960:
set(CONFIG_CODEC "wm8960")SGTL5000:
set(CONFIG_CODEC "sgtl5000")
22.5.2.4. 硬件设置
连接3.5mm耳机到音频编解码芯片的 耳机 接口
22.5.2.5. 已知问题
在部分开发板上使用codec的耳机接口播放音频时可能出现串扰,比如通过耳机的左声道播放单声道音频时,在右声道耳机上能听到微弱的声音
22.5.2.6. 注意事项
Audio codec的时钟与配置顺序:
大多数Audio codec需要I2S接口提供MCLK作为主时钟源
MCLK必须首先配置并使能,Codec工作后才能通过I2C接口配置它的工作参数
22.5.2.7. 运行现象
当工程正确运行后,可以观察到以下现象:
串口终端输出信息:
I2S DMA example I2C bus is ready i2s dma play finished
耳机会循环播放示例音频