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