cpu内存控制器能否向控制器发送数据

如果需要将温度数据传送给控制中心电脑,可以通过哪些方式传送_百度知道CPU和外设之间的数据传送方式有哪几种_百度知道一种直接内存访问控制器及其实现内存批处理的方法
专利名称一种直接内存访问控制器及其实现内存批处理的方法
技术领域本发明涉及直接内存访问控制器(DMA控制器),尤其涉及一种直接内存访问控制器及其实现内存批处理的方法。
背景技术 在含有中央处理器(CPU)的系统中,为了提高内存和CPU使用效率,在大量内存数据有规律的操作时,通常采用直接内存访问(Direct MemoryAccess Control,DMA)的方式对数据进行操作。而DMA的操作是通过DMA控制器(DMA Controller,DMAC)来实现的。
当软件加载操作系统后,内存中真实的物理地址被虚拟物理地址所取代。当虚拟物理地址连续时,真实物理地址未必连续。在现有技术中,DMA控制器只能针对真实物理地址工作,如果需要传输内存中真实物理地址并不连续的数据,就必须由CPU发起多次DMA传输;DMA控制器每次只能传输一段真实物理地址连续的数据,然后就要通过CPU的控制再传输下一段数据;无法实现内存批处理功能。
针对上述不足,本发明提供了一种直接内存访问控制器及其实现内存批处理的方法,使内存中不连续的数据可以完全通过DMA控制器进行传输。
本发明采用的技术方案是一种直接内存访问DMA控制器,其特征在于,包括主控制模块、链表控制模块、总线控制模块和寄存器组;所述寄存器组用于存放链表的入口地址,以及内存批处理过程中的传输参数;
所述主控制模块用于在接收中央处理器开始内存批处理的指令后,向链表控制模块发送寻址指令;接收到链表控制模块的寻址完成信号后向总线控制模块发送开始传输指令;在当前链表对应的数据传输完后发给总线控制模块停止传输指令并发给链表控制模块寻址指令;接收链表控制模块的传输完成信号,结束本次内存批处理操作;所述链表控制模块用于接收所述主控制模块的寻址指令,根据所述寄存器组中保存的入口地址在内存中找到相应链表,读入该链表中的传输参数及下一链表的入口地址并用其更新所述寄存器组后,发给主控制模块寻址完成信号;当寄存器组中的入口地址为终止符时,发给主控制模块传输完成信号;所述总线控制模块接收所述主控制模块的开始传输指令,按照所述寄存器组中保存的传输参数进行DMA传输;并接收所述主控制模块的停止传输指令停止DMA传输。
进一步地,所述寄存器组包括源地址寄存器、目的地址寄存器、传输长度寄存器和入口地址寄存器;所述源地址寄存器用于存放本次传输内存数据的源地址;所述目的地址寄存器用于存放本次传输内存数据的目的地址;所述传输长度寄存器用于存放本次传输的数据的长度值;所述入口地址寄存器用于存放传输链表的入口地址;首链表的入口地址由中央处理器提供;所述链表控制模块读入链表中的传输控制信息数据后用该数据中本次传输的源地址、目的地址、传输长度和下一个链表的入口地址相应更新源地址寄存器、目的地址寄存器、传输长度寄存器及入口地址寄存器。
进一步地,所述的直接内存访问控制器还包括一个计数器,用于当进行DMA传输时对当前传输的数据量进行计数;所述主控制模块监视所述计数器的计数,当其达到所述传输长度寄存器的值时,认为已将当前链表对应的内存数据传输完。
进一步地,所述主控制模块接收中央处理器发送的终止内存批处理的指令后结束本次内存批处理操作。
进一步地,所述的直接内存访问控制器还包括传输类型寄存器、启动传输寄存器和终止传输寄存器;所述主控制模块根据所述启动传输寄存器和传输类型寄存器的值接收开始内存批处理的指令;根据所述终止传输寄存器的值接收终止内存批处理的指令。
本发明还提供了一种直接内存访问控制器实现内存批处理的方法,其特征在于,包括(a)中央处理器发起内存批处理操作,并提供首个链表的入口地址;直接内存访问控制器根据该入口地址找到首个链表;(b)直接内存访问控制器根据当前链表中的传输参数对该链表所对应的数据进行DMA传输,传输完后执行(c);(c)直接内存访问控制器判断是否已将需要内存批处理的数据都传输完,是则结束本次内存批处理操作;否则根据当前链表中的下一链表的入口地址找到下一个链表并返回(b)。
进一步地,步骤(b)中,直接内存访问控制器将当前链表中的传输控制信息数据读入,并用该数据中的本次传输的源地址、目的地址、传输长度和下一个链表的入口地址相应更新源地址寄存器、目的地址寄存器、传输长度寄存器及入口地址寄存器;DMA控制器根据所述源地址寄存器、目的地址寄存器及传输长度寄存器中存放的数值对当前链表所对应的内存数据进行DMA传输。
进一步地,中央处理器提供首个链表的入口地址的方法是将其存放在入口地址寄存器中;直接内存访问控制器根据所述入口地址寄存器中的入口地址找到相应链表;当所述入口地址寄存器中的值为终止符时,直接内存访问控制器认为已将需要内存批处理的数据都传输完,结束本次内存批处理操作。
进一步地,步骤(b)中,在进行DMA传输时,用计数器对当前传输的数据量进行计数,直接内存访问控制器监视计数器的计数,当其与所述传输长度寄存器中的数值相等时认为已将当前链表对应的数据传输完。
进一步地,内存批处理过程中,所述直接内存访问控制器随时根据CPU的终止指令终止本次内存批处理操作。
采用了本发明的方案后,可以使DMA控制器完全不用CPU的控制而自行解析内存数据并发起传输。而不再局限于针对真实物理地址工作,因此,本发明的方案能用DMA控制器实现内存中大量不连续数据的传输,即实现内存批处理操作。
图1是内存中链表结构及链表内容含义的示意图;图2是本发明的DMA控制器的结构示意图;图3是本发明的DMA控制器实现内存批处理的流程图。
具体实施例方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
首先介绍一下内存中链表的结构和作用,当需要传输数据时,CPU会在内存中建立若干个用于存放本次传输控制信息的链表,如图1所示,这里说的内存不仅包括传统意义上的系统内的存储器,也包括ROM/FLASH等断电不丢失数据的存储器——即非易失性存储器,内存中每段真实物理地址连续的待传输数据都与一个链表相对应,每个链表都存储着所对应的那段内存数据的传输控制信息数据。
如图1所示,每个链表里存储有4段各32位的传输控制信息数据,即4个字的数据,第一到第三个字依次为本次传输内存数据源地址、本次传输内存数据目的地址和本次传输长度,这三个字的数据合称为传输参数;第四个字为下个传输链表的入口地址。下个传输链表入口地址为终止符——比如0时,表示整个传输过程结束。在内存中,所述源地址和传输长度定义的是本内存中一段真实物理地址连续的存储空间,或是其它内存中一段真实物理地址连续的存储空间,其中存放有待传输的数据;而所述目的地址和传输长度定义了内存中另一段真实物理地址连续的存储空间,该空间为待传输数据的传输目的空间,即准备存放将要传输来的数据的存储空间。链表一一顺序相连,从而将一段段并不连续的存储空间在逻辑上连在了一起。
一种DMA控制器,如图2所示,包括链表控制模块、总线控制模块、主控制模块、FIFO(先进先出寄存器)、通道、计数器和寄存器组;所述寄存器组包括每个通道的源地址寄存器、目的地址寄存器、传输长度寄存器、入口地址寄存器、传输类型寄存器、启动传输寄存器和终止传输寄存器;所述源地址寄存器用于存放本次传输内存数据的源地址;所述目的地址寄存器用于存放本次传输内存数据的目的地址;所述传输长度寄存器用于存放本次传输的数据的长度值;所述入口地址寄存器用于存放下个传输链表的入口地址;其中首链表的地址由CPU在发起内存批处理时提供。
所述传输类型寄存器用于存放表示传输类型的数值,比如1对应内存批处理,2对应普通DMA传输等;所述启动传输寄存器用于存放表示启动或不启动当前通道的数值,比如1指示启动通道,其它数值指示不启动;所述终止传输寄存器用于存放表示终止或不终止当前通道的数值,比如1指示终止通道,其它数值指示不终止;以上三个寄存器由CPU(中央处理器)配置,来发起或终止DMA控制器进行内存批处理操作。
所述主控制模块根据启动传输寄存器和传输类型寄存器的值来接收CPU开始内存批处理的指令,比如当CPU要进行内存批处理时,会配置启动传输寄存器和传输类型寄存器,也就是改变它们的值,当主控制模块检测到启动传输寄存器的值改变后,得知要进行传输,然后根据传输类型寄存器的值得知要进行的是内存批处理操作;接收开始指令后,主控制模块发给链表控制模块寻址指令;接收链表控制模块的寻址完成信号并发给总线控制模块开始传输指令,该指令中指明进行传输的通道;
所述主控制模块还根据终止传输寄存器的值接收CPU终止内存批处理的指令并结束本次内存批处理,如果此时正在进行传输,则发给总线控制模块停止传输指令;监视计数器的计数,当其达到传输长度寄存器的值时,认为已将当前链表对应的数据传输完,发给总线控制模块停止传输指令并发给链表控制模块寻址指令;接收链表控制模块的传输完成信号,结束本次内存批处理操作,向CPU发出中断,返还总线控制权。
所述计数器用于在对每个链表所对应的数据进行DMA传输的过程中,对当前传输通道DMA传输的数据量进行计数。
所述链表控制模块接收所述主控制模块的寻址指令,按照CPU写在入口地址寄存器中的值,即入口地址在内存中找到相应链表,读入当前链表中的传输控制信息数据并用该数据的第一到第四个字依次更新当前传输通道的源地址寄存器、目的地址寄存器、传输长度寄存器及入口地址寄存器后,发给主控制模块寻址完成信号;以及当入口地址寄存器中的值为终止符时,发给主控制模块传输完成信号。
所述总线控制模块接收所述主控制模块的开始传输指令,按照相应通道的源地址寄存器、目的地址寄存器的值,通过所述通道对链表所对应的数据进行DMA传输,其过程是先根据所述源地址寄存器中的值找到待传输数据的源地址,再根据所述目的地址寄存器中的值找到传输的目的地址,然后将从源地址开始的存储空间中的数据,先依次读入FIFO中,再相应地依次放入从目的地址开始的存储空间里;并接收所述主控制模块的停止传输指令停止DMA传输。
一种所述DMA控制器实现内存批处理的方法,如图3所示,包括以下步骤(a1)CPU发起内存批处理操作,具体步骤是CPU先将要进行内存批处理的数据的首个链表的入口地址存放在DMA控制器一个通道的的入口地址寄存器中,然后配置该通道的传输类型寄存器,指示该通道将进行的是内存批处理操作,接着像发起普通DMA传输时那样,配置该通道的启动传输寄存器启动DMA控制器工作;
(a2)DMA控制器检测到启动传输寄存器的值改变后得知要要进行传输,并根据所述通道的传输类型寄存器的值得知要进行的是内存批处理,于是忽略源地址寄存器、目的地址寄存器、传输长度寄存器DMA控制器的值,直接根据入口地址寄存器中的入口地址在内存中找到本次传输中的首个链表;(b1)DMA控制器按字读入当前链表——即找到的链表——中存储的传输控制信息数据,并用读入数据的第一到第四个字依次更新当前传输通道——即CPU指示启动内存批处理操作的通道——的源地址寄存器、目的地址寄存器、传输长度寄存器及入口地址寄存器;所述“更新”即用读入数据取代寄存器中原来的值;(b2)DMA控制器根据所述寄存器中的传输控制信息数据中的传输参数——即源地址、目的地址和传输长度对当前链表所对应的数据进行DMA传输;进行DMA传输的具体步骤同上文所写,不再赘述。
在传输的同时用初始值为0的计数器对当前传输通道传输的数据量进行计数;传输过程中,DMA控制器一直监视是否已将当前链表对应的那一段数据传输完,即传输的数据量——也就是计数器的计数是否已经达到所述传输长度寄存器中的数值;当达到时即完成当前链表所对应的那一段内存数据的DMA传输,将计数器的计数恢复为0并执行(c);(c)DMA控制器判断是否已将需要内存批处理的数据传输完,判断方法是看入口地址寄存器中的数据是否为结束符,是则说明本次内存批处理操作中所有链表对应的数据都已传输完,这时结束本次内存批处理操作,向CPU发起中断,返还总线占用权;否则按照入口地址寄存器中的地址在内存中找到下一个链表,并返回(b1),即进行下一段内存数据的DMA传输;所述结束符通常用0表示。
在整个内存批处理的过程中,CPU随时可以通过配置当前通道的终止传输寄存器来指示终止内存批处理操作,相当于发起一次意外中断。DMA控制器在内存批处理过程中始终监视所述终止传输寄存器的状态,一旦发现其为终止状态,就终止本次内存批处理操作。
在实际应用中,只要是这种有规律的不连续数据传输,比如TV数据,都可以使用本发明提出的DMA控制器。另外,本发明中所述链表可以在内存中的任意位置,传输的源地址和目的地址也可以是内存中的任意位置。
上述为本发明的最优实施方式,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的变形,但这些相应的变形都应属于本发明所附权利要求所保护的范围内。
1.一种直接内存访问DMA控制器,其特征在于,包括主控制模块、链表控制模块、总线控制模块和寄存器组;所述寄存器组用于存放链表的入口地址,以及内存批处理过程中的传输参数;所述主控制模块用于在接收中央处理器开始内存批处理的指令后,向链表控制模块发送寻址指令;接收到链表控制模块的寻址完成信号后向总线控制模块发送开始传输指令;在当前链表对应的数据传输完后发给总线控制模块停止传输指令并发给链表控制模块寻址指令;接收链表控制模块的传输完成信号,结束本次内存批处理操作;所述链表控制模块用于接收所述主控制模块的寻址指令,根据所述寄存器组中保存的入口地址在内存中找到相应链表,读入该链表中的传输参数及下一链表的入口地址并用其更新所述寄存器组后,发给主控制模块寻址完成信号;当寄存器组中的入口地址为终止符时,发给主控制模块传输完成信号;所述总线控制模块接收所述主控制模块的开始传输指令,按照所述寄存器组中保存的传输参数进行DMA传输;并接收所述主控制模块的停止传输指令停止DMA传输。
2.如权利要求1所述的直接内存访问控制器,其特征在于,所述寄存器组包括源地址寄存器、目的地址寄存器、传输长度寄存器和入口地址寄存器;所述源地址寄存器用于存放本次传输内存数据的源地址;所述目的地址寄存器用于存放本次传输内存数据的目的地址;所述传输长度寄存器用于存放本次传输的数据的长度值;所述入口地址寄存器用于存放传输链表的入口地址;首链表的入口地址由中央处理器提供;所述链表控制模块读入链表中的传输控制信息数据后用该数据中本次传输的源地址、目的地址、传输长度和下一个链表的入口地址相应更新源地址寄存器、目的地址寄存器、传输长度寄存器及入口地址寄存器。
3.如权利要求2所述的直接内存访问控制器,其特征在于,还包括一个计数器,用于当进行DMA传输时对当前传输的数据量进行计数;所述主控制模块监视所述计数器的计数,当其达到所述传输长度寄存器的值时,认为已将当前链表对应的内存数据传输完。
4.如权利要求1所述的直接内存访问控制器,其特征在于,所述主控制模块接收中央处理器发送的终止内存批处理的指令后结束本次内存批处理操作。
5.如权利要求1所述的直接内存访问控制器,其特征在于,还包括传输类型寄存器、启动传输寄存器和终止传输寄存器;所述主控制模块根据所述启动传输寄存器和传输类型寄存器的值接收开始内存批处理的指令;根据所述终止传输寄存器的值接收终止内存批处理的指令。
6.一种直接内存访问控制器实现内存批处理的方法,包括(a)中央处理器发起内存批处理操作,并提供首个链表的入口地址;直接内存访问控制器根据该入口地址找到首个链表;(b)直接内存访问控制器根据当前链表中的传输参数对该链表所对应的数据进行DMA传输,传输完后执行(c);(c)直接内存访问控制器判断是否已将需要内存批处理的数据都传输完,是则结束本次内存批处理操作;否则根据当前链表中的下一链表的入口地址找到下一个链表并返回(b)。
7.如权利要求6所述的方法,其特征在于步骤(b)中,直接内存访问控制器将当前链表中的传输控制信息数据读入,并用该数据中的本次传输的源地址、目的地址、传输长度和下一个链表的入口地址相应更新源地址寄存器、目的地址寄存器、传输长度寄存器及入口地址寄存器;DMA控制器根据所述源地址寄存器、目的地址寄存器及传输长度寄存器中存放的数值对当前链表所对应的内存数据进行DMA传输。
8.如权利要求7所述的方法,其特征在于中央处理器提供首个链表的入口地址的方法是将其存放在入口地址寄存器中;直接内存访问控制器根据所述入口地址寄存器中的入口地址找到相应链表;当所述入口地址寄存器中的值为终止符时,直接内存访问控制器认为已将需要内存批处理的数据都传输完,结束本次内存批处理操作。
9.如权利要求7所述的方法,其特征在于,步骤(b)中,在进行DMA传输时,用计数器对当前传输的数据量进行计数,直接内存访问控制器监视计数器的计数,当其与所述传输长度寄存器中的数值相等时认为已将当前链表对应的数据传输完。
10.如权利要求7所述的方法,其特征在于,内存批处理过程中,所述直接内存访问控制器随时根据CPU的终止指令终止本次内存批处理操作。
一种直接内存访问控制器及其实现内存批处理的方法;直接内存访问控制器包括主控制模块、链表控制模块、总线控制模块和寄存器组;该直接内存访问控制器实现内存批处理的方法,包括a.中央处理器发起内存批处理操作,并提供首个链表的入口地址;b.直接内存访问控制器根据该入口地址找到首个链表;直接内存访问控制器根据当前链表中的传输参数对该链表所对应的数据进行DMA传输;c.直接内存访问控制器判断是否已将需要内存批处理的数据都传输完,是则结束本次内存批处理操作;否则根据当前链表中的下一链表的入口地址找到下一个链表并返回b。采用了本发明的方案后,可以使DMA控制器完全不用CPU的控制而自行解析内存数据并发起传输。
文档编号G06F13/28GKSQ
公开日日 申请日期日 优先权日日
发明者邹杨 申请人:北京中星微电子有限公司计算机原理学习 内存工作原理_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
计算机原理学习 内存工作原理
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩12页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 scsi 控制器 发送数据 的文章

 

随机推荐