第12章 直接存储器访问(DMA)模块

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第十二讲直接存储器访问(DMA)模块1、DMA模块概述2、F28335的DMA模块3、DMA模块的寄存器4、DMA模块应用DMA模块概述数字信号控制器的优势不能纯粹以处理器的速度来衡量,而是以整个系统的能力来衡量。数字信号控制器处理的许多应用操作都要用大量的带宽来移动数据,如从片外存储器到片内存储器,从一个外设(例如一个模数转换器)到RAM,从一个外设到另一个外设之间。例如当控制器读写AD采集的数据时或者读写外部扩展存储器内容时,内存与外设间会存在着大量的数据交换,而且这种交换是经常性的。对于这样的数据交换,若采用中断方式响应,每传送一次数据,就要经历中断处理的全部步骤,CPU就会不断的进行中断的相关操作,如将工作现场寄存器压入堆栈,中断结束时,恢复现场,CPU频繁的进行工作现场的切换,非常不专注,效率非常低。有没有一种专用通道,专用的控制器来负责这类经常性的操作,而将CPU资源释放出来呢?直接存储访问DMA(DirectMemoryAccess)模块就是用硬件实现存储器与存储器之间、存储器与I/O设备之间直接进行高速数据传送,不需要CPU的干预,减少了中间环节,而且存储器地址的修改和传送均由硬件自动完成,所以极大地提高了批量数据的传送速度。实现DMA传送的关键部件是DMA控制器(DMAC)。系统总线分别受到CPU和DMAC这两个部件的控制,即CPU可以向地址总线、数据总线和控制总线发送信息(非DMA方式),DMAC也可以向地址总线、数据总线和控制总线发送信息(DMA方式)。DMA模块概述但在同一时刻,系统总线只能接受一个部件的控制。究竟哪个部件来控制系统总线,是通过这两个部件之间的“联络信号”控制实现的。DMA取得总线控制权前处于受控状态,此时,CPU可对DMAC进行初始化编程,也可从DMAC中读出状态,这时DMA处于从态,DMAC上电或复位时,DMAC自动处于从态。在DMAC获得总线控制权之后,DMAC取代CPU而成为系统总线的主控者,接管和控制系统总线。通过总线向存储器或I/O设备发出地址、读/写信号,以控制在两个实体之间的数据传送。这时候DMA处于主动态。DMA系统组成框图如图12.1所示。地址总线HRQDREQDMACHLDADACK总线请求总线响应HOLDHLDACPUDMA请求DMA响应I/O设备控制总线数据总线F28335的DMA模块F28335的DMA模块主要结构如图12.2所示,DMA数据传输是基于事件触发的,这就意味着DMA需要外设中断触发来启动DMA的数据传输。F28335共有18个不同的触发源,图中右边所示即为触发源,外设触发源见表12.1所示。其中有8个外部中断触发源,全部引自GPIO引脚,这样DMA的事件触发是很灵活的。DMA不能通过自身数据源定时触发,若要定时触发可以借助于外设中断触发源中CPU定时器来实现。F28335共有6个DMA通道,每个通道都可以有各自的触发源,通过各自独立的PIE中断告知CPUDMA数据传输的开始与结束,这6个通道中,第一通道有着更高的优先级。DMA模块的核心其实是一个与地址控制逻辑紧密关联的状态机,在数据传输过程中让数据块自动的重新配置,就好像是两个缓冲器之间在打乒乓球一样,我们把这种机制也叫做DMA的乒乓机制。DMA总线结构包括一个22位地址总线,一个32位数据读总线,和一个32位数据写总线,与DMA总线相连的资源,好比乒乓球运动员,分别数据传送的地址源与数据源,地址源与数据源的接口通过总线互相相连,这个接口DMA可能会访问,CPU也会访问。与DMA总线相连的资源如图中左边所示1、XINTF区域0、6、7;L4SARAM、L5SARAM、L6SARAM、L7SARAM2、ADC存储器映射结果寄存器3、MCBSP-A和MCBSP-B数据接收寄存器(DDR2/DDR1)和数据发送寄存器(DXR2/DXR1)4、映射到外设3的ePWM1-6/HRPWM1-6寄存器。F28335的DMA模块外设中断触发源CPUDMA软件位(CHx.CONTROL.PERINIFRC)ADC排序器1中断排序器2中断外部中断外部中断1-7、外部中断13CPU定时器CPU定时器0、1、2溢出McBSP-A、McBSP-B发送缓冲器空、接收缓冲器满Epwm1-6ADC启动信号F28335的DMA模块F28335的DMA的基本特性如下:(1)6个DMA通道,6个通道都具有独立的PIE中断(2)外设中断触发源DMA模块是基于事件触发的,因此要求一个外设触发器启动DMA数据的传递。例如它能通过将一个定时器配置成中断触发源,从而变成一个周期性的定时驱动器,中断触发源可以为6个DMA通道分别单独配制。F28335的外设中断触发源如下:——ADC排序器1和排序器2——多路缓冲串行端口A和B(McBSP-A,McBSP-B)的发送和接收;——XINT1-7和XINT13;——CPU计时器——ePWM1-6ADCSOCA和ADSOCB信号——软件(3)数据源/目的地DMA传递数据的来源或者传输的目的地,主要如下:——L4~L716K*16SARAM——所有XINTF区域(外扩的存储器)——ADC的结果寄存器——McBSP-A和McBSP-B发送和接收缓冲器——ePWM1-6/HRPWM1-6外设第3帧映射寄存器ePWM/HRPWM寄存器被DMA访问之前必须被重新映射到PF3(通过MAPCNF寄存器的0位设置)。(4)字长:DMA传输数据的字长为:——字的大小:16位或32位(McBSPs只限于16位)——读写操作:4周期/字(对于McBSP5周期/字进行读取)。F28335的DMA模块F28335的DMA模块的触发机制外设中断触发DMA数据传送的原理如图12.3所示。F28335的DMA每个通道都可以选择各自独立的触发源,触发源有18个,包括与GPIO引脚连接的8个外部中断触发源,这样的触发源的选择是很灵活的。在外设中断触发的时候,首先通过各自通道的模式寄存器(MODE.CHX)的外设中断触发源选择位(MODE.CHX(PERINTSEL))来选择触发源,有效的中断触发发生后,控制寄存器的外设中断触发标志位(PERINTFLG)会被置位,如果相应DMA通道的模式寄存器中的外设中断允许位(MODE.CHX.[PERINTE])是使能的,并且控制寄存器中运行状态位(CONTROL.CHx[RUNSTS])是允许的,该DMA通道就能响应数据传输服务了。在接收完一个外设中断触发信号后,DMA会自动地发一个清除信号给中断源,这样后续的中断事件会接着响应。F28335的DMA模块软件触发的时候可以不管通道模式寄存器中触发源的选择,可以通过控制寄存器中的外设中断强制位CONTROL.CHx[PERINTFRC]的置位来强制触发,同样,可以通过控制寄存器中的外设中断清除位CONTROL.CHx[PERINTCLR]位来清除挂起的DMA触发。一旦一个特定的中断触发置位了控制寄存器中的中断触发标志位PERINTFLG,该位一直保持置位(挂起)状态,直到状态机的优先级逻辑允许该通道进行数据传输,数据传输开始,标志位就被清零。数据正在传输过程中,而一个新的中断触发产生了,在正常的优先级别下,数据传输完成后才会去响应新的中断触发。如果那个新的中断触发还处在挂起状态,即未被执行,又来了一个新的中断触发,即第三个中断触发,这时候控制寄存器中的溢出标志位CONTROL.CHx[OVRFLG]会被置位以示错误。如果一个外设中断触发发生了,而与此同时标志位正在清除中,外设中断触发有一定优先权,外设中断标志位还是会被置位。F28335的DMA模块F28335的DMA模块的流水线机制DMA进行数据传输的时候采用了4级流水线,将数据传输主要分成了如下工序:产生数据源地址,输出数据源地址,读数据源数据,产生目的源地址,输出目的源地址,写目的源数据。如图12.4所示。有个例外的是,当将McBSP作为数据源时,读取McBSPDDR寄存器的值的时候,会拖延DMA一个时钟周期。如图12.5所示。F28335的DMA模块此外还有一些其它操作也会影响到DMA通道的吞吐1、在每次数据传输之前要增加一个周期的延迟。2、当从CH1高优先级中断返回时也会周期延迟。3、32位传输速度是16位传输速度的两倍,传输1个32位的字与传输1个16位的字所花的时间是一样的。4、与CPU的冲突可能增加延迟时间。例:从ADC到RAM传递128个16位的字,通道被配置成1波传递16个字,每个字要花4个时钟周期,8波能传完,总需时钟周期520个时钟周期8bursts*[(4cycles/word*16words/burst)+1]=520cycles如果通道被配置成传递32位的字,传递过程为8bursts*[(4cycles/word*8words/burst)+1]=264cycles,总需要时钟周期264个,所花时间差不多减半。也就是对DMA传输而言,采用32位数据线传输,若以16位为字进行传输,即一半吞吐量浪费了。F28335的DMA模块F28335的DMA模块的CPU仲裁机制通常情况下,DMA的运行是独立于CPU运行的。但是有时候DMA与CPU会同时通过同一个接口访问存储器或外设寄存器,这时候就需要进入CPU仲裁程序。例外的是,ADC寄存器(内存映射PF0)被CPU与DMA同时访问的时候不会有冲突,即使是访问不同的地址。访问任何一个不同的接口或者CPU要通过一个DMA正在访问的接口,即访问同一接口的时间是不同时的,都不会产生冲突。有可能产生冲突的内部接口如下:·XINTF存储区域0,6and7·L4RAM·L5RAM·L6RAM·L7RAM·外设帧3(McBSP-AandMcBSP-B)F28335的DMA模块1)访问外部存储器接口:a、如果CPU和DMA在同一周期内访问任何一个XINTF区域,DMA被响应,CPU的所有访问被挂起(CPU访问正常的优先权顺序是写-读-获取)。b、如果CPU访问一个XINTF的区域处于挂起状态或者正在被处理,此时DMA正试图访问该区域,DMA访问会被搁置,直到挂起的CPU访问完成为止。例如一个CPU的读或写的访问在挂起状态,CPU的获取访问在被执行中,首先是完成这个获取访问,然后是CPU的写,接着CPU的读,最后才DMA访问。c、如果CPU与DMA同时试图进行写操作,则延时一个时钟周期。如果DMA或者CPU写XINTF区域,那么XINTF的缓冲器有助于CPU或者DMA避免延迟。如果DMA或CPU读XINTF区域,那么会有明显的延迟。这里要注意的是,如果DMA被延迟,DMA可能会错过高优先权的DMA事件,如在产生高速率数据的ADC模块里的DMA传输。在这种情况下,就不能采用DMA来传输XINTF里的数据,DMA延迟时间太长,会丢失关键的DMA事件。DMA不支持半途中止XINTF的读操作。如果DMA正在访问XINTF的一个区域并且DMA访问被延迟了,CPU会发一个硬件重启HARDRESET指令来中止DMA的访问,HARDRESTE就像是DMA的系统重启命令,因此,HARDRESET会被应用XINTF上,以从外设崩溃的状态中恢复过来,XINTF与DMA中的写缓冲器的数据与被挂起的数据信息全部会丢失。(2)其他外设/存储器a、CPU与DMA同一周期内访问相同接口,DMA优先,CPU被延迟。b、CPU正在访问,另一个CPU对同一接口的访问在挂起状态,如CPU正在进行写处理,一个读访问在挂起状态,CPU写操作完以后,DMA访问先于读访问执行。对于同一个接口,对于挂起的CPU访问而言,DMA访问有更高优先权。如果CPU正在进行读-修改-写操作,DMA在相同位置上执行一个写操作,该操作正好发生在CPU读操作和写操作之间,则DMA的写操作可能会丢失,因此建议不要把CPU和DMA混在一起访问同一接口。F28335的DMA模块F28335的DMA模块的通道优先级机制通道优先级确定时有两个方案:ROUND-ROBIN模式和通道1高优先级模式。1、ROUND-ro

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功