跳转至

dma

DMA (Direct Memory Access) 在无需 CPU 干预的情况下实现外设与内存之间的数据传输,支持内存到内存和外设到内存的单次与链式传输模式。

头文件清单

#include "include/driver/dma.h"

接口清单

接口名称 功能简述
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

errcode_t uapi_dma_init(void)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 初始化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

void uapi_dma_deinit(void)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 去初始化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

errcode_t uapi_dma_open(void)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 开启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

void uapi_dma_close(void)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 关闭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

errcode_t uapi_dma_start_transfer(uint8_t channel)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 启动指定通道的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

errcode_t uapi_dma_end_transfer(uint8_t channel)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 停止指定通道的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

uint32_t uapi_dma_get_block_ts(uint8_t channel)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 获取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)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 通过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)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 通过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

uint8_t uapi_dma_get_lli_channel(uint8_t burst_length, uint8_t handshaking)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 获取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)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 通过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)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 通过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

errcode_t uapi_dma_set_circular_lli_mode(uint8_t channel, bool cir_lli_en)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 启用或禁用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

errcode_t uapi_dma_enable_lli(uint8_t channel, dma_transfer_cb_t callback, uintptr_t arg)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 启用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

errcode_t uapi_dma_resume(uintptr_t arg)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 恢复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

errcode_t uapi_dma_suspend(uintptr_t arg)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 挂起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

bool uapi_dma_channel_is_enable(uint8_t channel)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 获取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

errcode_t uapi_dma_reset_channel_interrupt(uint8_t channel)

头文件清单

#include "include/driver/dma.h"

功能说明

  • 重置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

typedef uint32_t errcode_t;

使用说明

作为本模块所有返回errcode_t类型接口的返回值类型 [SDK公共基础类型]

dma_transfer_cb_t

typedef void (*dma_transfer_cb_t)(uint8_t intr, uint8_t channel, uintptr_t arg);

使用说明

作为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

Macros

ERRCODE_SUCC [SDK公共共享宏]

#define ERRCODE_SUCC                                        0UL

ERRCODE_DMA_NOT_INIT [SDK公共共享宏]

#define ERRCODE_DMA_NOT_INIT                                0x80001100

ERRCODE_DMA_INVALID_PARAMETER [SDK公共共享宏]

#define ERRCODE_DMA_INVALID_PARAMETER                       0x80001102

ERRCODE_DMA_RET_NO_AVAIL_CH [SDK公共共享宏]

#define ERRCODE_DMA_RET_NO_AVAIL_CH                         0x80001103

ERRCODE_DMA_RET_ERROR_CONFIG [SDK公共共享宏]

#define ERRCODE_DMA_RET_ERROR_CONFIG                        0x80001104

ERRCODE_DMA_CH_BUSY [SDK公共共享宏]

#define ERRCODE_DMA_CH_BUSY                                 0x80001107

ERRCODE_DMA_RET_ERROR_ADDRESS_ALIGN [SDK公共共享宏]

#define ERRCODE_DMA_RET_ERROR_ADDRESS_ALIGN                 0x80001108