一种实现高效dma传输的dma控制器及传输方法

文档序号:6608751阅读:273来源:国知局
专利名称:一种实现高效dma传输的dma控制器及传输方法
技术领域
本发明涉及DMA(Direct Memory Access Control,直接内存访问)传输,具体涉及一种实现高效DMA传输的DMA控制器及传输方法。
背景技术
在含有中央处理器(CPU)的系统中,为了提高内存和CPU使用效率,在大量内存数据有规律的操作时,通常采用直接内存访问(Direct MemoryAccess Control,DMA)的方式对数据进行操作。而DMA的操作是通过DMA控制器(DMA Controller,DMAC)来实现的。DMA控制器有选择型和多路型两类,本文中涉及的DMA控制器为选择型,即物理上连接有多个硬件,而逻辑上只允许一个硬件,即在某段时间内只能为一个硬件服务。
在现有技术中,外设发起的DMA传输通常是从外设的缓存中取数据放到总线上的存储器中;如图1所示,比如当有外设需要进行DMA传输时,当其缓存装满数据后,其通过DMA请求触发器向DMA控制器发起DMA传输请求。在此之前CPU已经将地址等控制信息配给DMA控制器内的地址寄存器中,当DMA控制器接到DMA传输请求时,其向CPU发起总线占用请求。CPU通常在执行完当前指令后将总线控制权交给DMA控制器。此时DMA控制器的控制、状态寄存器发生变化,表明已获得总线控制权,开始进行DMA传输。传输中用一个计数器对传输的数据量进行计数,当计数达到外设缓存空间大小时,DMA控制器向CPU归还总线控制权,完成本次DMA传输;即一次DMA传输只能完成一次外设的DMA传输请求。当外设再次需要进行DMA传输时,就再发起一次DMA传输。虽然内存中缓存空间相对而言较大,但每次还是只能传输相当于外设缓存空间大小的数据量,不能充分利用内存中缓存的空间。由于每次DMA传输的数据量受到外设缓存空间大小的限制,所以在传输大量数据时,往往需要发起多次DMA传输,而每次DMA传输都必须等待CPU将总线控制权交给DMA控制器,因此传输效率低。另外,每进行一次DMA传输,就会对内存进行一次访问。而内存的效率由被访问次数决定,访问得越频繁,内存效率越低,而系统效率又与内存效率直接相关,这样的工作方式在某种程度上降低了系统的工作效率。
另外,在现有的DMA传输中,如果外设比如UART(UniversalAsynchronous Receiver/Transmitter通用异步收发器)等仅有字节类型的缓存,则DMA控制器仅用总线的低8位进行传输,降低了总线的利用率,并且DMA传输效率也比较低。DMA控制器与外设间的数据传输如图2、3所示。

