400-035-6699
当前位置: 首页 » 技术支持 » 博文资讯 »

\"AT32微控制器DMA通道配置指南:实现灵活多通道控制\"

在使用Artery系列MCU(例如AT32F413、AT32F415、AT32F403A、AT32F407)时,可以利用DMA的弹性映射功能,这种功能大大提高了DMA通道配置的灵活性。具体来说,用户可以将任意外设的DMA请求通道映射到DMA1或DMA2中的任意一个通道,例如将SPI1的接收数据请求映射到DMA1的通道7。
### 弹性映射功能的优势 传统的DMA配置方式中,外设的DMA通道是固定且不可变的。但弹性映射功能允许外设的DMA通道不固定,提供了更为灵活的配置方式。
### 如何使用弹性映射功能 要启用DMA弹性映射功能,需要遵循以下步骤:
1. **开启DMA弹性映射功能**:通过设置DMA的通道来源寄存器1的第24位为1,即DMA_SRC_SEL1寄存器的DMA_FLEX_EN位。 2. **写入硬件ID号**:每个外设的DMA请求都分配了一个硬件ID号,将这个ID号写入通道来源寄存器中相应的位置。 3. **其他常规配置**:其他配置与常规DMA配置相同,通过这些步骤,弹性映射功能即可启用。
需要注意的是,DMA1和DMA2的DMA_FLEX_EN位必须同时设定为1,且DMA1和DMA2的映像模式必须一致。
### 使用库函数简化配置 BSP中的dma.h和dma.c库文件提供了相应的库函数,使用这些函数可以简化DMA弹性映射模式的配置过程。用户只需调用相应的库函数即可完成配置。
### 实例说明 以AT32F403A为例,BSP中提供了一个示例路径:AT32F403A_407_Firmware_Library_V2.x.xproject中的examples目录下的dmadata_to_gpio_flexible。这个例程展示了如何利用DMA将SRAM中的数据传输到GPIO口的输出寄存器,从而控制GPIO口的输出。
具体来说,例程通过配置TIMER2产生overflow中断,并产生DMA请求,将这个DMA请求设置为弹性映射模式。每当TIMER2产生一次DMA请求,DMA就会从SRAM中传输数据到GPIO口。
### 总结 通过DMA弹性映射功能,用户可以更加灵活地配置DMA通道,满足不同的应用需求。这种灵活性不仅提高了系统的性能,也简化了配置过程,使得系统设计更加高效。
来源:AT32 MCU 雅特力科技。免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用的视频、图片、文字如涉及作品版权问题,请联系我们进行处理。审核编辑:黄宇。

概述

\

在使用Artery部分系列MCU时(如AT32F413AT32F415AT32F403AAT32F407),可以使用DMA弹性映射功能。此功能使得DMA的通道配置更加灵活,可以将某外设的DMA请求通道指定到DMA1或者DMA2共14个通道中的任意一个通道。(如:可以将SPI1接受数据的DMA请求指定到DMA1的通道7)。

本指南将介绍如何使用DMA弹性映射请求,从而使得DMA传输变得更加灵活多变。

配置及使用方法

常规DMA使用(DMA固定映射)

常规的DMA使用以及配置方式为:外设的DMA通道已经固定且不可改变,使用时配置好再使能固定通道即可。这就意味着如果想开启某个外设的DMA功能,那么通道是不可改变的,例如想使用SPI1的RX DMA功能,那么就要查看RM的手册,如下:

wKgZomUD6fuASqJeAABodJE0UP0528.png 表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为例,如下:

wKgZomUD6fyAXEeEAAR2KrmKQqs797.png 表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弹性映射模式的配置。

库函数说明如下:

wKgZomUD6f6AIyTKAACV8WLN5Wo109.png 表3. DMA弹性映射库函数说明

此函数只需在配置好DMA常规功能后调用即可,如下:

wKgaomUD6f-AH6FoAAJ_TvUrqHs155.png 图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相关的配置代码

wKgaomUD6gGALgBaAATFUDg4zQ4776.png

实验结果可采用逻辑分析仪抓取GPIO口数据查看。

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理

审核编辑 黄宇

【限时免费】一键获取网络规划系统模板+传输架构设计+连通性评估方案

相关文章

服务电话:
400-035-6699
企服商城