一种实现高效DMA传输的DMA控制器及传输方法技术

技术编号:2837777 阅读:193 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种实现高效直接内存访问DMA传输的DMA控制器及传输方法;所述DMA控制器包括DMA控制模块,用于控制外设和内存间的DMA传输;所述DMA控制模块当外设与DMA控制器间传输的字节数达到外设缓存空间大小时,给外设完成本次外设与DMA控制器间的DMA传输请求的信号;当DMA控制器与内存间传输的字节数达到内存缓存空间大小时,向CPU发出通道完成传输中断请求。采用了本发明专利技术的技术方案后,可以在一次DMA传输中完成多次外设与DMA控制器间的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)本文档来自技高网
...

【技术保护点】
一种实现高效直接内存访问DMA传输的DMA控制器,包括DMA控制模块,用于控制外设和内存间的DMA传输;其特征在于:所述DMA控制模块当外设与DMA控制器间传输的字节数达到外设缓存空间大小时,给外设完成本次外设与DMA控制器间的DMA传输请求的信号;当DMA控制器与内存间传输的字节数达到内存缓存空间大小时,向CPU发出通道完成传输中断请求。

【技术特征摘要】
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控制模块在进行非标准通道和...

【专利技术属性】
技术研发人员:邹杨
申请(专利权)人:北京中星微电子有限公司
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1