发明内容
针对上述不足,本发明要解决的技术问题是提供一种实现高效DMA传输的DMA控制器,能够提高每次DMA传输的数据量,提高传输效率。
所述实现高效DMA传输的DMA控制器包括DMA控制模块,用于控制外设和内存间的DMA传输;其特征在于所述DMA控制模块当外设与DMA控制器间传输的字节数达到外设缓存空间大小时,给外设完成本次外设与DMA控制器间的DMA传输请求的信号;当DMA控制器与内存间传输的字节数达到内存缓存空间大小时,向CPU发出通道完成传输中断请求。
进一步的,所述DMA控制器还包括外设缓存大小寄存器,用于存放外设的缓存空间大小的数值;内存缓存大小寄存器,用于存放内存中缓存空间大小的数值;第一计数器,用于在一次外设与DMA控制器间的DMA传输中对外设与DMA控制器间传输的字节数进行计数;第二计数器,用于在一次DMA传输中对DMA控制器与内存间传输的字节数进行计数;所述DMA控制模块通过判断第一计数器的计数值是否小于外设缓存大小寄存器中的数值,来判断外设与DMA控制器间传输的字节数是否达到外设缓存空间的大小;通过比较第二计数器的计数值是否小于内存缓存大小寄存器中的数值,来判断DMA控制器与内存间传输的字节数是否达到内存缓存空间的大小。
进一步的,所述DMA控制器还包括硬件请求使能状态寄存器,用于存放表示硬件请求使能状态的数值,包括表示“允许硬件请求”和“不允许硬件请求”的值;在需要硬件发起DMA传输时由CPU置为表示“允许硬件请求”的值;通道状态寄存器,用于存放表示通道状态的数值,包括表示“通道被占用”的值和表示“通道可用”的值;所述DMA控制模块用于控制外设和内存间的DMA传输;当所述硬件请求使能状态寄存器的数值表示“允许硬件请求”时,接收硬件的DMA传输请求,当其值表示“不允许硬件请求”时继续探询;并在DMA控制器与内存间传输的字节数达到内存缓存空间大小时,将所述硬件请求使能状态寄存器置为表示“不允许硬件请求”的值。
所述DMA控制模块还用于探询所述通道状态寄存器的值,如果其值表示“通道被占用”时继续探询,表示“通道可用”时进行DMA传输;并在开始DMA传输后,将所用传输通道的通道状态寄存器的值置为“通道被占用”;当该通道上的DMA传输完成或终止后,将通道状态寄存器的值置为表示“通道可用”的值。
进一步的,所述DMA控制器还包括多个通道;各通道每次传输的数据量对应于所连接的总线接口;将每次传输的数据量为32字节的通道称为标准通道;将每次传输的数据量不到32字节的通道称为非标准通道;各通道分别通过不同的总线接口连接在不同硬件上;所述DMA控制模块在进行非标准通道和标准通道之间的DMA传输时启动所述数据拼拆模块对在非标准通道进行DMA传输的数据在所述FIFO中进行拼接或拆分,使每次读、写操作的数据量分别与源、目的硬件的缓存类型一致;并且,当接收到数据拼拆模块的拼接完毕消息时,将FIFO中拼接好的数据发送给目的硬件;当接收到数据拼拆模块的拆分完毕消息时,从源硬件中读取数据放入FIFO;当接收到数据拼拆模块的可发送消息时,将FIFO中拆好的数据块发送给目的硬件;所述数据拼拆模块当源硬件的缓存类型比目的地址的小时,将从源硬件到达FIFO的数据进行拼接,当到达FIFO的数据量达到目的硬件的缓存类型大小时发给DMA控制模块拼接完毕消息;当源硬件的缓存类型比目的硬件的大时,所述数据拼拆模块从到达FIFO的数据里拆分出符合目的硬件缓存类型大小的数据块,每拆一次发给DMA控制模块一个可发送消息;当发送的数据量达到源硬件的缓存类型大小后发给DMA控制模块拆分完毕消息。
进一步的,所述DMA控制器还包括源地址变化方式寄存器,用于存放表示传输中源地址变化方式的数值;目的地址变化方式寄存器用于存放表示传输中目的地址变化方式的数值;第三计数器,用于存放DMA传输的源地址;第四计数器,用于存放DMA传输的目的地址;所述DMA控制模块用于根据源地址变化方式寄存器及目的地址变化方式寄存器的值来控制第三、第四计数器中的源/目的地址的数值递增、或递减、或不变;并按照第三计数器中的源地址和第四计数器中存放的目的地址进行DMA传输。
本发明要解决的又一技术问题是提供一种实现高效DMA传输的传输方法,所述方法包括(a)接收DMA传输请求;(b)进行DMA传输;并对外设与DMA控制器间传输的数据量、及DMA控制器和内存间传输的数据量分别进行计数;每传输完一块数据执行(c1);(c1)判断外设与DMA控制器间传输的数据量是否达到外设缓存大小,如果是则执行(c2),如果否则返回(b);(c2)判断DMA控制器和内存间传输的数据量是否达到内存中缓存大小,如果是则执行(d);如果否则返回(a);
(d)结束本次DMA传输。
进一步的,步骤(a)前还存在(a1)初始化通道;CPU通将外设和内存的缓存空间大小通知DMA控制器,并使能通道的硬件请求;所述步骤(d)还包括关闭通道的硬件请求使能。
进一步的,当源硬件的缓存类型与目的硬件的缓存类型不一致时,步骤(c)具体为进行DMA传输,对进行DMA传输的数据在所述FIFO中进行拼接和拆分;使每次读、写操作的数据量分别与源、目的硬件的缓存类型一致。
采用了本发明的技术方案后,每次DMA传输的数据量由内存中缓存空间大小决定,从而可以在一次DMA传输中完成多次外设与DMA控制器间的DMA传输,大大增加了每次DMA传输的数据量,传输效率显著提高;并且由于在传输时减少了访问内存的次数,内存的效率得以提高;另外,采用优化方案后,还可以进一步提升DMA传输的效率。


