31 DMA控制器(SAM9G25[DATASHEET])

来源:互联网 发布:js创建tr 编辑:程序博客网 时间:2024/06/07 19:23

31.1 描述

DMA控制器(DMAC)是一个AHB-central DMA控制器核心,它通过一个或多个AMBA总线将一个源外设的数据传送到目的外设。每一个“源/目的”对都需要一路通道。在最基本的配置里,DMAC有一个主站接口和一个通道。主站接口从一个源读取数据并写到一个目标。每次DMAC的数据传输需要两个AMBA传输。这也被称为双通路传输。

通过APB接口对DMAC进行编程。

DMAC嵌入了8路通道。


31.2 嵌入式特性

》2个AHB-Lite主站接口

》DMA模块支持下列传输方案:外设-到-内存、内存-到-外设、外设-到-外设 和 内存-到-内存

》源和目标独立操作字节(8-bit)、半字(16-bit)和字(32-bit)

》支持硬件和软件发送传输

》支持多个缓存区链式操作

》源和目标独立支持 自递增/自递减/固定地址模式

》支持可编程的地址自递增/自递减在用户自定义边界条件下使能Picture-in-Picture模式

》可编程的仲裁策略,修改轮询和固定优先级可生效

》支持指定长度和不指定长度AMBA AHB突发访问以提高最大数据带宽

》AMBA APB接口用于编程DMA控制器

》8路DMA通道

》12个外部请求线

》嵌入FIFO

》通道锁定和总线锁定能力


31.2.1 DMA控制器0

》两个主站

》嵌入8路通道

》通道0有64字节FIFO,通道1-7有16字节FIFO

》产品特点

》链表支持状态写回操作在传输结束后

》字、半字、字节传输支持

》内存到内存传输

》外设到内存

》内存到外设

    DMA控制器能处理在外设和内存之间和传输,并且接收来自外设下面的触发。硬件接口号由表31-1提供。

   Table 31-1. DMA 通道定义

接口名称T/RDMA通道硬件接口号HSMCI0RX/TX0SPI0TX1SPI0RX2USART0TX3USART0RX4USART1TX5USART1RX6TWI0TX7TWI0RX8TWI2TX9TWI2RX10UART0TX11UART0RX12SSCTX13SSCRX14

31.2.2 DMA控制器2

》两个主站

》嵌入8个通道

》每个通道16字节FIFO

》特点

-链表支持状态写回操作在传输结束时

-支持字、半字、字节传输

-外设到内存

-内存到外设

DMA控制器能处理外设和内存间的传输并且接收来自外设的触发,如下列表,硬件接口号也给出了在Table 31-2。


Table 31-2  DMA通道定义

接口名称T/RDMA通道硬件接口号HSMCI1RX/TX0SPI1TX1SPI1RX2SMDTX3SMDRX4TWI1TX5TWI1RX6ADCRX7DBGUTX8DBGURX9UART1TX10UART1RX11USART2TX12USART2RX13USART3TX14USART3RX15
31.3 框图

图表31-1 DMA 控制器(DMAC)框图





31.4 功能描述

31.4.1 基本定义

源外设:在AMBA层上的设备,用于给DMAC读取数据,然后将其存储到FIFO通道。源外设与目的外设合作形成一个通道。

目的外设:由DMAC将来自FIFO的数据存储到的设备(在此前从源设备读到了数据)。

内存:对于 一个DMAC传输,源或目的始终是“准备就绪”的状态,并且不需要握手接口接口与DMAC交互。

可编程仲裁策略:通过全局配置寄存器(DMAC_GCFG)的ARB_CFG位,修改轮循和固定优先级可获得。固定优先级链接到通道号。最高DMAC通道号有最高优先级。

通道:在一个配置好的AMBA层的源外设,和一个相同或不同的AMBA层的目的外设之间,读/写数据的路径,它通过FIFO通道发起读写。

主站接口:DMAC是一个在AHB总线上的主站,在AHB总线上从源读取数据并写入目标。

从站接口:可以通过APB接口对DMAC进行编程。从站接口在实践中等同于同一层的任何一个主站接口或一个分开的层上。

握手接口:符合一个协议的一个信号寄存器集,并且让DMAC在源或目的外设之间握手,来控制它们之间一个单一的传输或分块传输。这个接口用来请求、确认、和控制一个DMAC事务。一个通道通过两种接口中的一种来进行接收和请求:硬件或软件 。

硬件握手接口:用硬件信号控制一个单一的传输或分块传输在DMAC与源和目的外设之间。

