dma
DMA (Direct Memory Access) 在无需 CPU 干预的情况下实现外设与内存之间的数据传输,支持内存到内存和外设到内存的单次与链式传输模式。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| uapi_dma_init | 初始化DMA模块 |
| uapi_dma_deinit | 去初始化DMA模块 |
| uapi_dma_open | 开启DMA模块 |
| uapi_dma_close | 关闭DMA模块 |
| uapi_dma_start_transfer | 启动指定通道的DMA传输 |
| uapi_dma_end_transfer | 停止指定通道的DMA传输 |
| uapi_dma_get_block_ts | 获取DMA传输的数据量 |
| uapi_dma_transfer_memory_single | 通过DMA通道传输类型为内存到内存的数据 |
| uapi_dma_configure_peripheral_transfer_single | 通过DMA通道传输类型为内存到外设或外设到内存的数据 |
| uapi_dma_get_lli_channel | 获取DMA链表传输通道 |
| uapi_dma_transfer_memory_lli | 通过DMA通道以链表模式传输类型为内存到内存的数据 |
| uapi_dma_configure_peripheral_transfer_lli | 通过DMA通道以链表模式传输类型为内存到外设或外设到内存的数据 |
| uapi_dma_set_circular_lli_mode | 启用或禁用DMA链表传输的循环模式 |
| uapi_dma_enable_lli | 启用DMA链表传输 |
| uapi_dma_resume | 恢复DMA模块 |
| uapi_dma_suspend | 挂起DMA模块 |
| uapi_dma_channel_is_enable | 获取DMA通道是否已经使能 |
| uapi_dma_reset_channel_interrupt | 重置DMA通道中断 |
Functions
uapi_dma_init
头文件清单
功能说明
- 初始化DMA模块,完成DMA硬件资源申请与寄存器初始配置
- 首次调用执行初始化流程,重复调用直接返回成功
- 初始化成功后方可调用其他DMA接口
前置条件
- 调用时序约束:当前接口为DMA模块首个需调用的接口
- 依赖关系:当前接口依赖底层HAL DMA驱动已就绪
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 初始化成功 |
| Other | 其他错误码,参考errcode_t | 初始化失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_CLOCK | 特性宏 | 支持DMA时钟使能特性 | n |
| CONFIG_DMA_SUPPORT_CLOCK_OPT | 特性宏 | 支持DMA动态时钟开关特性 | n |
uapi_dma_deinit
头文件清单
功能说明
- 去初始化DMA模块,释放硬件资源并关闭DMA
- 未初始化时调用直接返回
- 去初始化后不可再调用其他DMA接口,需重新初始化
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后调用
- 依赖关系:当前接口依赖DMA模块已初始化
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_CLOCK | 特性宏 | 支持DMA时钟关闭特性 | n |
| CONFIG_DMA_SUPPORT_CLOCK_OPT | 特性宏 | 支持DMA动态时钟开关特性 | n |
| CONFIG_DMA_SUPPORT_CIRCULAR_LLI | 特性宏 | 支持DMA循环链表传输特性 | n |
uapi_dma_open
头文件清单
功能说明
- 开启DMA模块,使能DMA硬件并注册中断处理函数
- 开启DMA后可进行通道配置与传输操作
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后调用
- 依赖关系:当前接口依赖DMA模块已初始化
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | DMA模块开启成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_CLOCK_OPT | 特性宏 | 支持DMA动态时钟开关特性 | n |
uapi_dma_close
头文件清单
功能说明
- 关闭DMA模块,关闭DMA硬件并注销中断处理函数
- 未初始化时调用直接返回
- 关闭后不可进行传输操作,需重新调用uapi_dma_open()开启
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后调用
- 依赖关系:当前接口依赖DMA模块已初始化
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_CLOCK_OPT | 特性宏 | 支持DMA动态时钟开关特性 | n |
uapi_dma_start_transfer
头文件清单
功能说明
- 启动指定通道的DMA传输
- 通道使能后DMA开始执行数据传输
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回且uapi_dma_open()成功开启后调用
- 依赖关系:当前接口依赖DMA模块已初始化并已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| channel | uint8_t | DMA通道号 | 0 ~ DMA_CHANNEL_MAX_NUM-1 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 通道使能成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
| ERRCODE_DMA_INVALID_PARAMETER(0x80001102) | 参数无效 | 通道号超出有效范围 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
uapi_dma_end_transfer
头文件清单
功能说明
- 停止指定通道的DMA传输,禁用该通道
- 通道禁用后DMA停止执行该通道的数据传输
- 已停止的通道可重新配置后再次启动
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回且uapi_dma_open()成功开启后调用
- 依赖关系:当前接口依赖DMA模块已初始化并已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| channel | uint8_t | DMA通道号 | 0 ~ DMA_CHANNEL_MAX_NUM-1 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 通道禁用成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
| ERRCODE_DMA_INVALID_PARAMETER(0x80001102) | 参数无效 | 通道号超出有效范围 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
uapi_dma_get_block_ts
头文件清单
功能说明
- 获取DMA指定通道已传输的数据量
- 用于查询传输进度
- 通道号无效时返回0
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后调用
- 依赖关系:当前接口依赖DMA模块已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| channel | uint8_t | DMA通道号 | 0 ~ DMA_CHANNEL_MAX_NUM-1 |
返回值
- 返回类型:uint32_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| uint32_t | 已传输数据量 | DMA通道已传输的数据量 |
| 0 | 无效结果 | DMA未初始化或通道号无效 |
uapi_dma_transfer_memory_single
errcode_t uapi_dma_transfer_memory_single(const dma_ch_user_memory_config_t *user_cfg, dma_transfer_cb_t callback, uintptr_t arg)
头文件清单
功能说明
- 通过DMA通道执行内存到内存的单块数据传输
- 自动获取空闲通道并启动传输
- 传输完成后通过回调函数通知调用方
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回且uapi_dma_open()成功开启后调用
- 依赖关系:当前接口依赖DMA模块已初始化并已开启,user_cfg不为NULL且指向的内存空间已申请成功
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| user_cfg | const dma_ch_user_memory_config_t * | 用户的DMA通道内存传输配置 | 非NULL |
| callback | dma_transfer_cb_t | 通道传输完成/错误回调函数 | - |
| arg | uintptr_t | 传递给回调函数的私有参数指针 | - |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 传输启动成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
| ERRCODE_DMA_INVALID_PARAMETER(0x80001102) | 参数无效 | user_cfg为NULL或参数不合法 |
| ERRCODE_DMA_RET_NO_AVAIL_CH(0x80001103) | 无可用通道 | 无空闲DMA通道 |
| ERRCODE_DMA_RET_ERROR_ADDRESS_ALIGN(0x80001108) | 地址对齐错误 | 传输地址未按数据宽度对齐 |
| ERRCODE_DMA_RET_ERROR_CONFIG(0x80001104) | 配置错误 | DMA通道配置失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_LLI | 特性宏 | 支持DMA链表传输特性 | y |
uapi_dma_configure_peripheral_transfer_single
errcode_t uapi_dma_configure_peripheral_transfer_single(const dma_ch_user_peripheral_config_t *user_cfg, uint8_t *channel, dma_transfer_cb_t callback, uintptr_t arg)
头文件清单
功能说明
- 通过DMA通道配置内存到外设或外设到内存的单块数据传输
- 自动获取空闲通道并通过出参返回所选通道号
- 传输完成后通过回调函数通知调用方
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回且uapi_dma_open()成功开启后调用
- 依赖关系:当前接口依赖DMA模块已初始化并已开启,user_cfg不为NULL,channel不为NULL
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| user_cfg | const dma_ch_user_peripheral_config_t * | 用户的DMA通道外设传输配置 | 非NULL |
| callback | dma_transfer_cb_t | 通道传输完成/错误回调函数 | - |
| arg | uintptr_t | 传递给回调函数的私有参数指针 | - |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| channel | uint8_t | 被选择的DMA通道号,由调用方分配内存、函数填充 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 配置成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
| ERRCODE_DMA_INVALID_PARAMETER(0x80001102) | 参数无效 | user_cfg为NULL或参数不合法 |
| ERRCODE_DMA_RET_NO_AVAIL_CH(0x80001103) | 无可用通道 | 无空闲DMA通道 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_SMDMA | 特性宏 | 支持DMA SMDMA特性 | n |
uapi_dma_get_lli_channel
头文件清单
功能说明
- 获取DMA链表传输所需的空闲通道
- 根据burst传输长度和外设握手号获取匹配的空闲通道
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后调用
- 依赖关系:当前接口依赖CONFIG_DMA_SUPPORT_LLI已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| burst_length | uint8_t | DMA的burst传输长度 | 0 ~ HAL_DMA_BURST_TRANSACTION_LENGTH_256 |
| handshaking | uint8_t | DMA传输外设握手号 | 0 ~ HAL_DMA_HANDSHAKING_MAX_NUM |
返回值
- 返回类型:uint8_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| uint8_t | DMA通道号 | 获取空闲通道成功 |
| DMA_CHANNEL_NONE | 无可用通道 | 无空闲DMA通道或DMA未初始化或参数无效 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_LLI | 功能宏 | 支持DMA链表传输功能 | y |
uapi_dma_transfer_memory_lli
errcode_t uapi_dma_transfer_memory_lli(uint8_t channel, const dma_ch_user_memory_config_t *user_cfg, dma_transfer_cb_t callback)
头文件清单
功能说明
- 通过DMA通道以链表模式配置内存到内存的数据传输
- 配置完成后需调用uapi_dma_enable_lli()启用链表传输
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后且已通过uapi_dma_get_lli_channel()获取有效通道后调用
- 依赖关系:当前接口依赖CONFIG_DMA_SUPPORT_LLI已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| channel | uint8_t | DMA通道号 | 0 ~ DMA_CHANNEL_MAX_NUM-1 |
| user_cfg | const dma_ch_user_memory_config_t * | 用户的DMA通道内存传输配置 | 非NULL |
| callback | dma_transfer_cb_t | 通道传输完成/错误回调函数 | - |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 配置成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
| ERRCODE_DMA_INVALID_PARAMETER(0x80001102) | 参数无效 | 通道号无效或user_cfg为NULL或参数不合法 |
| ERRCODE_DMA_RET_ERROR_ADDRESS_ALIGN(0x80001108) | 地址对齐错误 | 传输地址未按数据宽度对齐 |
| ERRCODE_DMA_RET_ERROR_CONFIG(0x80001104) | 配置错误 | DMA通道配置失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_LLI | 功能宏 | 支持DMA链表传输功能 | y |
uapi_dma_configure_peripheral_transfer_lli
errcode_t uapi_dma_configure_peripheral_transfer_lli(uint8_t channel, const dma_ch_user_peripheral_config_t *user_cfg, dma_transfer_cb_t callback)
头文件清单
功能说明
- 通过DMA通道以链表模式配置内存到外设或外设到内存的数据传输
- 配置完成后需调用uapi_dma_enable_lli()启用链表传输
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后且已通过uapi_dma_get_lli_channel()获取有效通道后调用
- 依赖关系:当前接口依赖CONFIG_DMA_SUPPORT_LLI已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| channel | uint8_t | DMA通道号 | 0 ~ DMA_CHANNEL_MAX_NUM-1 |
| user_cfg | const dma_ch_user_peripheral_config_t * | 用户的DMA通道外设传输配置 | 非NULL |
| callback | dma_transfer_cb_t | 通道传输完成/错误回调函数 | - |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 配置成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
| ERRCODE_DMA_INVALID_PARAMETER(0x80001102) | 参数无效 | 通道号无效或user_cfg为NULL或参数不合法 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_LLI | 功能宏 | 支持DMA链表传输功能 | y |
| CONFIG_DMA_SUPPORT_SMDMA | 特性宏 | 支持DMA SMDMA特性 | n |
uapi_dma_set_circular_lli_mode
头文件清单
功能说明
- 启用或禁用DMA链表传输的循环模式
- 循环模式下链表传输完成后自动重新开始
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后调用
- 依赖关系:当前接口依赖CONFIG_DMA_SUPPORT_LLI和CONFIG_DMA_SUPPORT_CIRCULAR_LLI已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| channel | uint8_t | DMA通道号 | 0 ~ DMA_CHANNEL_MAX_NUM-1 |
| cir_lli_en | bool | 是否启用循环链表模式 | true / false |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 设置成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
| ERRCODE_DMA_INVALID_PARAMETER(0x80001102) | 参数无效 | 通道号超出有效范围 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_LLI | 功能宏 | 支持DMA链表传输功能 | y |
| CONFIG_DMA_SUPPORT_CIRCULAR_LLI | 功能宏 | 支持DMA循环链表传输功能 | n |
uapi_dma_enable_lli
头文件清单
功能说明
- 启用DMA链表传输,启动指定通道的链表模式数据传输
- 通道已使能时返回通道忙错误
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后且已通过链表配置接口完成通道配置后调用
- 依赖关系:当前接口依赖CONFIG_DMA_SUPPORT_LLI已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| channel | uint8_t | DMA通道号 | 0 ~ DMA_CHANNEL_MAX_NUM-1 |
| callback | dma_transfer_cb_t | 通道传输完成/错误回调函数 | - |
| arg | uintptr_t | 传递给回调函数的私有参数指针 | - |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 链表传输启动成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
| ERRCODE_DMA_INVALID_PARAMETER(0x80001102) | 参数无效 | 通道号超出有效范围 |
| ERRCODE_DMA_CH_BUSY(0x80001107) | 通道忙 | 通道已使能,正在传输中 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_LLI | 功能宏 | 支持DMA链表传输功能 | y |
| CONFIG_DMA_SUPPORT_CLOCK_OPT | 特性宏 | 支持DMA动态时钟开关特性 | n |
uapi_dma_resume
头文件清单
功能说明
- 恢复DMA模块,从挂起状态恢复DMA硬件运行
- 仅在挂起状态下执行恢复操作
- 恢复后DMA模块可继续执行传输任务
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后调用
- 依赖关系:当前接口依赖DMA模块已处于挂起状态且CONFIG_DMA_SUPPORT_LPM已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| arg | uintptr_t | 恢复所需参数 | - |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 恢复成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
| Other | 其他错误码,参考errcode_t | 恢复失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_LPM | 功能宏 | 支持DMA低功耗模式功能 | y |
| CONFIG_DMA_SUPPORT_CLOCK | 特性宏 | 支持DMA时钟使能特性 | n |
uapi_dma_suspend
头文件清单
功能说明
- 挂起DMA模块,暂停DMA硬件运行
- 仅在未挂起状态下执行挂起操作
- 挂起后DMA模块停止传输任务
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后调用
- 依赖关系:当前接口依赖DMA模块未处于挂起状态且CONFIG_DMA_SUPPORT_LPM已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| arg | uintptr_t | 挂起所需参数 | - |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 挂起成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
| Other | 其他错误码,参考errcode_t | 挂起失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_LPM | 功能宏 | 支持DMA低功耗模式功能 | y |
uapi_dma_channel_is_enable
头文件清单
功能说明
- 获取DMA通道是否已经使能
- 用于查询通道当前工作状态
- 通道号无效时返回false
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后调用
- 依赖关系:当前接口依赖DMA模块已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| channel | uint8_t | DMA通道号 | 0 ~ DMA_CHANNEL_MAX_NUM-1 |
返回值
- 返回类型:bool
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| true | 已使能 | 通道已使能 |
| false | 未使能 | 通道未使能或DMA未初始化或通道号无效 |
uapi_dma_reset_channel_interrupt
头文件清单
功能说明
- 重置DMA通道中断,清除指定通道的所有中断状态
- 用于传输前清除残留中断状态
- 清除范围包括传输完成中断、块传输中断、源端传输中断、目的端传输中断和错误中断
前置条件
- 调用时序约束:当前接口必须在uapi_dma_init()成功返回后调用
- 依赖关系:当前接口依赖DMA模块已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| channel | uint8_t | DMA通道号 | 0 ~ DMA_CHANNEL_MAX_NUM-1 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x0) | 执行成功 | 中断清除成功 |
| ERRCODE_DMA_NOT_INIT(0x80001100) | DMA未初始化 | DMA模块未初始化时调用 |
| ERRCODE_DMA_INVALID_PARAMETER(0x80001102) | 参数无效 | 通道号超出有效范围 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_DMA | 编译参与宏 | 控制dma.c参与编译 | y |
| CONFIG_DMA_SUPPORT_CLOCK_OPT | 特性宏 | 支持DMA动态时钟开关特性 | n |
Type definitions
errcode_t
使用说明
作为本模块所有返回errcode_t类型接口的返回值类型 [SDK公共基础类型]
dma_transfer_cb_t
使用说明
作为uapi_dma_transfer_memory_single、uapi_dma_configure_peripheral_transfer_single、uapi_dma_transfer_memory_lli、uapi_dma_configure_peripheral_transfer_lli、uapi_dma_enable_lli接口的回调函数参数类型。调用时机:DMA传输完成或发生错误触发中断时,由中断处理函数调用。参数intr为DMA中断类型,参数channel为DMA通道号,参数arg为调用DMA传输时传递的私有参数指针。回调返回值为void,不检查返回值。
Structures
dma_ch_user_memory_config_t
typedef struct dma_ch_user_memory_config {
uint32_t src;
uint32_t dest;
uint16_t transfer_num;
uint8_t priority;
uint8_t width;
} dma_ch_user_memory_config_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| src | uint32_t | 传输源地址 |
| dest | uint32_t | 传输目的地址 |
| transfer_num | uint16_t | 传输数据量,取值范围:大于0 |
| priority | uint8_t | 传输通道优先级,取值范围:0(最低)~ 3(最高) |
| width | uint8_t | 传输数据宽度,取值:0(1字节)、1(2字节)、2(4字节) |
dma_ch_user_peripheral_config_t
typedef struct dma_ch_user_peripheral_config {
uint32_t src;
uint32_t dest;
uint16_t transfer_num;
uint16_t src_handshaking;
uint16_t dest_handshaking;
uint8_t trans_type;
uint8_t trans_dir;
uint8_t priority;
uint8_t src_width;
uint8_t dest_width;
uint8_t burst_length;
uint8_t src_increment;
uint8_t dest_increment;
uint8_t protection;
} dma_ch_user_peripheral_config_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| src | uint32_t | 传输源地址 |
| dest | uint32_t | 传输目的地址 |
| transfer_num | uint16_t | 传输数据量 |
| src_handshaking | uint16_t | 源端硬件握手号 |
| dest_handshaking | uint16_t | 目的端硬件握手号 |
| trans_type | uint8_t | 传输类型,取值:0~7 |
| trans_dir | uint8_t | 传输方向,取值:0(内存到外设)、1(外设到内存)、2(外设到外设) |
| priority | uint8_t | 传输通道优先级,取值范围:0(最低)~ 3(最高) |
| src_width | uint8_t | 源端传输数据宽度,取值:0(1字节)、1(2字节)、2(4字节) |
| dest_width | uint8_t | 目的端传输数据宽度,取值:0(1字节)、1(2字节)、2(4字节) |
| burst_length | uint8_t | 传输burst长度,取值:0(1)、1(4)、2(8)、3(16) |
| src_increment | uint8_t | 源端地址增量模式,取值:0(递增)、1(递减)、2(不变) |
| dest_increment | uint8_t | 目的端地址增量模式,取值:0(递增)、1(递减)、2(不变) |
| protection | uint8_t | 保护控制位,用于驱动AHB HPROT[3:1]总线,取值:0~2 |