本节主要介绍C6000系列的直接存储器访问(DMA,Direct Memory Access)控制器其中介绍硬件特点、DMA通道与寄存器。
5.1 DMA硬件介绍
DMA控制器最大的特点是可以在没有CPU参与的情况下完成映射存储空间中的数据搬移。这些数据搬移可以是在片内存储器、片内外设或是外部器件之间,而且是在CPU后台进行的。DMA控制器具有4个相互独立编程的传输通道,允许进行4个不同内容的DMA传输。另外,还有一个辅助通道用来服务于主机口接口读写访问。
在讨论DMA操作时,需要了解C6000的DMA传输中的几个概念:
(1)数据的读传输(read transfer):DMA控制器从源地址存储器中读取数据。
(2)数据的写传输(write transfer):DMA控制器将读取的数据写入目标地址存储器中。
(3)数据单元传输(element transfer):一个数据单元的读传输和写传输的结合。
(4)帧传输( transfer):帧的大小可编程设置。完成一个帧传输即传输一定数量的数据单元。
(5)块传输(block transfer):每个DMlA通道也可以独立定义每块中帧的数量。完成一个块传输即传输一定数量的帧。
(6).发送数据单元的传输(transmit element transfer):在通道分割模式下,数据单元从源 地址中读出并写入分割目的地址。
(7)接受数据单元的传输(receive element transfer):在通道分割模式下,数据单元从分割源地址中读出并写入目的地址。
DMA控制器有如下主要特点:
(1)后台操作:DMA控制器可以独立于CPU工作。
(2)高吞吐率:可以以CPU时钟的速度进行数据传输。
(3)4个通道:DMA摔制器可以控制4个独立通道的传输。
(4)辅助通道:主机口用辅助通道来访问CPU的存储空间。辅助通道与其他通道间的优先级可以设置。
(5)单通道分割(split-channel)操作:利用单个通道就可以与一个外设间同时进行数据的读和写传输,效果就好像使用两个DMA通道一样。
(6)多帧()传输:传送的每个数据块可以含有多个数据帧。
(7)优先级可编程:每一个通道对于CPU的优先级是可编程确定的。
(8)地址产生方式可编程:每个通道的源地址寄存器和目标地址寄存器对于每次读写都是可配置索引的。地址可以是常量、递增、递减,或是设定地址索引值。
(9)32位地址范围:DMA控制器可以对仟何一个地址映射区域进行访问,包括:
·片内数据存储区
·片内程序存储区(当其作为映射存储器时,而不是作为cache使用)
·片内的集成外设
·通过EMIF接口的外部存储器
·通过扩展总线接口的扩展存储器
(10)传送数据的字长可编程:每个通道都可以独立选择宽度为字节、半字(16位)或字(32位)。
(11)自动初始化:每传送完一块数据,DMA通道会自动为下一个数据块的传送重新初始化。
(12)事件同步:读、写和帧操作都町以由指定的事件触发。
(13)中断反馈:当一帧或一块数据传送完牛,或是出现错误情况时,每一个通道都可以向CPU发出中断请求。
DMA控制器在C6000中的位置如图4-32所示的阴影部分。
5.2 DMA控制器设计及应用
1.DMA寄存器、初始化和启动
DMA寄存器用于初始化和控制DMA操作。每一个DMA通道都有一套相关的寄存器完成传输控制,在启动DMA之前,必须刘它们进行初始化。表4-14列出了有关的控制寄存器及其在映射存储器中的位置。限于篇幅,这里没有列出寄存器各个控制位的意义。读者可以参考TI的相关文档。
每一个DMA通道启动可以在程序中由CPU完成,也可以是通过自动初始化肩动。每一个DMA通道都可以山CPU控制独立启动、暂停和停止。DMA通道丰控寄存器(PRICTL)的STATIS域指示相应DMA通道的当前状态。只有在STATUS位和START位相同时,才可以修改主控寄存器。启动操作如下所示:
·手工启动:向DMA主控制寄存器(PRICTL)的START域写入01b将直即启动该通 道的DMA。一旦启动,STATUS的值会变成01b。注意一旦启动,再写入01b将不会有任何影响。
·暂停操作:在启动后,向START写10b可以暂停DMA。暂停时,如果某个数据单元传输的读传输过程已经完成,此时DMA通道会继续完成其对应的写传输。STATUS在DMA完成当前写传送后变为10b。
·停止操作:启动后写入START=00b,DMA控制器将被停止。停止操作和暂停操作相 同。除非是工作在自动初始化模式下,否则一旦DMA完成数据传输,该通道使进入停止状态,STATUS的值变为00b。
在一次块传送任务完成后,DMA控制器可以自动初始化。向主控制寄存器的START写入11b将以自动初始化方式启动DMA。在一次块传送任务完成后,DMA控制器自动调用DMA全局数据寄存器值预先为下一次数据块的传送操作初始化,因此DMA通道参数设置可以在下一次传送操作之前完成。自动初始化可以使DMA进行以下几种操作方式:
·连续操作:该方式占用一定CPU时间。通常,CPU必须在一次读写传送完成之后立 即重新初始化DMA。利用重载寄存器,就可以在当前块传输中的任何时间为下一次传送初始化参数。
·重复操作:连续操作的一个特例。传送完一块后,DMA控制器将重复前一次相同的 块传输。这种情况下,CPU不需要反复设置重载寄存器,只需在开始传输之前设定重载寄存器的值。
·使能自动初始化:只需通道主控制寄存器的START=11b,就可以使能自动初始化。 传送完一块后,DMA控制器将重载寄存器,重复前一次相同的块传输。如果在暂停后重新启动,START必须被重新设置为11b,以使自动初始化使能。
在从自动初始化到非自动初始化操作中,首先需要暂停DMA摔制器,即写入10b,然后再次启动DMA控制器,即写入01b。
2.传输计数
DMA的通道传输计数寄存器(XFRCNT)包含两个域,分别表示当前传输的帧计数和每帧的数据单元计数,如图4-33所示。DMA的全局计数重装载寄存器结构与传输计数寄存器的结构相同,如图4-34所示。
· COUNT:此域的16位无符号数指示当前块传输中的帧数,每块的最大帧数 为65535。当一帧内的最后一个读传输完成后,该计数值递减。一旦最后一帧传送完后,整个计数器会被DMA通道主控寄存器的CNT RELOAD域所指定的DMA全局计数重载寄存器内的高16位值重载。COUNT设置为0的效果和设置为1一样。
·ELEMENT COUNT:此域内的16位无符号数指示每帧传输的数据单元个数。每次数 据单元的读传输完成后,该值递减。每帧的最大数据单元数目为65535。最后一个数据单元完成传输后,ELBMENT会被DMA通道主控寄存器的CNT RELOAD域所选定的DMA全局计数重载寄存器内的低16位值重载。在块传输开始前,计数器以及对应的全局计数重载寄存器低16位必须设置相同的值,以保证每次的帧长度相同。 除了在自动初始化模式下需要这种重载以外,对于多帧数据传送,也需要数据单元计 数的重加载,必须设定重载值。如果数据单元计数初始值为零,则操作无效。
3.传输控制:同步与地址产生
同步机制使得用户可以利用某些事什来触发DMA的传输过程,例如外设中断或外部引脚中断。每一个通道有三种类型的同步方式:
读同步:由指定的事件触发读传输。
写同步:由指定的事件触发写传输。
帧同步:由指定的事件触发帧传输。
由DMA通道主控寄存器的RSYNC和WSYNC两个域控制DMA的同步事件。如果这个寄存器内的FS=1,那么整个帧的同步事件是RSYNC选定的事件,这时WSYNC必须设置为00000b。如果该通道设置为分裂模式(SPLIT不等于OOb),那么RSYNC和WSYNC必须设为非零值。表4-15列出了两个域和同步事件的对应关系。
DMA通道副控寄存器中的STAT和CLR位与同步事件的控制有关。
当指定事件的有关信号发生由低变高(或由高变低)变化时,各个通道会锁定事件,同时相应的STAT位被置位。如果没有选择同步事件,读SFAT位总是1。单个事件可以用来触发多个动作。
通过清除悬挂事件可以强制DMA通道等待下一个事件。相反,设置事件可以触发块传输。在触发事件的相关操作完成后,锁定事件的STAT位标志会被自动清除,也可以通过手动清除。用户可以分别向STAT和CLR写入1,手工设置事件或是清除事件。对STAT和CLR位写入0足无效的。手工清除与设置的优先级总是高于任何自动的清除与设置。
DMA控制器负责对每个通道的读写传输进行地址计算。利用不同的地址产生方式,DMA控制器可以支持多种结构数据的传输。例如,DMA控制器可以对矩阵数据进行转置操作。
DMA通道的源地址寄存器和目的地址寄存器都是32位,分别存放下次读传输和写传输的操作地址。如图4-35和图4-36所示。
在计算传输地址时,有基本调整和使用全局索引值调整两种计算方式。基本调整是指通
过控制域SRC DIR和DST DIR来设置传输地址按数据字长大小递增、递减、保持不变。
全局索引寄存器如图4-37所示。与基本调整不同,这种模式是根据传输的数据元素是否是当前帧的最后一个来进行不同的地址调整。全局索引寄存器的LSBl6(ELEMENTINDEX)中存放普通调整值,MSBl6( INDEX)中存放帧尾调整值,两个索引值都是16位有符号数,范围从32768~32767。每帧中数据除最后一个数据传输之外都按ELEMENT INDEX值规定地址寄存器的增量,对于最后一个数据传输,按照 INDEX值调整地址寄存器的值。
4.单一通道的分裂操作
利用通道分裂操作方式可以使一个DMA通道为一个具有固定地址的外部或是内部外设同时提供输入和输出数据流。
分裂通道操作分为发送数据单元的传输和接收数据单元的传输,每种传输都依次执行一
次读传输和一次写传输:
·发送数据单元的传输
■发送读传输:数据从DMA通道的源地址读出,然后源地址按照设置参数进行调 整,传送计数减1。没有同步事件。
■发送写传输:由发送读传输得到的数据被写入分裂目标地址。此过程有WSYNC 域所指定的同步事件。
■接收数据单元的传输
■接收读传输:数据从DMA通道的分裂源地址读出。此过程有RSYNC域所指定的事件同步。
■接收写传输:由接收读传输得到的数据被写入目标地址,然后目标地址按照设置 调整。没有同步事件。
由于每个通道只有一个数据单元传输和帧传输计数器,因此接收与发送的帧数以及每帧的数据单元个数必须是相同的。为了使分裂通道正常工作,RSYNC和WSYNC控制域必须配置为非零值,同时禁止帧同步方式。
所有传输都按照以上次序进行。但是在以上的过程中,发送数据单元传输并不需要等前一次的接收数据单元传输完成之后才能进行。因此发送数据有可能会发生在接收数据之前。整个相关的发送数据单元传输完成后,源地址寄存器会被递减或者重新初始化。只要发送数据单元传输的次数不会超过接收数据单元传输的次数8次,DMA通道的硬件会继续运行,否则发送数据单元传输将被停止。
在DMA主控寄存器中SPLIT域选取相应的DMA全局地址寄存器作为分裂传输操作中的分裂地址:
·分裂源地址:即C6000的输入数据流的源地址,保存在选定的DMA全局地址寄存器 里。
·分裂目标地址:即C6000的输出数据流目的地址,比分裂源地址大一个字(4个字节)。 两个地址的最低3位始终为0,强制按照字地址大小排列。从而确保分裂源地址在偶数字上,分裂目标地址是在奇数字上。 对于外部设备,用户在设计地址译码时一定要符合这个规定分裂操作要求。
5.资源仲裁和优先级设置
DMA控制器片内仲裁机构根据优先级确定哪个请求方将先获得资源的控制权。这些请求方包括:
(1)DMA通道。
(2)CPU的程序存取和数据存取。
公共资源包括:
(1)片内数据存储器。
(2)片内程序存储器。
(3)通过外设总线访问的片内外设寄存器。
(4)通过片内外部存储器接口(EMIF)访问的外部存储器。
(5)通过扩展总线访问的扩展存储器。
优先级的设置包括两个方面:
(1)DMA与CPU之间:每一个通道都可以独立配置为高优先级模式。主控寄存器的PRI位决定了每一个DMA通道与CPU访问之间的优先级,辅助控制寄存器中的AIJXPRI位决定了辅助通道和CPU之间的优先级。
(2)DMA通道之间的优先级:4个通道的优先级是固定的,通道0优先级最高,通道3优先级最低。辅助通道的优先级是可任意设置的。
6.DMA通道的状态
一些状态标志位提示着DMA的工作情况,这些标志存在于DMA通道副控寄存器中。副控寄存器中的一系列中断允许位(IE)控制的是DMA中断CPU的方式。如果某个状态对应的IE被使能,则相应的状态变化就会影响该通道的中断信号。当该通道的TCINT他设为1,所有的状态信号相或的结果就会产生DMA_INTx信号并被送往CPU,甭则DMA_INTx无效。它们的逻辑关系如图4-38所示。
副控寄存器中的SX COND,WDROPCOND和RDROPCOND是出错警告状态信号。不管TCINT的设置情况如何,如果条件被使能同时有效,会立即使DMA通道进入暂停状态。对以上位写入1是无效的。表4-16是DMA通道各个状态的定义,以及状态位的清除方式。
5.3 BIOS中DMA设置实例
在TMS320C6xTM系列器件里,有两个DMA结构,即DMA和EDMA(enhanced DMA)。C6201TM器件集成了DMA外设,而C6211TM集成了EDMA外设。两种DMA结构在结构上有很大的不同,所以BIOS为每一种结构分别提供了对应的独立API模块。
1.BlOS中DMA控制器API函数
同样:DMA模块基于句柄模式,完成对DSP器件DMA外设的控制,进行DMA操作。API模块包括结构定义、函数和宏。
DMA配置结构有两个,如表4-17所示。
2.用CSL UI配置DMA控制器
采用CSL GUI可以很方便地配置DMA控制器。DMA模块包括配置管理器、资源管理器和全局寄存器管理器,CSL图形用户接口DMA部分界面如图4-39所示。
DMA模块包括下面几个部分:
(1)DMA配置管理器:配置管理器允许创建一个初始化DMA通道寄存器的配置对象。
(2)DMA资源管理器:资源管理器指定DMA通道用哪一个配置对象配置。
(3)DMA全局寄存器管理器:全局寄存器管理器预先初始化全局寄存器。
利用DMA配置管理器可以很方便地创建一个配置对象,非常直观地设置DMA通道的相关寄存器。DMA配置管理器的属性选项卡如图4-40所示。
在属性选项卡中可以设置相关的存储器映射寄存器。配置操作可以分成以下几个部分。
·Operation Mode:工作模式。
·Source:源地址,增加和重载配置。
·Destination:目标地址,增加和重载配置。
·Synchronization:同步控制。
·Count/Index:选择全局寄存器和计数值。
·Intellaap Enable:中断控制。
·Condition:清除条件标志位。
DMA资源管理器把已设定好的DMA配置对象与某一DMA通道绑定,在属性选项卡中直接选择配置对象。如图4-41所示,选择已经创建的对象dmaCfg1初始化DMA通道,DMA通道的句柄是hDmaO。
对于每个DMA通道,全局寄存器是共享的。用资源管理器可以很方便地初始化全局寄存器。全局资源管理器属性选项卡如图4-42所示,设置好该项将会生成对应的DMA_globalAlloc()和DMA_globalConfig()CSL函数。