软件握手接口:使用软件寄存器控制一个单一的传输或分块传输在DMAC与源和目的外设之间。在外设上的IO没有需要特别的DMAC握手信号。这种模式是很有用的,对一个已经存在的外设接入到DMAC来说不用修改它。

流量控制器:设备(包括DMAC或源/目的外设)确定缓冲区长度,并且终止一个DMAC缓冲传输。如果一个缓冲区长度在允许通道前就已经知道,DMAC将被编程为流量控制器。如果一个缓冲区长度不知道,优先使能这个通道,源和目的外设需要确定一个缓冲区传输。在这种模式下,外设是流量控制器。

传输层次:图表31-2在458页演示DMAC传输器、缓冲区传输器、分块或单一、以及非存储器外设的AMBA传输器(单个或批量)之间的层次。图表31-3在458页展示内存的传输器层次。





Buffer(缓冲区):一个DMAC数据的缓冲区。数据的量(长度)由流量控制器确定。DMAC和内存的传输之间,一个缓冲区被直接分解成一个AMBA批量传输和AMBA单独传输序列。

DMAC和一个非存储器外设之间的传输,一个缓冲区被分解成一个DMAC事务序列(单个或者分块)。这些再被顺序分解成一个个AMBA传输序列。

Transaction(事务):一个DMAC传输基本单元,由硬件或软件握手接口确定。一个事务仅与相应的DMAC和源或目的外设之间的传输有关,如果这个源或目的外设是非内存设备。有两种类型的事务:单一传输和分块传输。

*Single Transfer单一传输:单一事务的长度始终是1并且被转换成一个单一的AMBA访问。

*分块传输:分块的长度是可通过DMAC编程的。分块再被转换成AHB访问的序列。DMAC通过执行增量连传来执行每一个AMBA批量传输,但不超过16次。

(DMAC Transfer)DMAC传输:软件控制缓存区数量在一个DMAC传输中。一旦DMAC传输完成,在DMAC内部硬件禁用通道,并且会生成一个DMAC传输完成的中断信号。接着你可以重新编程通道开始一个新的DMAC传输。

(Single-buffer DMAC transfer)单个缓存区DMAC传输:只包含一个单一的缓存区。

(Multi-buffer DMAC transfer)多缓存区DMAC传输:一个DMAC传输将包含多个DMAC缓存区。通过缓存区链表支持多缓存区DMAC(指针链表),自动重载入通道寄存器,并且连续处理缓存区。源和目的能独立的选择使用哪种方法。

*Linked List(buffer chaining) 链表(缓存区链接):一个指针描述符,(DSCR)指向系统中下一个链表项(LLI)存在的位置。LLI是一个寄存器集,描述了下一个缓存区(缓存区描述符)和一个指针描述符寄存器。DMAC取的LLI在每个缓存区开头,当缓存区链表使能时。

*(Replay)重播:DMAC自动重新加载通道寄存器的值在每个缓存区传输结束时,当通道首次启用时。

*(Contiguous buffers)连续缓存-前一个缓存结束时选定下一个缓存区地址用于继续

*(Picture-in-Picture Mode)画中画模式:DMAC有支持一个画中画模式。当这个模式启动时,通过一个可编程的值地址自动递增,当DMAC通道传输量达到一个用户定义的边界。

在459页图表31-4,展示一个存储器映射图像 4:2:2 编码位于存储器中 image_base_address位置。一个用户将起始地址定义在 Picture_start_address位置。自增值设置为 memory_hole_size = image_width - picture_width,并且边界设置为 picture_width。


Channel locking(通道锁定):软件能编程一个通道,通过锁定主站总线接口仲裁,以保持AHB主站接口DMAC传输、缓冲或分块的持续时间。

Bug locking(总线锁定):软件能编程一个通道,通过置位HMASTLOCK,以维持AMBA总线控制DMAC传输、缓冲、或事务(单一或分块)的持续时间。通道锁定在总线锁定持续时间为最小单位时被置位。


31.4.2 内存外设

在458页图表31-3展示DMAC用在内存外设上的传输层次。DMAC没有使用到握手接口,因此该存储器外设永远不能做为流量控制器,一旦通道启用,传输立即进行而不用等待一个事务请求。为替代一个不具有事务层握手接口的方法是允许DMAC尝试AMBA传输给外设,一旦通道启用时。如果外设从站不能接收这些AMBA传输,它插入等待状态在总线上面,直到它准备好;

0 0
原创粉丝点击