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