杂记:Atmel sama5d3 DMA Controller (DMAC)

来源:互联网 发布:windows10 mysql 启动 编辑:程序博客网 时间:2024/06/05 17:57
DMA Controller (DMAC)
概述:
dma从源读然后写到目的地址,通过一个或者多个AMBA buses.
每个源目的对需要一个通道,最简单配置的dmac有一个主控接口和一个通道
每次dmac传输会有两次AMBA传输发生,
dmac通过apb接口配置


3 AHB-Lite 主接口
支持Peripheral-to-Memory, Memory-to-Peripheral, 
Peripheralto-Peripheral and Memory-to-Memory
从源到目的可独立运行在8 16 32 bit模式
硬件软件触发
多缓冲顺序操作支持
不同源目的支持自增自减不变寻址模式
仲裁模式Modified Round Robin and Fixed Priority
可配置长度 AMBA AHB Burst
用apb接口配置dmac
8通道 dmac0和dmac1

16请求线 dmac0

22 请求线dmac1

内置fifo

通道锁和总线锁

寄存器写保护



dmac处理外总线和内存的传输,

需要配置 SIF and/or DIF bitfields in the DMAC_CTRLBx和DSCR_IF,需要与MATRIX配置相适应


dmac0主要连接外总线和内存 接受apb0的触发
HSMCI0 Receive/transmit 0
SPI0 Transmit 1
SPI0 Receive 2
USART0 Transmit 3
USART0 Receive 4
USART1 Transmit 5
USART1 Receive 6
TWI0 Transmit 7
TWI0 Receive 8
TWI1 Transmit 9
TWI1 Receive 10
UART0 Transmit 11
UART0 Receive 12
SSC0 Transmit 13
SSC0 Receive 14
SMD Transmit 15
SMD Receive 16


dmac1主要连接外总线和内存 接受apb1的触发
HSMCI1 Receive/transmit 0
HSMCI2 Receive/transmit 1
ADC Receive 2
SSC1 Transmit 3
SSC1 Receive 4
UART1 Transmit 5
UART1 Receive 6
USART2 Transmit 7
USART2 Receive 8
USART3 Transmit 9
USART3 Receive 10
TWI2 Transmit 11
TWI2 Receive 12
DBGU Transmit 13
DBGU Receive 14
SPI1 Transmit 15
SPI1 Receive 16
SHA Transmit 17
AES Transmit 18
AES Receive 19
TDES Transmit 20
TDES Receive 21


dmac中断线连接中断控制器,需要配置


外部源,dmac读的挂在amba上面的设备,dmac会把读的数据放在fifo中,发送给目的

外部目的,把fifo中数据发送给的对象

内存,不需要握手的时刻就绪的源或者目的

可编程仲裁策略,Modified Round Robin and Fixed Priority可以在ARB_CFG bit in the Global Configuration Register (DMAC_GCFG)配置

固定优先级与通道号相对,数字越大优先越高

通道由一对源和目的组成,如果源或目的不是内存,则需要握手,握手接口可以编辑

dmac是ahb总线上的控制端,可以读写别的从设备

握手,用来请求,回答,控制dmac的传输,分为硬件握手,软件握手,可控制单一或者分块传输

硬件握手用硬件信号

软件握手用寄存器


内存传输,buffer直接转成一系列的AMBA bursts and AMBA single transfers.

非内存传输,buffer先转成DMAC transactions (single and chunks)然后是一系列的AMBA bursts and AMBA single transfers.


两种transaction  非内存

single transfer 长度为1
chunk transfer 长度可编辑,增量式传输,但不超过16beats


damc传输,软件控制buffer的数量,一旦damc传输完成,通道会被硬件关闭且产生中断,然后可以再次被编辑启用。


Multi-buffer DMAC transfer: 内存
chaining (linked list pointers), 由descriptor pointer (DSCR)指向内存中的linked list item (LLI),LLI用来告诉buffer的地址和下一个DSCR在哪

auto-reloading of channel registers, 自动在每个buffer传完后充填原来值。

contiguous buffers.下一个buffer的地址


画中画模式,每传输一定量的数据后,地址会自动的加一个被编辑的增量

通道锁,在传输的时候锁住控制端

总线锁,保持一个通道的对amba总线的主要控制权


内存传输没有握手,一旦使能立马就会开始,如果从设备没有准备好,会插入等待状态,最好不要超过16个

如果有握手,从设备会通知dmac,所以不需要等待状态


软件握手用寄存器,硬件握手用特定的接口。

软需要damc时,会产生中断,在中断处理函数中写寄存器来握手,此时从设备是控制端

The SRC_H2SEL/DST_H2SEL bit in the Channel Configuration Register (DMAC_CFGx) 要清除

如果从设备不是控制端,Software Last Transfer Flag Register (DMAC_LAST)没用,且相关寄存器也被忽视


Software Chunk Transfer Request Register (DMAC_CREQ[2x])写1,使能源数据块传输请求

DMAC_CREQ[2x+1]写1,使能目的数据块请求 ,x为通道号码

Software Single Request Register (DMAC_SREQ[2x]))写1,使能源单独传输请求

DMAC_SREQ[2x+1]写1,使能目的单独传输请求x为通道号码


DMAC_SREQ[x] or DMAC_SREQ[2x+1]会被硬件清除,当完成传输

软件可以轮询这些寄存器,当寄存器对都为零,传输完成


然后是各种类型源和目的的组合配置方法

0 0