电子说
概述
在使用Artery部分系列MCU时(如AT32F413AT32F415AT32F403AAT32F407),可以使用DMA弹性映射功能。此功能使得DMA的通道配置更加灵活,可以将某外设的DMA请求通道指定到DMA1或者DMA2共14个通道中的任意一个通道。(如:可以将SPI1接受数据的DMA请求指定到DMA1的通道7)。
本指南将介绍如何使用DMA弹性映射请求,从而使得DMA传输变得更加灵活多变。
配置及使用方法
常规DMA使用(DMA固定映射)
常规的DMA使用以及配置方式为:外设的DMA通道已经固定且不可改变,使用时配置好再使能固定通道即可。这就意味着如果想开启某个外设的DMA功能,那么通道是不可改变的,例如想使用SPI1的RX DMA功能,那么就要查看RM的手册,如下:
表1. DMA固定映射请求
从表格中可以知道需要开启DMA1的通道2。
DMA弹性映射使用
DMA弹性映射请求功能提供了一种更灵活的使用方式,即外设的DMA通道不固定,可选择DMA1和DMA2中,共14个通道的任意一个通道。
想要使用此功能,需要通过以下几步的设定:
1) 开启DMA弹性映射功能
将DMA的通道来源寄存器1的第24bit写1,即DMA_SRC_SEL1寄存器的DMA_FLEX_EN位。
向通道设置对应的寄存器中写入相应的硬件ID号。
每个外设的DMA请求都分配了一个硬件ID号,只要将这个ID号写进通道来源寄存器中即可。ID号可查看RM中的表格,以403A为例,如下:
表2. 403A各个信道的DMA弹性请求一览
上表中的CHx_SRC设定值就是硬件ID号,将这个ID号写进通道来源寄存器中的对应通道bit位就可以了。例如:要将SPI1的RX的DMA请求映射到DMA1的通道7,那么就要将0x09写入到DMA_SRC_SEL1寄存器的CH7_SRC[23:16]。其他配置与常规DMA配置相同通过以上3步的配置,弹性映射功能即可使用。
注:DMA1/2的DMA_FLEX_EN必须要同时设定为1或时,DMA1/2的映像模式必须一致。无法DMA1是固定式映像,DMA2是弹性式映像。
2) DMA弹性映射库函数使用
以上的配置在BSP中的dma.hdma.c的库文件中有提供相应的库函数,使用者只需调用库函数即可完成DMA弹性映射模式的配置。
库函数说明如下:
表3. DMA弹性映射库函数说明
此函数只需在配置好DMA常规功能后调用即可,如下:
图1. DMA固定映射库函数调用范例
上图中为设置TIMER1的更新中断为DMA弹性映射请求范例。
例程说明
DMA弹性映射功能在BSP中例程,路径为:
AT32F403A_407_Firmware_Library_V2.x.xprojectat_start_f403aexamplesdmadata_to_gpio_flexible(以403A路径为例)
下面将对这两个例程做一个使用说明。
• data_to_gpio_flexible
例程data_to_jpio_flexible
本例程实现的功能为利用DMA将SRAM的数据传输到GPIO口的输出寄存器中,从而达到控制GPIO口输出的目的。同时配置TMER2产生overflow中断并产生DMA请求,配置次DMA请求为弹性映射模式。
TIMER2每产生一次DMA请求,DMA就从SRAM搬运一笔数据到GPIO口。
DMA相关的配置代码:
实验结果可采用逻辑分析仪抓取GPIO口数据查看。
来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !