K230 DMA API参考
1. 概述
1.1 概述
GSDMA:DMA 全称 Direct Memory Access,即直接存储器访问,将数据从一个地址空间复制到另一个地址空间,提供在存储器和存储器之间的高速数据传输。GDMA 全称 Graphic Direct Memory Access,负责将内存中的图像复制到另一块内存中,同时可以完成图像的旋转和镜像等功能。SDMA 全称 System Direct Memory Access,负责将内存中的数据复制到另一块内存中,即传统意义上的 DMA。
软件代码将 GSDMA 硬件的各个功能以 API 的方式提供给使用者使用,帮助用户快速实现图像传输、旋转、镜像、2D 功能及数据传输功能。同时实现了模块状态信息统计等功能。
1.2 功能描述
dma 驱动调用流程如下图所示:

将 dma 硬件抽象为一个设备,八个通道,其中,通道 0~3 是 gdma 通道,通道 4~7 是 sdma 通道。
1.2.1 gdma
用户通过 gdma 来实现图像的旋转镜像工作,主要调用流程如下:
- 进行 dma 设备属性的配置;
- 启动 dma 设备。在调用此函数以后驱动会自动申请 VB 空间作为目的地址的数据缓冲区;
- 进行 gdma 通道属性的配置;
- 启动 gdma 通道;
- 用户在用户态申请 VB 空间作为源数据的数据缓冲区,调用 kd_mpi_dma_send_frame 发送数据的源地址给 gdma;
- 驱动会将源地址中的数据传输到步骤二中申请的目的地址数据缓冲区中;
- 用户调用 kd_mpi_dma_get_frame 获取目的地址中的数据地址。
1.2.2 sdma
用户通过 sdma 来实现数据搬移工作,主要调用流程如下:
- 进行 dma 设备属性的配置;
- 启动 dma 设备。在调用此函数以后驱动 会自动申请 VB 空间作为目的地址的数据缓冲区;
- 进行 sdma 通道属性的配置;
- 启动 sdma 通道;
- 用户在用户态申请 VB 空间作为源数据的数据缓冲区,调用 kd_mpi_dma_send_frame 发送数据的源地址给 sdma;
- 驱动会将源地址中的数据传输到步骤二中申请的目的地址数据缓冲区中;
- 用户调用 kd_mpi_dma_get_frame 获取目的地址中的数据地址。
2. API 参考
2.1 DMA 使用
该功能模块提供以下API:
- kd_mpi_dma_set_dev_attr
- kd_mpi_dma_get_dev_attr
- kd_mpi_dma_start_dev
- kd_mpi_dma_stop_dev
- kd_mpi_dma_set_chn_attr
- kd_mpi_dma_get_chn_attr
- kd_mpi_dma_start_chn
- kd_mpi_dma_stop_chn
- kd_mpi_dma_send_frame
- kd_mpi_dma_get_frame
- kd_mpi_dma_release_frame