22.6.3. I2S Interrupt
22.6.3.1. 概述
该示例工程展示了I2S使用中断方式将音频数据传输给板载音频解码芯片并播放的功能。
22.6.3.2. 工作流程
根据音频采样率,配置系统音频时钟MCLK
配置I2S外设: - 使能MCLK输出给Codec - 设置音频数据格式(位宽、通道数) - 配置TX FIFO中断阈值 - 使能发送FIFO中断
配置Codec: - 设置音频数据格式和采样率 - 配置Codec的工作模式为播放模式 - 配置音频输出路径(如耳机输出)
启动I2S外设,开始音频数据传输
I2S产生TX FIFO中断,在中断处理函数中: - 读取音频数据 - 根据音频位深进行数据对齐 - 将数据填入I2S的TX FIFO中
播放完毕关闭I2S中断和I2S外设
22.6.3.3. 工程配置
音频编解码器配置 - 在文件 CMakeLists.txt 中,根据开发板原理图,设置匹配的audio codec类型 - 例如:”set(CONFIG_CODEC “sgtl5000”)”
22.6.3.4. 硬件设置
连接3.5mm耳机到音频编解码芯片的 耳机 接口
22.6.3.5. 已知问题
在部分开发板上使用codec的耳机接口播放音频时可能出现串扰, 比如通过耳机的左声道播发单声道音频时, 在右声道耳机上能听到微弱的声音。
22.6.3.6. 注意事项
Audio codec的时钟与配置顺序:
大多数Audio codec需要I2S接口提供MCLK作为主时钟源
MCLK必须首先配置并使能,Codec工作后才能通过I2C接口配置它的工作参数
22.6.3.7. 运行现象
当工程正确运行后,可以观察到以下现象:
串口终端输出信息:
I2S Interrupt example
I2C bus is ready
I2S interrupt play finished
耳机会循环播放示例音频
22.6.3.8. 调试建议
确认音频编解码器型号是否正确配置
检查I2C总线是否正常初始化,对codec的配置是否正确完成
观察中断是否正常触发
使用示波器可以观察I2S信号时序是否正确