2403713_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2403713_zh-CN

2403713_zh-CN

i.MX8M Plus HiFi4 DSP(Zephyr):SDMA 循环发送回调触发一次后停止

在运行 Zephyr 的 i.MX8MP HiFi4 DSP 上,我正在使用 Zephyr nxp,dai-sai (SAI3) 和 nxp,sdma (SDMA3) 驱动程序以循环模式启动硬件端点播放路径。开始播放时,SDMA 通道完成回调恰好触发一次,然后不会再发生 SDMA 中断。我想请教一下,为什么循环 SDMA 传输不会持续产生周期性中断?


硬件/启动
- 板:i.MX8MP EVK,DTS:imx8mp-evk-dsp.dts
- DSP核心:HiFi4(Cadence Xtensa),目标板为imx8mp_evk/mimx8ml8/adsp
- 编解码器:WM8960
- 外设:SAI3、SDMA3

建筑和版本细节
- 架构概述: https://audioreach.github.io/platform/nxp.html#architecture-overview
- 版本详情:
- Yocto: https://audioreach.github.io/platform/nxp.html#step-1-create-a-yocto-image
- Linux(控制/主机):Yocto(scarthgap)、linux-imx。
- 仓库清单:imx-6.6.52-2.2.0.xml
- Zephyr DSP 镜像: https://audioreach.github.io/platform/nxp.html#step-2-create-a-zephyr-image

- Zephyr (v4.2.0), AudioReach Engine信号处理框架,运行于 HiFi4 上。

我正在建造的东西
DSP 映像中的一个自定义硬件端点(接收器)模块,其功能如下:

1.通过 Zephyr DAI API 配置 SAI3。
2.建立从 动态随机存取存储器 (DRAM) 环到 SAI TX FIFO 的循环 SDMA 传输(2 个缓冲区描述符,MEMORY_TO_PERIPHERAL)。
3.使用 SDMA 完成回调来通知信号处理框架重新填充环。

音频格式
- 48 kHz,16 位,单声道音频流;SAI 线 = 16 位 × 2 个插槽(WM8960 的立体声 I2S 帧),BCLK = 1.536兆赫兹。
- DMA 周期 = 192 字节(48 帧 × 2 字节 × 2 个时隙),2 个描述符,384 字节环

已启用相关 Kconfig(DSP 映像)。

CONFIG_DAI=y
CONFIG_DMA=y
CONFIG_DAI_NXP_SAI=y
CONFIG_DMA_NXP_SDMA=y
CONFIG_SAI_HAS_MCLK_CONFIG_OPTION=y
CONFIG_CLOCK_CONTROL_FIXED_RATE_CLOCK=y

设备树叠加(DSP 应用):
链接: app/boards/imx8mp_evk_mimx8ml8_adsp.overlay

mclk1:mclk {
状态 = "正常";
};

&sdma3 {
状态 = "正常";
};

&sai3 {
rx-fifo-watermark = <65>;
tx-fifo-watermark = <65>;
先进先出深度 = <128>;
rx-sync-mode = <1>;
状态 = "正常";
};

&micfil {
状态 = "正常";
};

使用的DAI/DMA配置(DSP)

- dai_config: type=DAI_IMX_SAI, dai_index=3, format= DAI_PROTO_I2S (SAI 从设备), rate=48000, channels=2, word_size=16.
- SAI 定制:mclk_rate=12288000,fsync_rate=48000,bclk_rate=1536000,tdm_slots=2,tx_slots=rx_slots=0x3,tdm_slot_width=16。
- DMA(struct dma_config):channel_direction=MEMORY_TO_PERIPHERAL,source_data_size=4,dest_data_size=4,source_burst_length=4,cyclic=1,block_count=2,dma_slot 来自 SAI 握手,dma_callback 设置。两个 dma_block_config BD 指向 dma_src_addr[0/192]

源代码参考: endpoint/capi/src/capi_nxp_device_utils.c

应用程序处理器
- DTS:imx8mp-evk-dsp.dts https://github.com/nxp-imx/linux-imx/blob/lf-6.6.y/arch/arm64/boot/dts/freescale/imx8mp-evk-dsp.dts
- 使用虚拟 DAI 和虚拟平台枚举带有 wm8960 编解码器的 PCM 设备。

附件
- DSP 日志(sdma,sai)
- 修改了 imx8mp-evk-dsp.dts

我很乐意提供其他任何细节。

i.MX 8M | i.MX 8M Mini | i.MX 8M Nano多媒体
Tags (1)
No ratings
Version history
Last update:
a month ago
Updated by: