16请求线 dmac0
22 请求线dmac1
内置fifo通道锁和总线锁
寄存器写保护
dmac处理外总线和内存的传输,
需要配置 SIF and/or DIF bitfields in the DMAC_CTRLBx和DSCR_IF,需要与MATRIX配置相适应
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 长度为1damc传输,软件控制buffer的数量,一旦damc传输完成,通道会被硬件关闭且产生中断,然后可以再次被编辑启用。
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]会被硬件清除,当完成传输
软件可以轮询这些寄存器,当寄存器对都为零,传输完成