当前位置: 首页 > 文档资料 > YoC 编程基础 >

DMA

优质
小牛编辑
121浏览
2023-12-01

简要说明

  • DMA(Direct Memory Access,直接内存存取)它允许不同速度的硬件装置之间沟通,而不需要依赖于CPU的大量中断负载。

函数列表

DMA的CSI接口在用户对接时是否必须适配的说明如下所示:

函数是否必须适配
csi_dma_init必须
csi_dma_uninit非必须
csi_dma_ch_alloc必须
csi_dma_ch_free必须
csi_dma_ch_config必须
csi_dma_ch_attach_callback必须
csi_dma_ch_detach_callback必须
csi_dma_ch_start必须
csi_dma_ch_stop必须

接口描述

csi_dma_ch_t

成员类型说明
parentvoid *存放使用DMA的外设句柄,如uart,iic等
ctrl_idint8_tDMA控制器id
ch_idint8_t通道句柄
etb_ch_idint16_tETB通道id
cbvoid *通道回调函数
argvoid *回调函数的参数指针
nextstruct csi_dma_ch *链表的下一个节点

csi_dma_ctrl_t

成员类型说明
devcsi_dev_tcsi设备统一句柄
ch_listcsi_dma_ch_t *通道链表首地址
alloc_statusuint32_t通道占用状态
ch_numuint32_t控制器拥有的通道数量
privvoid对接接口句柄地址

csi_dma_cb_t

typedef void (*csi_dma_cb_t)(csi_dma_ch_t *dma, csi_dma_event_t event, void *arg);

其中dma为通道句柄,event 为传给回调函数的事件类型,arg为用户自定义的回调函数对应的参数。 dma 回调事件枚举类型csi_dma_event_t定义如下:

事件类型事件说明
DMA_EVENT_TRANSFER_DONE数据传输完成事件
DMA_EVENT_TRANSFER_HALF_DONE数据传输完成一半事件
DMA_EVENT_TRANSFER_ERROR传输异常事件

csi_dma_ctrl_init

csi_error_t csi_dma_ctrl_init(csi_dma_ctrl_t *dma, int8_t ctrl_id)
  • 功能描述:

    • 初始化DMA控制器
  • 参数:

    • dma: DMA控制器句柄
    • ctrl_id: 控制器id
  • 返回值:

    • 错误码。

csi_dma_ctrl_uninit

void csi_dma_ctrl_uninit(csi_dma_ctrl_t *dma)
  • 功能描述:

    • DMA控制器反初始化
  • 参数:

    • dma: DMA控制器句柄
  • 返回值:

    • 无。

csi_dma_ch_alloc

csi_error_t csi_dma_ch_alloc(csi_dma_ch_t *dma, int8_t ch_id, int8_t ctrl_id)
  • 功能描述:

    • 申请dma通道号。
  • 参数:

    • dma: DMA通道句柄
    • ch_id: DMA通道ID,当传入-1时,将由驱动自行选择
    • ctrl_id: DMA控制器ID,当传入-1时,将由驱动自行选择
  • 返回值:

    • 错误码。

csi_dma_ch_free

void csi_dma_ch_free(csi_dma_ch_t *dma)
  • 功能描述:

    • 释放DMA特定通道占用。
  • 参数:

    • dma: DMA通道句柄。

csi_dma_addr_inc_t

类型说明
DMA_ADDR_INC地址递增
DMA_ADDR_DEC地址递减
DMA_ADDR_CONSTANT地址固定

csi_dma_data_width_t

类型说明
DMA_DATA_WIDTH_8_BITS8位数据宽度
DMA_DATA_WIDTH_16_BITS16位数据宽度
DMA_DATA_WIDTH_32_BITS32位数据宽度

csi_dma_endian_t(仅WJ使用)

类型说明
DMA_ENDIAN_LITTLE小端数据传输
DMA_ENDIAN_BIG大端数据传输

csi_dma_trig_t(仅WJ使用)

类型说明
DMA_SINGLE_TRIGGER单次触发
DMA_GROUP_TRIGGER组触发
DMA_BLOCK_TRIGGER块触发

csi_dma_req_mode_t(仅WJ使用)

类型说明
DMA_MODE_HARDWARE硬件模式
DMA_MODE_SOFTWARE软件模式

csi_dma_single_dir_t(仅WJ使用)

类型说明
DMA_SINGLE_DIR_DST单次模式中方向为目的
DMA_SINGLE_DIR_SRC软件模式中方向为源

wj_dma_ch_config(仅WJ使用)

成员类型说明
group_lenuint8_t传输组长度
half_int_enuint8_t半完成中断使能
secure_enuint8_t安全模式使能
src_endiancsi_dma_endian_t源大小端配置
dst_endiancsi_dma_endian_t目的大小端配置
trig_modecsi_dma_trig_t触发模式配置
req_modecsi_dma_req_mode_t请求模式配置
single_dircsi_dma_single_dir_t单次方向配置
etbcsi_etb_config_tETB配置(定义请参阅ETB接口文档)

csi_dma_trans_dir_t(仅DW使用)

类型说明
DMA_MEM2MEM内存到内存
DMA_MEM2PERH内存到外设
DMA_PERH2MEM外设到内存
DMA_PERH2PERH外设到外设

dw_dma_ch_config(仅DW使用)

成员类型说明
hs_ifuint8_t硬件握手号
src_reload_enuint8_t源地址自动加载使能
dest_reload_enuint8_t目的地址自动加载使能
trans_dircsi_dma_trans_dir_t传输数据方向配置

csi_dma_ch_config_t

成员类型说明
src_inccsi_dma_addr_inc_tDMA源地址增长方式
dst_inccsi_dma_addr_inc_tDMA目的地址增长方式
src_twcsi_dma_data_width_tDMA源数据宽度
dst_twcsi_dma_data_width_tDMA目的数据宽度
wjwj_dma_ch_configwj DMA配置结构体
dwdw_dma_ch_configdw DMA配置结构体

csi_dma_ch_config

csi_error_t csi_dma_ch_config(csi_dma_ch_t *dma, csi_dma_ch_config_t *config, csi_dma_cb_t cb, void *arg);
  • 功能描述:

    • 配置DMA通道工作方式,并配置回调函数。
  • 参数:

    • dma: DMA通道句柄。
    • config: DMA通道配置结构体
    • cb: DMA用户回调函数
    • arg: DMA回调函数参数指针
  • 返回值:

    • 错误码。

csi_dma_ch_start

void csi_dma_ch_start(csi_dma_ch_t *dma, void *srcaddr, void *dstaddr, uint32_t length)
  • 功能描述:

    • 使能DMA通道,开始工作。
  • 参数:

    • dma: DMA通道句柄。
    • srcaddr: 传输的源地址
    • dstaddr: 传输的目的地址
    • length: 数据的长度(字节为单位)
  • 返回值:

    • 无。

csi_dma_ch_stop

void csi_dma_ch_stop(csi_dma_ch_t *dma)
  • 功能描述:

    • 关闭DMA通道,结束工作。
  • 参数:

    • dma: DMA通道句柄