DMA
简介
DMA控制器提供了一种硬件的方式在外设和存储器之间或者存储器和存储器之间传输数据,而无需MCU的介入,避免了MCU多次进入中断进行大规模的数据拷贝,最终提高整体的系统性能。
每个DMA控制器包含了两个AHB总线接口和8个4字深度的FIFO,使DMA可以高效的传输数据。DMA控制器(DMA0,DMA1)共有16个通道,每个通道可以被分配给一个或多个特定的外设进行数据传输。两个内置的总线仲裁器用来处理DMA请求的优先级问题。
Cortex®-M4内核与DMA控制器都是通过系统总线来处理数据,引入仲裁机制来处理它们之间的竞争关系。当MCU和DMA指定相同的外设的时候,MCU将会在特定的总线周期挂起。总线矩阵使用了轮询的算法保证MCU至少占用了一半的带宽。
主要特征

DMA传输方式
DMA 支持三种传输模式,如下:
- 外设到存储器:通过 AHB 外设主机接口从外设读取数据,通过 AHB 存储器主机接口向存储器写入数据。比如串口的 DMA 接收,就是从外设到存储器。
- 存储器到外设:通过 AHB 存储器主机接口从存储器读取数据,通过 AHB 外设主机接口向外设写入数据。比如串口的 DMA 发送,就是存储器到外设。
- 存储器到存储器:通过 AHB 外设主机接口从存储器读取数据,通过 AHB 存储器主机接口向存储器写入数据。

DMA外设请求


