工具/软件:Linux
您好!
我无法获得 DMA 传输、而是被 GPIO 引脚或 XDMA 引脚触发。 我们使用 TI SDK 中的内核4.4.41。 我们有外部器件、应触发 DMA 传输。 如果我们在 Linux 中为 GPIO 注册中断处理程序、并且在中断处理程序中、DMA 传输是软件触发的、作为内存到内存的传输。 但中断处理需要花费太多、抖动是不可接受的、因此我们希望直接触发 DMA。 e2e 上有一些相关的线程:
https://e2e.ti.com/support/arm/sitara_arm/f/791/p/593810/2203586
ABCD{
兼容="abcd";
状态="正常";
DMA =<0x34 20 0 29>;
dma-names ="dma_test";
};
0x34是对交叉开关的引用(在此配置中、我们希望使用 XDMA_EVENT_INTR1引脚触发 DMA)
我们还尝试了
DMA =<0x2D 22 0>;
其中0x2D 是对 EDMA 的引用(在此配置中、我们希望使用 GPIO0_7引脚触发 DMA)
我们获得了通道、我们为其提供了 device_prep_slave_sg 接口(不引用 mem2mem 复制接口、如上面提到的线程所示)。 因此、我们使用 PRE_SLAVE_SG 为 DMA 配置事务、然后提交事务、但从未执行。 我们希望使用外部引脚触发它、但似乎缺少了一些东西。
针对 XDMA 和 GPIO、引脚被配置为优先模式、但是事件似乎从未被记录。 当我转储 EDMA3CC 的 ER 寄存器时、我看不到事件对应位的任何变化。 TRM 表示即使未启用事件也会进行记录-是否应该在 ER 寄存器中看到 GPIO 发生变化时的状态变化? 。 是否缺少一些配置来从外部器件触发 DMA?
此致。