0.简介
DMA用于在存储器和外围功能模块之间传送数据,能够在CPU不参与的情况下实现存储器之间,存储器与外围功能模块之间的数据交换。
- 拥有2个DMA控制单元,共16个独立通道,可独立操作不同的DMA传输。每个DMA控制单元中包含8个通道,每个通道可以独立配置传输功能。
8个通道优先级顺序为:通道0>通道1>…>通道7。
当一个DMA单元有多个通道请求传输时将按优先级顺序执行。但已处于传输中的通道不会被打断,高优先通道需等当前通道传输完成后才会启动。
- 每个通道的启动源通过独立的触发源选择寄存器配置
- 每次请求传输一个数据块。数据块最小为1个数据,最多可以是1024个数据。每个数据的宽度可配置为8bit、16bit或32bit。
- 源地址和目标地址可以独立配置为固定,自增,自减,循环或指定偏移量的跳转
DMA的控制功能较为复杂,如不连续地址传输、连锁传输、中断等。本文仅介绍一些常规的操作。
如使用DMA的目的就是为了减少中断,因此一般来讲既然使用了DMA就不会使用中断了,本文就不介绍中断了。
1.功能描述
1.1 启动DMA
DMA通过外围电路产生的请求启动,这些请求通过触发源选择寄存器DMA_TRGSELx(x=0~7)进行配置,各通道独立配置启动请求源。
当外围电路产生启动请求或软件写寄存器产生启动请求时,并且DMA传输使能有效DMA_EN.EN=1,传输通道处于许可状态DMA_CHEN.CHEN[x]=1,则启动通道x传输。
DMA1_TRGSELx与DMA2_TRGSELx均属于AOS(自动运行系统)的寄存器。
B31 |
COMEN[1] |
公共触发使能 |
0:禁止AOS_COMTRG2的公共触发事件触发本AOS目标 1:允许AOS_COMTRG2的公共触发事件触发本AOS目标 |
B30 |
COMEN[0] |
公共触发使能 |
0:禁止AOS_COMTRG1的公共触发事件触发本AOS目标 1:允许AOS_COMTRG1的公共触发事件触发本AOS目标 |
B8~B0 |
TRGSEL[8:0] |
触发源选择 |
写入要选择的外设电路事件的编号 |
至于外设电路事件的编号,可参见章节《中断控制器(INTC)》中的表(中断事件请求序号与选择),其中的“编号”项即是外设电路事件的编号。
传输通道使能由两个寄存器控制DMA_CHEN、DMA_CHENCLR,分别用于使能与禁能传输通道。
DMA_CHEN |