CN100561453C - 一种直接内存访问控制器 - Google Patents
一种直接内存访问控制器 Download PDFInfo
- Publication number
- CN100561453C CN100561453C CNB2007100651089A CN200710065108A CN100561453C CN 100561453 C CN100561453 C CN 100561453C CN B2007100651089 A CNB2007100651089 A CN B2007100651089A CN 200710065108 A CN200710065108 A CN 200710065108A CN 100561453 C CN100561453 C CN 100561453C
- Authority
- CN
- China
- Prior art keywords
- transmission
- register
- control module
- chained list
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000015654 memory Effects 0.000 title claims abstract description 96
- 230000005540 biological transmission Effects 0.000 claims abstract description 136
- 238000010923 batch production Methods 0.000 claims description 4
- 238000000034 method Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- MHABMANUFPZXEB-UHFFFAOYSA-N O-demethyl-aloesaponarin I Natural products O=C1C2=CC=CC(O)=C2C(=O)C2=C1C=C(O)C(C(O)=O)=C2C MHABMANUFPZXEB-UHFFFAOYSA-N 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
Images
Landscapes
- Bus Control (AREA)
Abstract
一种直接内存访问控制器,包括主控制模块、链表控制模块、总线控制模块和用于存放链表的入口地址及传输参数的寄存器组;主控制模块在开始后,向链表控制模块发送寻址指令;接收到寻址完成信号后向总线控制模块发送开始传输指令;在当前链表对应的数据传输完后发给总线控制模块停止传输指令并发给链表控制模块寻址指令;接收传输完成信号,结束操作;链表控制模块接收寻址指令,根据入口地址找到相应链表,读入该链表中的传输参数及下一链表的入口地址并更新所述寄存器组后,发寻址完成信号;当入口地址为终止符时,发传输完成信号;所述总线控制模块接收开始传输指令,按照传输参数进行DMA传输;接收停止传输指令停止DMA传输。
Description
技术领域
本发明涉及直接内存访问控制器(DMA控制器),尤其涉及一种直接内存访问控制器。
背景技术
在含有中央处理器(CPU)的系统中,为了提高内存和CPU使用效率,在大量内存数据有规律的操作时,通常采用直接内存访问(Direct MemoryAccess Control,DMA)的方式对数据进行操作。而DMA的操作是通过DMA控制器(DMA Controller,DMAC)来实现的。
当软件加载操作系统后,内存中真实的物理地址被虚拟物理地址所取代。当虚拟物理地址连续时,真实物理地址未必连续。在现有技术中,DMA控制器只能针对真实物理地址工作,如果需要传输内存中真实物理地址并不连续的数据,就必须由CPU发起多次DMA传输;DMA控制器每次只能传输一段真实物理地址连续的数据,然后就要通过CPU的控制再传输下一段数据;无法实现内存批处理功能。
发明内容
针对上述不足,本发明提供了一种直接内存访问控制器,使内存中不连续的数据可以完全通过DMA控制器进行传输。
本发明采用的技术方案是:
一种直接内存访问控制器,包括主控制模块、链表控制模块、总线控制模块和寄存器组;
所述寄存器组用于存放链表的入口地址,以及内存批处理过程中的传输参数;
所述主控制模块用于在接收中央处理器开始内存批处理的指令后,向链表控制模块发送寻址指令;接收到链表控制模块的寻址完成信号后向总线控制模块发送开始传输指令;在当前链表对应的数据传输完后发给总线控制模块停止传输指令并发给链表控制模块寻址指令;接收链表控制模块的传输完成信号,结束本次内存批处理操作;
所述链表控制模块用于接收所述主控制模块的寻址指令,根据所述寄存器组中保存的入口地址在内存中找到相应链表,读入该链表中的传输参数及下一链表的入口地址并用其更新所述寄存器组后,发给主控制模块寻址完成信号;当寄存器组中的入口地址为终止符时,发给主控制模块传输完成信号;
所述总线控制模块接收所述主控制模块的开始传输指令,按照所述寄存器组中保存的传输参数进行DMA传输;并接收所述主控制模块的停止传输指令停止DMA传输。
进一步地,所述寄存器组包括源地址寄存器、目的地址寄存器、传输长度寄存器和入口地址寄存器;
所述源地址寄存器用于存放本次传输内存数据的源地址;
所述目的地址寄存器用于存放本次传输内存数据的目的地址;
所述传输长度寄存器用于存放本次传输的数据的长度值;
所述入口地址寄存器用于存放传输链表的入口地址;首链表的入口地址由中央处理器提供;
所述链表控制模块读入链表中的传输控制信息数据后用该数据中本次传输的源地址、目的地址、传输长度和下一个链表的入口地址相应更新源地址寄存器、目的地址寄存器、传输长度寄存器及入口地址寄存器。
进一步地,所述的直接内存访问控制器还包括一个计数器,用于当进行DMA传输时对当前传输的数据量进行计数;
所述主控制模块监视所述计数器的计数,当其达到所述传输长度寄存器的值时,认为已将当前链表对应的内存数据传输完。
进一步地,所述主控制模块接收中央处理器发送的终止内存批处理的指令后结束本次内存批处理操作。
进一步地,所述的直接内存访问控制器还包括传输类型寄存器、启动传输寄存器和终止传输寄存器;所述主控制模块根据所述启动传输寄存器和传输类型寄存器的值接收开始内存批处理的指令;根据所述终止传输寄存器的值接收终止内存批处理的指令。
本文还提供了一种直接内存访问控制器实现内存批处理的方法包括:
(a)中央处理器发起内存批处理操作,并提供首个链表的入口地址;直接内存访问控制器根据该入口地址在内存中找到首个链表;
(b)直接内存访问控制器将找到的链表作为当前链表,根据当前链表中的传输参数对该链表所对应的数据进行DMA传输,传输完后执行(c);
(c)直接内存访问控制器判断是否已将需要内存批处理的数据都传输完,是则结束本次内存批处理操作;否则根据当前链表中的下一链表的入口地址在内存中找到下一个链表并返回(b)。
进一步地,步骤(b)中还包括,直接内存访问控制器将当前链表中的传输控制信息数据读入,并用该数据中的本次传输的源地址、目的地址、传输长度和下一个链表的入口地址相应更新源地址寄存器、目的地址寄存器、传输长度寄存器及入口地址寄存器;直接内存访问控制器根据当前链表中的传输参数对该链表所对应的数据进行DMA传输是指: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控制器。另外,本发明中所述链表可以在内存中的任意位置,传输的源地址和目的地址也可以是内存中的任意位置。
上述为本发明的最优实施方式,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的变形,但这些相应的变形都应属于本发明所附权利要求所保护的范围内。
Claims (5)
1、一种直接内存访问控制器,其特征在于,包括主控制模块、链表控制模块、总线控制模块和寄存器组;
所述寄存器组用于存放链表的入口地址,以及内存批处理过程中的传输参数;
所述主控制模块用于在接收中央处理器开始内存批处理的指令后,向链表控制模块发送寻址指令;接收到链表控制模块的寻址完成信号后向总线控制模块发送开始传输指令;在当前链表对应的数据传输完后发给总线控制模块停止传输指令并发给链表控制模块寻址指令;接收链表控制模块的传输完成信号,结束本次内存批处理操作;
所述链表控制模块用于接收所述主控制模块的寻址指令,根据所述寄存器组中保存的入口地址在内存中找到相应链表,读入该链表中的传输参数及下一链表的入口地址并用其更新所述寄存器组后,发给主控制模块寻址完成信号;当寄存器组中的入口地址为终止符时,发给主控制模块传输完成信号;
所述总线控制模块接收所述主控制模块的开始传输指令,按照所述寄存器组中保存的传输参数进行DMA传输;并接收所述主控制模块的停止传输指令停止DMA传输。
2、如权利要求1所述的直接内存访问控制器,其特征在于,所述寄存器组包括源地址寄存器、目的地址寄存器、传输长度寄存器和入口地址寄存器;
所述源地址寄存器用于存放本次传输内存数据的源地址;
所述目的地址寄存器用于存放本次传输内存数据的目的地址;
所述传输长度寄存器用于存放本次传输的数据的长度值;
所述入口地址寄存器用于存放传输链表的入口地址;首链表的入口地址由中央处理器提供;
所述链表控制模块读入链表中的传输控制信息数据后用该数据中本次传输的源地址、目的地址、传输长度和下一个链表的入口地址相应更新源地址寄存器、目的地址寄存器、传输长度寄存器及入口地址寄存器。
3、如权利要求2所述的直接内存访问控制器,其特征在于,还包括一个计数器,用于当进行DMA传输时对当前传输的数据量进行计数;
所述主控制模块监视所述计数器的计数,当其达到所述传输长度寄存器的值时,认为已将当前链表对应的内存数据传输完。
4、如权利要求1所述的直接内存访问控制器,其特征在于,所述主控制模块接收中央处理器发送的终止内存批处理的指令后结束本次内存批处理操作。
5、如权利要求1所述的直接内存访问控制器,其特征在于,还包括传输类型寄存器、启动传输寄存器和终止传输寄存器;所述主控制模块根据所述启动传输寄存器和传输类型寄存器的值接收开始内存批处理的指令;根据所述终止传输寄存器的值接收终止内存批处理的指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100651089A CN100561453C (zh) | 2007-04-03 | 2007-04-03 | 一种直接内存访问控制器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100651089A CN100561453C (zh) | 2007-04-03 | 2007-04-03 | 一种直接内存访问控制器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101030183A CN101030183A (zh) | 2007-09-05 |
CN100561453C true CN100561453C (zh) | 2009-11-18 |
Family
ID=38715541
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100651089A Expired - Fee Related CN100561453C (zh) | 2007-04-03 | 2007-04-03 | 一种直接内存访问控制器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100561453C (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100547572C (zh) * | 2007-10-22 | 2009-10-07 | 威盛电子股份有限公司 | 动态建立直接内存访问通路的方法及系统 |
CN101625666B (zh) * | 2009-08-26 | 2011-08-17 | 福建星网锐捷网络有限公司 | 一种数据拷贝、参数信息写入的方法和系统 |
CN102314400B (zh) * | 2011-09-27 | 2014-12-24 | 广东威创视讯科技股份有限公司 | 一种分散聚合式dma方法及装置 |
CN103870404B (zh) * | 2014-03-13 | 2016-09-14 | 武汉精测电子技术股份有限公司 | 一种iic批命令处理控制方法 |
CN105468550B (zh) * | 2015-11-19 | 2018-10-19 | 深圳国微技术有限公司 | 一种可实现链表循环的系统及方法 |
CN107783727B (zh) * | 2016-08-31 | 2022-01-14 | 华为技术有限公司 | 一种内存设备的访问方法、装置和系统 |
CN107678987B (zh) * | 2017-10-10 | 2021-06-29 | 郑州云海信息技术有限公司 | 一种dma传输的方法、装置及设备 |
CN108228497A (zh) * | 2018-01-11 | 2018-06-29 | 湖南国科微电子股份有限公司 | 一种基于sgl链表的DMA传输方法 |
CN114328316B (zh) * | 2021-11-22 | 2024-01-26 | 北京智芯微电子科技有限公司 | Dma控制器、soc系统及基于dma控制器的数据搬运方法 |
CN114338567B (zh) * | 2021-12-27 | 2023-09-05 | 锐迪科创微电子(北京)有限公司 | Sdio接口数据传输方法及装置、sdio接口设备 |
CN116775524B (zh) * | 2023-06-19 | 2024-02-02 | 无锡摩芯半导体有限公司 | 一种dma链表模式的lli动态写入方法 |
-
2007
- 2007-04-03 CN CNB2007100651089A patent/CN100561453C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101030183A (zh) | 2007-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100561453C (zh) | 一种直接内存访问控制器 | |
CN100440184C (zh) | 一种能同时进行读写操作的dma控制器及传输方法 | |
CN100464318C (zh) | 一种实现高效dma传输的dma控制器及传输方法 | |
CN101079015B (zh) | 数据传送方法及系统 | |
CN100507886C (zh) | 一种对非易失性存储器进行直接存储访问的方法及其装置 | |
CN102057363A (zh) | 从装置之间的直接数据传输 | |
CN101916237B (zh) | 一种pci总线dma高速数据传输方法 | |
CN101404839A (zh) | 增加辅助配置通道的增强型dmx512灯光控制系统 | |
CN102541779A (zh) | 一种提高多数据缓冲区dma效率的系统和方法 | |
CN101710309B (zh) | 一种基于海量数据传输的dma控制器 | |
CN100397339C (zh) | 集成内电路电路编程的装置与方法 | |
CN101303685A (zh) | 可提升通用序列总线储存设备的读写数据速率的方法 | |
CN103488600A (zh) | 通用从机同步串行接口电路 | |
CN103077139B (zh) | 使用内部集成电路总线的集成电路及其控制方法 | |
CN101692213A (zh) | 通用串行总线主机控制方法和通用串行总线主机控制器 | |
CN101118524A (zh) | 直接存储器存取传输控制装置 | |
CN101232434B (zh) | 一种利用双口ram进行异步数据传输的装置 | |
CN100395737C (zh) | 一种在内存和数字信号处理器之间传送数据的方法 | |
CN202003346U (zh) | 一种多通道的nand flash控制器 | |
CN101154204A (zh) | Dma传输控制装置和半导体集成电路装置 | |
CN101814011A (zh) | Usb主机控制器以及用于usb主机控制器的控制方法 | |
CN102096650B (zh) | 一种接口装置 | |
CN108228520B (zh) | 一种面向bmc的i2c控制器的快速传输方法 | |
CN102799549A (zh) | 一种多源端口的数据处理方法及装置 | |
CN107918593B (zh) | 近端一对多串行总线的拓展接口电路以及通信方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091118 Termination date: 20120403 |