分类: 嵌入式
2010-07-16 13:21:31
25.DMA控制器
25.1概述
DMA控制器(DMAC)是一个中央AHB的DMA控制核心,它通过1个或多个AMBA总线从一个外设设备源到一个外设设备目的地传输数据。每个通道都需要一个源地址和一个目的地址。在大多数基本配置里面,DMAC有一个主接口和一个通道,主接口可以从源地址读取数据,也可以发送数据到目的地址。每次DMA数据传输都需要2次AMBA传输,这也就是所谓的双接入传输。
DMAC是通过AHB从接口来编程设置的。
25.2框图
略
25.3 功能描述
25.3.1 基本定义
Source peripheral(外设设备源):一个在AMBA层的设备,DMAC可以在这里读取到数据,然后在把数据保存到通道的fifo。外设设备源和外设设备目的地就组合形成一个通道。
Destination peripheral(外设设备目的地):DMAC把先前存储在fifo的数据取出来,然后发送的目的设备。
Memory:源或者目的地始终为DMA传输做准备,并且不需要与DMAC进行握手互动。一个外设只有在不需要插入16个等待状态的情况下才能被分配为memory。如果需要大于16个等待状态,这个外设在准备发送或接收数据时必须使用握手接口。
Channel:在一个配置好了的AMBA层与一个目的外设或一个不同的AMBA层,通过channel fifo来读写数据的channel(通道)。如果外设源不是memory,则一个源握手接口会被分配到这个通道。如果目的地不是memory,则一个外设目的地的握手接口会被分配到这个通道。源和目的地握手接口可以通过编程channel 寄存器来动态分配。
Master interface:主接口。DMAC用来控制AHB总线从源读取数据或者发送数据到目的地。
Slave interface:从接口。AHB接口的DMAC被编程。从接口实际使用时可以是和主接口同一个层,也可以是不同层。
Handshaking interface:握手接口。一个信号寄存器,用来在DMAC和源或者目的外设握手的协议,可以处理传输过程中的单个或者突发事件。这个接口被用于请求、识别和控制DMAC传输。一个通道能够接口这3种类型的握手接口:硬件流,软件流或外设中断。
Hardware handshaking interface:使用硬件信号来控制传输过程中的单个或突发事件。
: 使用软件寄存器来控制传输过程中的单个或突发事件。在IO外设中不需要特殊的DMAC握手信号。Software handshaking interface模式在一个已存在的与DMAC外设进行交互并且不需要更改它中是很有用处的。
Peripheral interrupt handshaking interface:一个简单的硬件握手接口应用。这种模式下,外设的中断线与dma_req连接。其他的信号接口可以忽略。
Flow controller:流控制器。如果在建立通道之前就知道块长度,DMAC应该被设置为流控制器,否则应该停止这次块传输,该模式下外设为流控制器。
Flow control mode(DMAC_cfgX.fcmode):流控模式。这种模式只应用于外设是流控制器的情况,它控制从外设源预先取出数据。
Transfer hierarchy:传输层次。主要是DMAC Transfer Hierarchy for Non-Memory Peripheral与DMAC Transfer Hierarchy for Memory
Block:A block of DMAC data.数据量(块长度)由流控制器决定,DMAC与内存之间传输时,一块会被直接分割成AMBA bursts和AMBA single 传输单元。DMAC与非内存外设传输时,1块会先被分割成DMAC(single 和bursts)传输单元,然后这些再被分割成AMBA 传输单元。
Transaction:DMAC传输的基本单元,由硬件握手协议接口或者软件握手协议接口决定。1个传输单元仅仅在DMAC与非内存设备传输时有意义。这里有2种类型的传输单元:
---Single :长度总是1并且会被转化为一个单独的AMBA传输
---Burst transaction:长度被设置进入DMAC,the burst transaction 会转化成AMBA bursts 和AMBA single transfers.DMAC通过增加bursts个数直到AMBA burst 设置的最大值,来执行每个AMBA burst transfer. Burst 单元长度是可以设置的,并且与DMAC与外设的fifo大小有关系。
DMA transfer:在DMAC传输的块的个数的软件控制。如果DMA传输已经完成,然后硬件会关闭通道并产生一个中断来标记DMA传输的完成。然后你就可以重新设置通道进入下一个新的DMA传输了。
Single-block DMA transfer:连续的单独块
:一个DMA传输可能会由多个复合DMAC块构成。Multi-block DMA transfers通过block chaining(块链接)(链表指针),自动重装的通道寄存器,和连续块来支持,源和目的地能够独立选择哪种方法被使用。
--- Linked lists (block chaining)---一个链表指针(LLP)指向系统内存中下一个存在的链表项目(LLI)。LLI是用来描述下一块(块描述符)和一个LLP寄存器的寄存器集。当块链接允许后,DMAC在每个块的开始取出LLI。
--- Auto-reloading---当通道最先被允许时,DMAC会在每块结束时自动加载通道寄存器的值。
--- Contiguous blocks---凡连续的块地址之间选择是一个块延续先前结束的。
Scatter:拆包。