图1是现有技术中DMA控制器的工作原理示意图;图2是现有技术中,DMA控制器接收数据的示意图;图3是现有技术中,DMA控制器接收数据的示意图;图4是本发明实现高效DMA传输的传输方法的的具体实施流程图;图5是本发明的DMA控制器接收数据的示意图;图6是本发明的DMA控制器接收数据的示意图。
具体实施例方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
为了方便说明,首先解释一下文中出现的几个概念;在本文中
一次DMA传输是指从DMA控制器向CPU发起请求并获得总线控制权开始,到DMA控制器发出中断为止进行的传输;在一次DMA传输中,DMA控制器只需访问一次内存,所传输的数据量为内存中缓存空间的大小。
一次外设与DMA控制器间的DMA传输是指从外设与DMA控制器之间进行数据交换的传输过程,所传输的数据量为外设的缓存空间大小;内存中缓存空间的大小通常是外设缓存大小的整数倍;本发明里,一次DMA传输中可以包括多次外设与DMA控制器间的DMA传输。
本发明提供了一种实现高效DMA传输的DMA控制器,包括DMA控制模块、数据拼拆模块、FIFO(First In First Out先进先出寄存器)、寄存器组及计数器。
所述寄存器组包括外设缓存大小寄存器,用于存放外设的缓存空间大小的数值;内存缓存大小寄存器,用于存放内存中缓存空间大小的数值;硬件请求使能状态寄存器,用于存放表示硬件请求使能状态的数值;比如1表示允许硬件请求,其它数值表示不允许硬件请求;在需要硬件发起DMA传输时由CPU置为表示“允许硬件请求”的值;通道状态寄存器,用于存放表示通道状态的数值;比如1表示通道被占用,其它数值表示通道可用;源地址变化方式寄存器,用于存放表示传输中源地址变化方式的数值;比如1表示增加,2表示减少,其它数值表示不变;目的地址变化方式寄存器用于存放表示传输中目的地址变化方式的数值;比如1表示增加,2表示减少,其它数值表示不变;所述计数器包括第一计数器,用于在一次外设与DMA控制器间的DMA传输中对外设与DMA控制器间传输的字节数进行计数;第二计数器,用于在一次DMA传输中对DMA控制器与内存间传输的字节数进行计数;
第三计数器,用于存放DMA传输的源地址;第四计数器,用于存放DMA传输的目的地址。
所述DMA控制模块用于控制外设和内存间的DMA传输;当所述硬件请求使能状态寄存器的数值表示“允许硬件请求”时,接收硬件的DMA传输请求,当其值表示“不允许硬件请求”时继续探询;还用于探询所述通道状态寄存器的值,如果其值表示“通道被占用”时继续探询,表示“通道可用”时进行DMA传输。
所述DMA控制模块用于在进行DMA传输期间,控制所述第一、第二计数器进行计数;并通过判断第一计数器的计数值是否小于外设缓存大小寄存器中的数值,来判断外设与DMA控制器间传输的字节数是否达到外设缓存空间的大小,达到时给外设完成本次外设与DMA控制器间的DMA传输请求的信号;还用于通过比较第二计数器的计数值是否小于内存缓存大小寄存器中的数值,来判断DMA控制器与内存间传输的字节数是否达到内存缓存空间的大小,达到时向CPU发出通道完成传输中断请求,并将所述硬件请求使能状态寄存器的值配置为“不允许硬件请求的值”。当接收到内存的缓存数据处理完的信号时——即当内存又可以接收或发送数据时,CPU会将所述硬件请求使能状态寄存器的值配置为“允许硬件请求”的值;以继续进行外设与内存间的DMA传输。
所述DMA控制模块还用于在开始DMA传输后,将所用传输通道的通道状态寄存器的值置为“通道被占用”;当该通道上的DMA传输完成或终止后,将通道状态寄存器的值置为表示“通道可用”的值。
在进行DMA传输的过程中,对于地址的变化存在着多种需求。例如,当需要从一个FIFO中取数,存到一片内存中时,就需要源地址不变,而目的地址增加;当从内存中取数存到FIFO中时,则需要源地址增加,目的地址不变。
所述源地址变化方式寄存器和目的地址变化方式寄存器由CPU根据实际传输需要进行配置,比如需要将内存中的一个数覆盖到一片内存中时,则将源地址变化方式寄存器置为表示“不变”的值,将目的地址变化方式寄存器置为表示“增加”的值。
所述DMA控制模块还用于根据源地址变化方式寄存器及目的地址变化方式寄存器的值来判断源地址及目的地址的变化方式,并相应控制第三、第四计数器中表示源/目的地址的数值递增、或递减、或不变;并按照第三计数器中的源地址和第四计数器中存放的目的地址进行DMA传输;第三、第四计数器中的数值为初始的源/目的地址。
比如当从内存传输数据到一个FIFO时,目的地址固定;设置一个初始值为源地址的计数器;内存每次传输8字节的数据给FIFO,每传输一次就将计数器的值加上8,然后将该值作为新的源地址。
在本发明的DMA控制器中,不同的硬件根据自身缓存类型的大小与相应容量(或大小)的总线接口相连,而各通道根据所连接的总线接口容量的不同,每次传输的数据量不一样,有的每次能传输32字节,比如与用于和内存交换数据的总线接口相连的通道,称为标准通道;有的每次只能传输8个字节,比如与用于和UART(Universal Asynchronous Receiver/Transmitter通用异步收发器)交换数据的总线接口相连的通道,称为非标准通道。因此,不同硬件各自对应于不同的通道,或者说DMA控制器中各通道分别通过不同的总线接口连接在不同硬件上。
所述DMA控制模块在进行源硬件和目的硬件缓存类型不一致的DMA传输,比如非标准通道和标准通道之间的DMA传输时,启动所述数据拼拆模块对在非标准通道进行DMA传输的数据在所述FIFO中进行拼接或拆分,使每次读、写操作的数据量分别与源、目的硬件的缓存类型一致;并且,当接收到数据拼拆模块的拼接完毕消息时,将FIFO中拼接好的数据发送给目的硬件;当接收到数据拼拆模块的拆分完毕消息时,从源硬件中读取数据放入FIFO;当接收到数据拼拆模块的可发送消息时,将FIFO中拆好的数据块发送给目的硬件。
当目的硬件为内存时,说明源硬件的缓存类型比目的地址的小,此时所述数据拼拆模块将从源硬件到达FIFO的数据进行拼接,当到达FIFO的数据量达到目的硬件的缓存类型大小时发给DMA控制模块拼接完毕消息;当源硬件为内存时,说明源硬件的缓存类型比目的硬件的大,所述数据拼拆模块从到达FIFO的数据里拆分出符合目的硬件缓存类型大小的数据块,每拆一次发给DMA控制模块一个可发送消息;当发送的数据量达到源硬件的缓存类型大小后发给DMA控制模块拆分完毕消息。
所述数据拼拆模块还可以包括一个计数器,用于在拼接时对到达FIFO的数据量或FIFO接收数据的次数进行计数;在拆分时对从FIFO发送的数据量或FIFO发送数据的次数进行计数。
本发明还提供了一种实现高效DMA传输的方法,能够在一次DMA传输中完成多次外设与DMA控制器间的传输,如图4所示,所述方法包括(a1)初始化通道;CPU通过配置外设缓存大小寄存器将外设缓存空间大小通知DMA控制器,通过配置内存缓存大小寄存器将内存中缓存空间大小通知DMA控制器。
(a2)通过配置硬件请求使能状态寄存器使能通道的硬件请求;(a3)等待硬件的DMA传输请求;这里的DMA传输请求是外设或内存根据需求,比如当外设缓存装满数据后,再或者当预定的时间到达时,发起DMA传输请求。
(b)DMA控制模块通过硬件请求使能状态寄存器的值判断通道能否接受硬件请求,并通过通道状态寄存器的值查询通道是否可用;如果不能接受硬件请求或通道不可用——比如通道正在被其它硬件使用或上次传输未完成——则返回(b),即继续探询这两个寄存器的值;也就是说,当一个方向的传输未完成时,不能开始另一方向的传输;例如在进行外设向内存发送数据的DMA传输时,未完成前,即内存中缓存未满前,不能发起从内存中取数据的DMA传输。
如果可接受硬件请求并且通道可用,则此时DMA控制器就取得了总线控制权;将第一、第二计数器的值设置为0,将通道状态寄存器置为表示“通道被占用”的值,执行步骤(c)。
(c)开始进行DMA传输;
在传输的同时,第一计数器对外设与DMA控制器间传输的数据量以字节为单位进行计数,第二计数器对DMA控制器和内存间传输的数据量以字节为单位进行计数。
每传输完一块数据执行(d1),一块数据通常可设置为一字节、四字节、八字节和十六字节中的一种,缓存的空间大小均为“块”的整数倍。
(d1)判断第一计数器的计数是否达到外设缓存大小寄存器中的数值,如果是则DMA控制器发给外设完成本次外设与DMA控制器间的DMA传输的信号,将通道状态寄存器置为表示“通道可用”的值;将第一计数器设置为0后执行(d2);否则执行(c),即继续DMA传输。
(d2)判断第二计数器的计数是否达到内存缓存大小寄存器中的数值,如果是则执行(e),可以此时将第二计数器设置到0,也可以在开始新一次DMA传输时设置为0;否则返回(a3)。
(e)DMA控制器向CPU发出通道完成传输中断请求,告知已经完成此段内存数据的传输,即已填满内存的缓存,结束本次DMA传输;与此同时关闭此通道的硬件请求使能;直到CPU重新配置此通道为止。
由此可知,在DMA控制器取得一次总线控制权后,能够传输相当于内存缓存大小的数据量,传输效率大大提高,对内存的访问次数也由此降低。
通常情况下,内存缓存大小为硬件缓存大小的整数倍,所以在本发明中采用第一计数器计到后再判断第二计数器的方式来操作;假如实际应用中,出现了内存缓存大小不是硬件缓存大小的整数倍的情况,则每传完一块数据后就同时对第一计数器和第二计数器的数值都判断一次;而且这种情况下,应设定对第二计数器的判断及处理比对第一计数器有更高的优先等级。
当源硬件的缓存类型与目的硬件的缓存类型不一致时,步骤(c)具体为进行DMA传输,按照传输源硬件的缓存类型读取数据到FIFO中,在FIFO中进行拼接或拆分,使其与目的硬件的缓存类型一致后,将其传输到目的硬件。
这里可以是内存作为传输源硬件,外设作为目的硬件;也可以相反。
下面用一个例子来具体说明,比如UART(Universal AsynchronousReceiver/Transmitter通用异步收发器)之类的外设的缓存类型仅有字节类型,原先DMA控制器每次只能用总线中的低8位传输数据。而在本发明中,从外设取数据时,如图5所示,DMA控制器从外设缓存中以字节形式读取数据到FIFO中,每读取一次就计数一次,当计数达到4时,将FIFO中的数据以字的形式写入内存;而向外设发送数据时,如图6所示,DMA控制器从内存中以字的形式读取数据到FIFO中,然后从FIFO中以字节的形式将数据发送给硬件,每发送一次就计数一次,当计数达到4时,发送完毕。
上述为本发明的最优实施方式,其余与现有技术相同部分不再赘述。在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的变形,但这些相应的变形都应属于本发明。
权利要求
1.一种实现高效直接内存访问DMA传输的DMA控制器,包括DMA控制模块,用于控制外设和内存间的DMA传输;其特征在于所述DMA控制模块当外设与DMA控制器间传输的字节数达到外设缓存空间大小时,给外设完成本次外设与DMA控制器间的DMA传输请求的信号;当DMA控制器与内存间传输的字节数达到内存缓存空间大小时,向CPU发出通道完成传输中断请求。
2.如权利要求1所述的DMA控制器,其特征在于,还包括外设缓存大小寄存器,用于存放外设的缓存空间大小的数值;内存缓存大小寄存器,用于存放内存中缓存空间大小的数值;第一计数器,用于在一次外设与DMA控制器间的DMA传输中对外设与DMA控制器间传输的字节数进行计数;第二计数器,用于在一次DMA传输中对DMA控制器与内存间传输的字节数进行计数;所述DMA控制模块通过判断第一计数器的计数值是否小于外设缓存大小寄存器中的数值,来判断外设与DMA控制器间传输的字节数是否达到外设缓存空间的大小;通过比较第二计数器的计数值是否小于内存缓存大小寄存器中的数值,来判断DMA控制器与内存间传输的字节数是否达到内存缓存空间的大小。
3.如权利要求2所述的DMA控制器,其特征在于,还包括硬件请求使能状态寄存器,用于存放表示硬件请求使能状态的数值,包括表示“允许硬件请求”和“不允许硬件请求”的值;在需要硬件发起DMA传输时由CPU置为表示“允许硬件请求”的值;通道状态寄存器,用于存放表示通道状态的数值,包括表示“通道被占用”的值和表示“通道可用”的值;所述DMA控制模块用于控制外设和内存间的DMA传输;当所述硬件请求使能状态寄存器的数值表示“允许硬件请求”时,接收硬件的DMA传输请求,当其值表示“不允许硬件请求”时继续探询;并在DMA控制器与内存间传输的字节数达到内存缓存空间大小时,将所述硬件请求使能状态寄存器置为表示“不允许硬件请求”的值。所述DMA控制模块还用于探询所述通道状态寄存器的值,如果其值表示“通道被占用”时继续探询,表示“通道可用”时进行DMA传输;并在开始DMA传输后,将所用传输通道的通道状态寄存器的值置为“通道被占用”;当该通道上的DMA传输完成或终止后,将通道状态寄存器的值置为表示“通道可用”的值。
4.如权利要求2所述的DMA控制器,其特征在于还包括多个通道;各通道每次传输的数据量对应于所连接的总线接口;将每次传输的数据量为32字节的通道称为标准通道;将每次传输的数据量不到32字节的通道称为非标准通道;各通道分别通过不同的总线接口连接在不同硬件上;所述DMA控制模块在进行非标准通道和标准通道之间的DMA传输时启动所述数据拼拆模块对在非标准通道进行DMA传输的数据在所述FIFO中进行拼接或拆分,使每次读、写操作的数据量分别与源、目的硬件的缓存类型一致;并且,当接收到数据拼拆模块的拼接完毕消息时,将FIFO中拼接好的数据发送给目的硬件;当接收到数据拼拆模块的拆分完毕消息时,从源硬件中读取数据放入FIFO;当接收到数据拼拆模块的可发送消息时,将FIFO中拆好的数据块发送给目的硬件;所述数据拼拆模块当源硬件的缓存类型比目的地址的小时,将从源硬件到达FIFO的数据进行拼接,当到达FIFO的数据量达到目的硬件的缓存类型大小时发给DMA控制模块拼接完毕消息;当源硬件的缓存类型比目的硬件的大时,所述数据拼拆模块从到达FIF0的数据里拆分出符合目的硬件缓存类型大小的数据块,每拆一次发给DMA控制模块一个可发送消息;当发送的数据量达到源硬件的缓存类型大小后发给DMA控制模块拆分完毕消息。
5.如权利要求1所述的DMA控制器,其特征在于,还包括源地址变化方式寄存器,用于存放表示传输中源地址变化方式的数值;目的地址变化方式寄存器用于存放表示传输中目的地址变化方式的数值;第三计数器,用于存放DMA传输的源地址;第四计数器,用于存放DMA传输的目的地址;所述DMA控制模块用于根据源地址变化方式寄存器及目的地址变化方式寄存器的值来控制第三、第四计数器中的源/目的地址的数值递增、或递减、或不变;并按照第三计数器中的源地址和第四计数器中存放的目的地址进行DMA传输。
6.一种实现高效DMA传输的方法,所述方法包括(a)接收DMA传输请求;(b)进行DMA传输;并对外设与DMA控制器间传输的数据量、及DMA控制器和内存间传输的数据量分别进行计数;每传输完一块数据执行(c1);(c1)判断外设与DMA控制器间传输的数据量是否达到外设缓存大小,如果是则执行(c2),如果否则返回(b);(c2)判断DMA控制器和内存间传输的数据量是否达到内存中缓存大小,如果是则执行(d);如果否则返回(a);(d)结束本次DMA传输。
7.如权利要求6所述的方法,其特征在于,步骤(a)前还存在(a1)初始化通道;CPU通将外设和内存的缓存空间大小通知DMA控制器,并使能通道的硬件请求;所述步骤(d)还包括关闭通道的硬件请求使能。
8.如权利要求6所述的方法,其特征在于当源硬件的缓存类型与目的硬件的缓存类型不一致时,步骤(c)具体为进行DMA传输,对进行DMA传输的数据在所述FIFO中进行拼接和拆分;使每次读、写操作的数据量分别与源、目的硬件的缓存类型一致。
全文摘要
本发明公开了一种实现高效直接内存访问DMA传输的DMA控制器及传输方法;所述DMA控制器包括DMA控制模块,用于控制外设和内存间的DMA传输;所述DMA控制模块当外设与DMA控制器间传输的字节数达到外设缓存空间大小时,给外设完成本次外设与DMA控制器间的DMA传输请求的信号;当DMA控制器与内存间传输的字节数达到内存缓存空间大小时,向CPU发出通道完成传输中断请求。采用了本发明的技术方案后,可以在一次DMA传输中完成多次外设与DMA控制器间的DMA传输,大大增加了每次DMA传输的数据量,传输效率显著提高;并且由于在传输时减少了访问内存的次数,内存的效率得以提高。
文档编号G06F13/28GK101046786SQ20071009883
公开日2007年10月3日 申请日期2007年4月27日 优先权日2007年4月27日
发明者邹杨 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1