前言
AT32F402/405 拥有2 个DMA 控制器(DMA1/DMA2),每个DMA 支持7 个通道且外设的DMA 请求可映射到任意通道上。本文主要就DMA 的基本功能进行讲解和案列解析。
支持型号列表
AT32F402xx
AT32F405xx
目录
1 DMA 简介 ................................................................................................................. 6
2 DMAMUX 简介 ......................................................................................................... 7
3 DMA 功能解析 ......................................................................................................... 9
3.1 可编程数据宽度 ........................................................................................................ 9
3.2 配置DMAMUX ......................................................................................................... 9
3.3 配置请求生成器模块 ............................................................................................... 10
3.4 配置请求同步模块 ................................................................................................... 10
4 DMA 配置解析 ........................................................................................................ 11
4.1 函数接口 .................................................................................................................. 11
4.2 数据流配置 .............................................................................................................. 11
4.3 配置流程 ................................................................................................................. 12
5 案例 数据从FLASH 传输到SRAM ..................................................................... 13
5.1 功能简介 ................................................................................................................. 13
5.2 资源准备 ................................................................................................................. 13
5.3 软件设计 ................................................................................................................. 13
5.4 实验效果 ................................................................................................................. 14
6 案例 TMR 产生DMA 请求将数据从SRAM 传输到GPIO ..................................... 15
6.1 功能简介 ................................................................................................................. 15
6.2 资源准备 ................................................................................................................. 15
6.3 软件设计 ................................................................................................................. 15
6.4 实验效果 ................................................................................................................. 17
7 案例 DMA 请求生成器产生DMA 请求 ................................................................ 18
7.1 功能简介 ................................................................................................................. 18
7.2 资源准备 ................................................................................................................. 18
7.3 软件设计 ................................................................................................................. 18
7.4 实验效果 ................................................................................................................. 20
8 案例 DMA 传输数据需等待DMA 请求同步信号 .................................................. 21
8.1 功能简介 ................................................................................................................. 21
8.2 资源准备 ................................................................................................................. 21
8.3 软件设计 ................................................................................................................. 21
8.4 实验效果 ................................................................................................................. 23
9 文档版本历史 ......................................................................................................... 24
DMA 简介
DMA 控制器的作用不仅在增强系统性能并减少处理器的中断生成,而且还针对32 位MCU 应用程序专门优化设计。DMA 控制器为存储器到存储器,存储器到外设和外设到存储器的传输提供了7 个通道。每个通道都支持外设的DMA 请求映射到任意通道上。
DMAMUX 简介
对于如何将外设的DMA 请求映射到任意的数据流通道上,就需要使用到DMAMUX。DMAMUX 针对每个外设都设计了独有的ID 号,使用者只需要将此ID 号写入对应的寄存器中并打开DMAMUX 功能即可。DMAMUX 的引入,使得DMA 相较于传统DMA 控制器变得更加灵活,使用者可以随意的分配7 个通道的使用情况,不必再纠结与某个IP 的DMA 请求只能固定使用在某个或某几个通道
上。
DMA 功能解析
可编程数据宽度
DMA 控制器的通道可支持传输不同数据宽度,byte/halfword/word。通过DMA_CxCTRL 中的PWIDTH和MWIDTH 位可以对源数据和目标数据的数据宽度进行编程,通常情况下需要设置PWIDTH 和MWIDTH 位相等,当PWIDTH 不等于MWIDTH 时,会依据PWIDTH/ MWIDTH 设定将资料对齐。
配置DMAMUX
在M2P 与P2M 模式下,必须配置DMAMUX,否则DMA 不会响应外设DMA 请求。DMAMUX 的作用是为外设的DMA 请求复用通道,即任何一个外设的DMA 请求可以映射到DMA1/DMA2 的任意通道,这大大增加了DMA 通道分配的灵活性。
配置DMAMUX 比较简单,只需调用专门提供的两个接口函数即可:
/* 使能DMAMUX 功能 */ |
void dmamux_enable(dma_type *dma_x, confirm_state new_state); |
/* 配置DMAMUX 通道 */ |
void dmamux_init(dmamux_channel_type *dmamux_channelx, dmamux_requst_id_sel_type dmamux_req_sel); |
配置请求生成器模块
在配置了DMAMUX 时,可选择配置DMA 请求生成器模块,模块一共有4 个请求生成器通道。此模块无需任何传统外设(如TIMER、SPI 等)提供DMA 请求,可通过外部EXINT 输入作为DMA 请求源输入。
配置请求生成器模块较为简单,只需调用专门提供的接口函数即可:
/* 初始化请求生成器结构体参数 */ |
dmamux_generator_default_para_init(&dmamux_gen_init_struct); |
/* 配置请求生成器结构体 */ |
dmamux_gen_init_struct.gen_polarity = DMAMUX_GEN_POLARITY_RISING;
dmamux_gen_init_struct.gen_request_number = 4;
dmamux_gen_init_struct.gen_signal_sel = DMAMUX_GEN_ID_EXINT0;
dmamux_gen_init_struct.gen_enable = TRUE; |
/* 配置请求生成器 */ |
dmamux_generator_config(DMA2MUX_GENERATOR1, &dmamux_gen_init_struct); |
配置请求同步模块
在配置了DMAMUX 时,可选择配置DMA 同步模块,模块一共有7 个同步通道。使能此功能后,当外设产生DMA 请求时,DMA 不会马上响应并传输数据,而是要等待同步信号的到来,当接收到同步信号后,DMA 才会根据配置传输数据;同步信号可由外部EXINT 输入提供配置同步模块较为简单,只需调用专门提供的接口函数即可:
/* 初始化同步模块结构体参数 */ |
dmamux_sync_default_para_init(&dmamux_sync_init_struct); |
/* 配置同步模块结构体参数 */ |
dmamux_sync_init_struct.sync_request_number = 4;
dmamux_sync_init_struct.sync_signal_sel = DMAMUX_SYNC_ID_EXINT0;
dmamux_sync_init_struct.sync_polarity = DMAMUX_SYNC_POLARITY_RISING;
dmamux_sync_init_struct.sync_event_enable = FALSE;
dmamux_sync_init_struct.sync_enable = TRUE; |
/* 配置同步模块 */ |
dmamux_sync_config(DMA2MUX_CHANNEL4, &dmamux_sync_init_struct); |
使用案例请下载附件文档查看!