关键流程设计
DMA 模块包含以下关键流程:
初始化流程
DMA 驱动的初始化接口通过
INIT_BOARD_EXPORT(drv_dma_init)
完成注册,其中主要步骤有:-
初始化模块的 clk
-
初始化 DMA 通道、任务描述符管理信息
-
注册中断
DMA Client 的调用流程
作为 DMA 用户,调用流程如下:
其中有两个操作的概念需要注意:
-
submit,是指传输请求提交给了 DMA Engine 的缓存中,还没有开始传输数据
-
issue pending,将传输请求加入到 DMA Device 的请求队列中,接下来才会启动数据传输动作
中断处理流程
中断处理流程主要是:
-
逐个 DMA 通道的查看完成状态;
-
如果通道有任务传输完成,就调用相应 client 注册的回调函数。