串口DMA发送/接收示例
DMA 最常见的应用场景之一就是串口通信。在大数据量高速传输时,使用中断逐字节接收会占用大量 CPU 资源,而 DMA 可以让外设直接将数据搬运到内存,只在传输完成时通知 CPU。
本示例演示如何使用 USART0 配合 DMA 进行数据的发送和接收。
注意: GD32F4 系列的 DMA 请求映射比较灵活,需要查阅用户手册的 DMA 请求映射表 来确定特定外设对应的 DMA 控制器、数据流 (Stream) 和通道 (Channel)。
假设映射关系如下(具体请查阅数据手册):
- USART0_TX: DMA1, Stream7, Channel4
- USART0_RX: DMA1, Stream2, Channel4
1. 变量定义
1 | |
2. DMA 初始化配置
配置 DMA 需要注意源地址、目标地址、数据宽度、传输方向等。
1 | |
3. USART 初始化
除了常规配置外,关键是要使能 USART 的 DMA 发送和接收功能。
1 | |
4. 中断配置与服务函数
1 | |
5. 封装发送函数
为了方便使用,我們可以封装着一个启动 DMA 发送的函数。
1 | |
6. 主函数调用
1 | |
DMA库函数
| 库函数名称 | 库函数描述 |
|---|---|
| dma_deinit | 复位 DMA 一个通道的所有寄存器 |
| dma_single_data_mode_init | DMA 单数据传输模式初始化 |
| dma_multi_data_mode_init | DMA 多数据传输模式初始化 |
| dma_periph_address_config | DMA 外设基地址配置 |
| dma_memory_address_config | DMA 存储器基地址配置 |
| dma_transfer_number_config | DMA 需要传输数据数配置 |
| dma_transfer_number_get | DMA 需要传输数据数获取 |
| dma_priority_config | DMA 通道传输优先级配置 |
| dma_memory_burst_beats_config | 存储器增量突发传输节拍数配置 |
| dma_periph_burst_beats_config | 外设增量突发传输节拍数配置 |
| dma_memory_width_config | 存储器传输数据宽度配置 |
| dma_periph_width_config | 外设传输数据宽度配置 |
| dma_memory_address_generation_config | 存储器下地址算法配置 |
| dma_peripheral_address_generation_config | 外设地址算法配置 |
| dma_circulation_enable | DMA 循环传输模式使能 |
| dma_circulation_disable | DMA 循环传输模式失能 |
| dma_channel_enable | DMA 通道使能 |
| dma_channel_disable | DMA 通道失能 |
| dma_transfer_direction_config | DMA 通道数据传输方向配置 |
| dma_switch_buffer_mode_config | DMA 存储器传输缓冲区配置 |
| dma_using_memory_get | DMA 存储器传输缓冲区获取 |
| dma_channel_subperipheral_select | DMA 通道外设使能选择 |
| dma_flow_controller_config | DMA 传输控制器配置 |
| dma_switch_buffer_mode_enable | DMA 存储切换模式使能 |
| dma_fifo_status_get | DMA FIFO 状态获取 |
| dma_flag_get | DMA 通道传输标志位获取 |
| dma_flag_clear | DMA 通道传输标志位清除 |
| dma_interrupt_flag_get | DMA 通道传输中断标志位获取 |
| dma_interrupt_flag_clear | DMA 通道传输中断标志位清除 |
| dma_interrupt_enable | DMA 中断使能 |
| dma_interrupt_disable | DMA 中断失能 |
一、结构体定义
1. dma_multi_data_parameter_struct
| 成员名称 | 功能描述 |
|---|---|
periph_addr |
外设基地址 |
periph_width |
外设数据传输宽度 |
periph_inc |
外设地址生成算法模式 |
memory0_addr |
存储器0基地址 |
memory0_width |
存储器0传输宽度 |
memory0_inc |
存储器0地址生成算法模式 |
memory0_burst |
存储器0增量突发传输 |
memory1_addr |
存储器1基地址 |
memory1_width |
存储器1传输宽度 |
memory1_inc |
存储器1地址生成算法模式 |
memory1_burst |
存储器1增量突发传输 |
periph_burst |
外设增量突发传输 |
periph_inc |
外设增量突发模式 |
circular_value |
DMA FIFO寄存器 |
circular_mode |
DMA循环模式 |
direction |
DMA通道数据传输方向 |
number |
DMA需要传输数据数 |
priority |
DMA通道优先级 |
2. dma_single_data_parameter_struct
| 成员名称 | 功能描述 |
|---|---|
periph_addr |
外设基地址 |
periph_inc |
外设地址生成算法模式 |
periph_width |
外设数据传输宽度 |
DMA_CHx(x=0..7) |
DMA外设选择 |
memory_addr |
存储器基地址 |
memory_inc |
存储器地址生成算法模式 |
memory_width |
外设数据传输宽度 |
periph_burst |
外设增量突发传输 |
circular_mode |
DMA循环模式 |
direction |
DMA通道数据传输方向 |
DMA_MTOM |
DMA外设选择 |
priority |
DMA通道优先级 |
二、DMA库函数详细信息
1. dma_deinit
- 函数原型:
void dma_deinit(uint32_t dma_periph, dma_channel_enum channelx) - 功能描述:复位DMA一个通道的所有寄存器
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_deinit(DMA0, DMA_CH0);
2. dma_single_data_mode_init
- 函数原型:
void dma_single_data_mode_init(uint32_t dma_periph, dma_channel_enum channelx, dma_single_data_parameter_struct *init_struct) - 功能描述:DMA单数据传输模式初始化
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)init_struct:指向dma_single_data_parameter_struct的指针
- 输出参数:无
- 返回值:无
- 示例:
1
2dma_single_data_parameter_struct dma_single_data_struct;
dma_single_data_mode_init(DMA0, DMA_CH0, &dma_single_data_struct);
3. dma_multi_data_mode_init
- 函数原型:
void dma_multi_data_mode_init(uint32_t dma_periph, dma_channel_enum channelx, dma_multi_data_parameter_struct *init_struct) - 功能描述:DMA多数据传输模式初始化
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)init_struct:指向dma_multi_data_parameter_struct的指针
- 输出参数:无
- 返回值:无
- 示例:
1
2dma_multi_data_parameter_struct dma_multi_data_struct;
dma_multi_data_mode_init(DMA0, DMA_CH0, &dma_multi_data_struct);
4. dma_periph_address_config
- 函数原型:
void dma_periph_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address) - 功能描述:DMA外设基地址配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)address:外设基地址
- 输出参数:无
- 返回值:无
- 示例:
1
2#define BASE_ADDR ((uint32_t)0x40004000)
dma_periph_address_config(DMA0, DMA_CH0, BASE_ADDR);
5. dma_memory_address_config
- 函数原型:
void dma_memory_address_config(uint32_t dma_periph, dma_channel_enum channelx, dma_memory_flag memory_flag, uint32_t address) - 功能描述:DMA存储器基地址配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)memory_flag:存储器选择(DMA_MEMORY0/DMA_MEMORY1)address:存储器基地址
- 输出参数:无
- 返回值:无
- 示例:
1
2#define BUF_ADDR ((uint32_t)0x20001000)
dma_memory_address_config(DMA0, DMA_CH0, DMA_MEMORY0, BUF_ADDR);
6. dma_transfer_number_config
- 函数原型:
void dma_transfer_number_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t number) - 功能描述:DMA需要传输数据数配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)number:需要传输数据数(0~0xffff)
- 输出参数:无
- 返回值:无
- 示例:
1
2#define TRANSFER_NUM 0x400
dma_transfer_number_config(DMA0, DMA_CH0, TRANSFER_NUM);
7. dma_transfer_number_get
- 函数原型:
uint32_t dma_transfer_number_get(uint32_t dma_periph, dma_channel_enum channelx) - 功能描述:DMA需要传输数据数获取
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)
- 输出参数:无
- 返回值:需要传输数据数(0~0xffff)
- 示例:
1
2uint32_t number = 0;
number = dma_transfer_number_get(DMA0, DMA_CH0);
8. dma_priority_config
- 函数原型:
void dma_priority_config(uint32_t dma_periph, dma_channel_enum channelx, dma_priority_enum priority) - 功能描述:DMA通道传输优先级配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)priority:优先级(DMA_PRIORITY_LOW/DMA_PRIORITY_MEDIUM/DMA_PRIORITY_HIGH/DMA_PRIORITY_ULTRA_HIGH)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_priority_config(DMA0, DMA_CH0, DMA_PRIORITY_HIGH);
9. dma_memory_burst_beats_config
- 函数原型:
void dma_memory_burst_beats_config(uint32_t dma_periph, dma_channel_enum channelx, dma_memory_burst_enum mbeat) - 功能描述:存储器增量突发传输节拍数配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)mbeat:存储器增量突发传输节拍数(DMA_MEMORY_BURST_SINGLE/DMA_MEMORY_BURST_4_BEAT/DMA_MEMORY_BURST_8_BEAT/DMA_MEMORY_BURST_16_BEAT)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_memory_burst_beats_config(DMA0, DMA_CH0, DMA_MEMORY_BURST_8_BEAT);
10. dma_periph_burst_beats_config
- 函数原型:
void dma_periph_burst_beats_config(uint32_t dma_periph, dma_channel_enum channelx, dma_periph_burst_enum pbeat) - 功能描述:外设增量突发传输节拍数配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)pbeat:外设增量突发传输节拍数(DMA_PERIPH_BURST_SINGLE/DMA_PERIPH_BURST_4_BEAT/DMA_PERIPH_BURST_8_BEAT/DMA_PERIPH_BURST_16_BEAT)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_periph_burst_beats_config(DMA0, DMA_CH0, DMA_PERIPH_BURST_8_BEAT);
11. dma_memory_width_config
- 函数原型:
void dma_memory_width_config(uint32_t dma_periph, dma_channel_enum channelx, dma_memory_width_enum mwidth) - 功能描述:存储器传输数据宽度配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)mwidth:存储器传输数据宽度(DMA_MEMORY_WIDTH_8BIT/DMA_MEMORY_WIDTH_16BIT/DMA_MEMORY_WIDTH_32BIT)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_memory_width_config(DMA0, DMA_CH0, DMA_MEMORY_WIDTH_32BIT);
12. dma_periph_width_config
- 函数原型:
void dma_periph_width_config(uint32_t dma_periph, dma_channel_enum channelx, dma_periph_width_enum pwidth) - 功能描述:外设传输数据宽度配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)pwidth:外设传输数据宽度(DMA_PERIPH_WIDTH_8BIT/DMA_PERIPH_WIDTH_16BIT/DMA_PERIPH_WIDTH_32BIT)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_periph_width_config(DMA0, DMA_CH0, DMA_PERIPH_WIDTH_32BIT);
13. dma_memory_address_generation_config
- 函数原型:
void dma_memory_address_generation_config(uint32_t dma_periph, dma_channel_enum channelx, uint8_t generation_algorithm) - 功能描述:存储器下地址算法配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)generation_algorithm:存储器地址生成算法(DMA_MEMORY_INCREASE_ENABLE/DMA_MEMORY_INCREASE_DECREASE/DMA_MEMORY_SAME)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_memory_address_generation_config(DMA0, DMA_CH0, DMA_MEMORY_INCREASE_ENABLE);
14. dma_peripheral_address_generation_config
- 函数原型:
void dma_peripheral_address_generation_config(uint32_t dma_periph, dma_channel_enum channelx, uint8_t generation_algorithm) - 功能描述:外设地址算法配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)generation_algorithm:外设地址生成算法(DMA_PERIPH_INCREASE_ENABLE/DMA_PERIPH_INCREASE_DECREASE/DMA_PERIPH_FIX/DMA_PERIPH_FIX_INCREASE)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_peripheral_address_generation_config(DMA0, DMA_CH0, DMA_PERIPH_INCREASE_ENABLE);
15. dma_circulation_enable
- 函数原型:
void dma_circulation_enable(uint32_t dma_periph, dma_channel_enum channelx) - 功能描述:DMA循环传输模式使能
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_circulation_enable(DMA0, DMA_CH0);
16. dma_circulation_disable
- 函数原型:
void dma_circulation_disable(uint32_t dma_periph, dma_channel_enum channelx) - 功能描述:DMA循环传输模式失能
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_circulation_disable(DMA0, DMA_CH0);
17. dma_channel_enable
- 函数原型:
void dma_channel_enable(uint32_t dma_periph, dma_channel_enum channelx) - 功能描述:DMA通道使能
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_channel_enable(DMA0, DMA_CH0);
18. dma_channel_disable
- 函数原型:
void dma_channel_disable(uint32_t dma_periph, dma_channel_enum channelx) - 功能描述:DMA通道失能
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_channel_disable(DMA0, DMA_CH0);
19. dma_transfer_direction_config
- 函数原型:
void dma_transfer_direction_config(uint32_t dma_periph, dma_channel_enum channelx, uint8_t direction) - 功能描述:DMA通道数据传输方向配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)direction:数据传输方向(DMA_PERIPH_TO_MEMORY/DMA_MEMORY_TO_PERIPH/DMA_MEMORY_TO_MEMORY)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_transfer_direction_config(DMA0, DMA_CH0, DMA_PERIPH_TO_MEMORY);
20. dma_switch_buffer_mode_config
- 函数原型:
void dma_switch_buffer_mode_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t memory0_addr, uint32_t memory1_addr) - 功能描述:DMA存储器传输缓冲区配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)memory0_addr:存储器0基地址memory1_addr:存储器1基地址
- 输出参数:无
- 返回值:无
- 示例:
1
2
3#define BUF0_ADDR ((uint32_t)0x20001000)
#define BUF1_ADDR ((uint32_t)0x20002000)
dma_switch_buffer_mode_config(DMA0, DMA_CH0, BUF0_ADDR, BUF1_ADDR);
21. dma_using_memory_get
- 函数原型:
uint32_t dma_using_memory_get(uint32_t dma_periph, dma_channel_enum channelx) - 功能描述:DMA存储器传输缓冲区获取
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)
- 输出参数:无
- 返回值:使用的存储器(
DMA_MEMORY0/DMA_MEMORY1) - 示例:
1
uint32_t using_memory = dma_using_memory_get(DMA0, DMA_CH0);
22. dma_channel_subperipheral_select
- 函数原型:
void dma_channel_subperipheral_select(uint32_t dma_periph, dma_channel_enum channelx, dma_subperipheral_enum sub_periph) - 功能描述:DMA通道外设使能选择
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)sub_periph:指定DMA通道的外设(如DMA_SUBPERIO等)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_channel_subperipheral_select(DMA0, DMA_CH0, DMA_SUBPERIO);
23. dma_flow_controller_config
- 函数原型:
void dma_flow_controller_config(uint32_t dma_periph, dma_channel_enum channelx, dma_flow_controller_enum controller) - 功能描述:DMA传输控制器配置
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)controller:DMA传输控制器(DMA_FLOW_CONTROLLER_DMA/DMA_FLOW_CONTROLLER_PERIPH)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_flow_controller_config(DMA0, DMA_CH0, DMA_FLOW_CONTROLLER_DMA);
24. dma_switch_buffer_mode_enable
- 函数原型:
void dma_switch_buffer_mode_enable(uint32_t dma_periph, dma_channel_enum channelx) - 功能描述:DMA存储切换模式使能
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_switch_buffer_mode_enable(DMA0, DMA_CH0);
25. dma_fifo_status_get
- 函数原型:
uint32_t dma_fifo_status_get(uint32_t dma_periph, dma_channel_enum channelx) - 功能描述:DMA FIFO状态获取
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)
- 输出参数:无
- 返回值:FIFO状态值
- 示例:
1
uint32_t fifo_status = dma_fifo_status_get(DMA0, DMA_CH0);
26. dma_flag_get
- 函数原型:
FlagStatus dma_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) - 功能描述:DMA通道传输标志位获取
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)flag:指定获取的标志位(DMA_FLAG_FEE/DMA_FLAG_SDE/DMA_FLAG_TAE/DMA_FLAG_HTF/DMA_FLAG_FTF)
- 输出参数:无
- 返回值:
SET或RESET - 示例:
1
FlagStatus flag_status = dma_flag_get(DMA0, DMA_CH0, DMA_FLAG_FTF);
27. dma_flag_clear
- 函数原型:
void dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) - 功能描述:DMA通道传输标志位清除
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)flag:指定清除的标志位(DMA_FLAG_FEE/DMA_FLAG_SDE/DMA_FLAG_TAE/DMA_FLAG_HTF/DMA_FLAG_FTF)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_flag_clear(DMA0, DMA_CH0, DMA_FLAG_FTF);
28. dma_interrupt_flag_get
- 函数原型:
FlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t interrupt) - 功能描述:DMA通道传输中断标志位获取
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)interrupt:指定获取的中断标志位(DMA_INT_FLAG_FEE/DMA_INT_FLAG_SDE/DMA_INT_FLAG_TAE/DMA_INT_FLAG_HTF/DMA_INT_FLAG_FTF)
- 输出参数:无
- 返回值:
SET或RESET - 示例:
1
2
3if (dma_interrupt_flag_get(DMA0, DMA_CH0, DMA_INT_FLAG_FTF)) {
// 处理传输完成中断
}
29. dma_interrupt_flag_clear
- 函数原型:
void dma_interrupt_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t interrupt) - 功能描述:DMA通道传输中断标志位清除
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)interrupt:指定清除的中断标志位(DMA_INT_FLAG_FEE/DMA_INT_FLAG_SDE/DMA_INT_FLAG_TAE/DMA_INT_FLAG_HTF/DMA_INT_FLAG_FTF)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_interrupt_flag_clear(DMA0, DMA_CH0, DMA_INT_FLAG_FTF);
30. dma_interrupt_enable
- 函数原型:
void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) - 功能描述:DMA中断使能
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)source:DMA中断源(DMA_CHXCTL_SDEIE/DMA_CHXCTL_TAEIE/DMA_CHXCTL_HTFIE/DMA_CHXCTL_FTFIE/DMA_CHXCTL_FEEIE)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_interrupt_enable(DMA0, DMA_CH0, DMA_CHXCTL_FTFIE);
31. dma_interrupt_disable
- 函数原型:
void dma_interrupt_disable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) - 功能描述:DMA中断失能
- 先决条件:无
- 被调用函数:无
- 输入参数:
dma_periph:DMA外设(DMA0/DMA1)channelx:DMA通道(DMA_CH0~`DMA_CH7`)source:DMA中断源(DMA_CHXCTL_SDEIE/DMA_CHXCTL_TAEIE/DMA_CHXCTL_HTFIE/DMA_CHXCTL_FTFIE/DMA_CHXCTL_FEEIE)
- 输出参数:无
- 返回值:无
- 示例:
1
dma_interrupt_disable(DMA0, DMA_CH0, DMA_CHXCTL_FTFIE);