CN100481045C - 一种实现软/硬件复用的dma控制器和传输方法 - Google Patents
一种实现软/硬件复用的dma控制器和传输方法 Download PDFInfo
- Publication number
- CN100481045C CN100481045C CNB2007100986701A CN200710098670A CN100481045C CN 100481045 C CN100481045 C CN 100481045C CN B2007100986701 A CNB2007100986701 A CN B2007100986701A CN 200710098670 A CN200710098670 A CN 200710098670A CN 100481045 C CN100481045 C CN 100481045C
- Authority
- CN
- China
- Prior art keywords
- dma
- transmission
- hardware
- value
- cpu
- 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
- 238000000034 method Methods 0.000 title claims abstract description 13
- 230000005540 biological transmission Effects 0.000 claims abstract description 275
- 230000002093 peripheral effect Effects 0.000 claims description 53
- 230000014509 gene expression Effects 0.000 claims description 39
- 230000006978 adaptation Effects 0.000 claims description 18
- 238000000151 deposition Methods 0.000 claims description 13
- 230000000977 initiatory effect Effects 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 2
- 241000894007 species Species 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
- 239000012467 final product Substances 0.000 description 1
- 238000012913 prioritisation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Landscapes
- Bus Control (AREA)
Abstract
本发明公开了一种实现软/硬件复用的DMA控制器及传输方法;DMA控制器中包括DMA控制模块,用于接收硬件的DMA传输请求,并判断是否可以进行硬件请求;如果可以则进行所述硬件发起的DMA传输;还用于在CPU需要发出DMA传输请求时,向CPU提供通道的使用信息;并在接收CPU的DMA传输请求后,利用CPU所选择的空闲通道进行DMA传输,同时停止处理对该通道的硬件请求直到所述CPU发起的DMA传输完成或终止。采用了本发明所提供的方案后,由于DMA控制器的每一个通道既可以支持硬件请求的DMA操作又可以支持CPU发起的DMA操作,因此能够实现用对DMA控制器的软/硬件复用。
Description
技术领域
本发明涉及DMA(Direct Memory Access Control,直接内存访问)传输,具体涉及一种实现软/硬件复用的DMA控制器和传输方法。
背景技术
在含有中央处理器(CPU)的嵌入式系统中,为了提高内存和CPU使用效率,在大量内存数据有规律的操作时,通常采用直接内存访问(DirectMemory Access Control,DMA)的方式对数据进行操作。而DMA的操作是通过DMA控制器(DMA Controller,DMAC)来实现的。对于总线系统而言,DMA控制器既是总线的从设备,又与CPU一样是总线的主设备(Master)。
现有的DMA控制器与CPU共同作为总线的主设备。如图1所示,当有输入设备需要进行DMA传输时,其通过DMA请求触发器向DMA控制器发出请求。在此之前CPU已经将地址等控制信息配给DMA控制器内的地址寄存器中。当DMA控制器接到DMA传输请求时,其向CPU发起总线占用请求。CPU通常在执行完当前的指令后将总线控制权交给DMA控制器。此时DMA控制器的控制、状态寄存器发生变化,表明已获得总线控制权,并且发起一次DMA传输。通常DMA传输是从外设的数据缓冲区取数放到总线上的存储器中。在传输的过程中,计数器不断计数,直到计数器的记到传输长度时停止计数并改变控制、状态寄存器的内容。DMA控制器此时向CPU归还总线控制权。
这种DMA控制器已经无法满足日益增长的对性能的需求。现在的应用中,在很多的情况下,要求软件能够通过CPU配置寄存器直接发起一个DMA传输,而不是通过硬件来触发。这就需要DMA控制器既能够由CPU触发,也能够由硬件触发,但两者的触发方式不一样,硬件是通过发起信号来占用通道,发起DMA传输,而CPU是通过配置寄存器来发起,因此DMA控制器只能采用单一由硬件或软件控制,如果要被软/硬件复用,则需要在系统中配置两套DMA控制器,这样浪费了大量的硬件资源。
另外,CPU发起的DMA传输通常是从内存拷贝一段数据到内存的另一段地址而无需中央处理器参与。为了能够更高效的进行数据传输,通常采取“突发”的传输方式。所谓“突发”的传输方式就是给一次地址及控制信号就可以进行多个数据的传输,一次DMA传输中包括一次或多次“突发”传输。对于嵌入式系统而言,一次“突发”传输通常可以进行半字、单字、4个、8个或16个“字”的传输,即“突发”传输的数据长度依次为半字、单字、4字、8字和16字;突发传输模式是根据“突发”传输的数据长度来定义的,如16字突发传输模式、8字突发传输模式等。对于支持“突发”传输的传统的DMA控制器通常对传输长度有限制。假设突发传输长度为n个字,那么通过DMA传输的数据总长度必须是4n的整数倍个字节。例如当传输“突发”长度为16个字时,其一次DMA传输的长度需要是64(4×16)个字节的整数倍。然而这种要求会给CPU带来额外的负担,CPU需要首先计算需要传输的数据的长度,再进行合适的裁减,多余的数据需要换模式再进行一次DMA传输,或者由CPU直接搬运,严重影响了传输的效率。
而且在现有技术中,外设发起的DMA传输通常是从外设的缓存中取数据放到总线上的存储器中;比如当有外设需要进行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控制器,既能够由硬件发起DMA传输,也可以由CPU发起DMA传输。
本发明采用的技术方案是:
一种实现软/硬件复用的直接内存访问DMA控制器,包括DMA控制模块,用于控制DMA传输;其特征在于:
所述DMA控制模块用于接收硬件的DMA传输请求,并判断是否可以进行硬件请求;如果可以则进行所述硬件发起的DMA传输;还用于在CPU需要发出DMA传输请求时,向CPU提供传输资源的使用信息;并在接收CPU的DMA传输请求后,利用CPU所选择的空闲传输资源进行DMA传输,同时停止处理对该传输资源的硬件请求直到所述CPU发起的DMA传输完成或终止。
进一步的,所述DMA控制器还包括:
硬件请求使能状态寄存器,用于存放表示硬件请求使能状态的数值;包括“允许硬件请求”和“不允许硬件请求”的值;由CPU在发起DMA传输时配置为“不允许硬件请求”的值;
通道状态寄存器,用于存放表示通道状态的数值,包括表示“通道被占用”的值和表示“通道可用”的值;
DMA控制模块还用于在要进行DMA传输时,探询通道状态寄存器的值是否为“通道可用”,如果是则通过该通道进行DMA传输,并将所述通道状态寄存器的值置为表示“通道被占用”的值;否则继续探询所述通道状态寄存器的值;并当该通道上的DMA传输完成或中断后,将通道状态寄存器的值置为表示“通道可用”的值;
所述DMA控制模块判断是否可以进行硬件请求是指探询硬件请求使能状态寄存器的值,如果为“允许硬件请求”的值则表示可以进行硬件请求;否则不处理所述硬件请求,继续探询;
所述DMA控制模块向CPU提供通道的使用信息是指通过所述通道状态寄存器的值告知CPU通道是否空闲;
所述DMA控制模块在完成或中断CPU发起的DMA传输后将硬件请求使能状态寄存器的值置为“允许硬件请求”。
进一步的,所述DMA控制器还包括:
软件请求寄存器,用于存放表示CPU是否发起DMA传输请求的数值,包括表示“有软件请求”和“无软件请求”的值,由CPU在发起DMA传输时配置为“有软件请求”的值;
所述DMA控制模块在CPU发起的DMA传输完成后将该通道的软件请求寄存器的值置为“无软件请求”,还用于当传输过程中软件请求寄存器的值被CPU置为“无软件请求”时,终止该通道的DMA传输;
所述DMA控制模块接收CPU的DMA传输请求是指监控软件请求寄存器,当其值被CPU配置为表示“有软件请求”的值时,表示接收到CPU所发起的DMA传输请求。
进一步的,所述DMA控制模块控制各通道以时分复用的方式占用总线。
进一步的,所述DMA控制器还包括:数据长度计算模块和至少一个自适应模块;
所述DMA控制模块还用于在进行突发传输时控制所述数据长度计算模块计算待传输数据的长度,并发送给自适应模块;并根据所述自适应模块选择的突发传输模式进行突发传输;
所述至少一个自适应模块,用于根据传输数据的长度自动选择效率最高的突发传输模式并输出给所述DMA控制模块。
进一步的,所述自适应模块包括N个选择单元,N的值为突发传输可采用的传输模式种类数减一;
每个选择单元用于根据传输数据的长度在第一传输模式和第二传输模式中选择一种;其中,第二传输模式的效率高于第一传输模式;当数据长度大于等于第二传输模式一次所能传输的数据长度时,选择第二传输模式;否则选择第一传输模式;
第一个选择单元中,第一传输模式为效率最低的传输模式;第二传输模式为效率倒数第二低的传输模式;
其它各选择单元的第一传输模式为前一单元所选的传输模式;
最后一个选择单元的第二传输模式为最佳的传输模式;所述最后一个选择单元输出所选的传输模式给DMA控制模块。
进一步的,各选择单元包括一个减法器、一个比较器和一个选择器;
所述选择器有一个输出端,第一、第二输入端和一个选择端,选择器根据选择端的信号,选择第一、第二输入端中的一路信号进行输出;
所述选择器的第一输入端输入第一传输模式的使能信号;第二输入端输入第二传输模式的使能信号;
最后一个选择单元的选择器输出端与DMA控制模块相连;除此之外,其它各选择单元的选择器的输出端与下一选择单元选择器的第一输入端相连;
所述减法器用于得到数据长度值与第二传输模式所能传输字节数的差值,并输出给比较器;
所述比较器将所述差值与0进行比较,并输出相应信号给所述选择器的选择端;
如果该差值大于等于0,则输出让选择器选择第二输入端的信号,否则输出让选择器选择第一输入端的信号。
进一步的,所述DMA控制模块在外设与内存间进行DMA传输期间,当外设与DMA控制器间传输的字节数达到外设缓存空间大小时,给外设完成本次外设与DMA控制器间的DMA传输请求的信号;当DMA控制器与内存间传输的字节数达到内存缓存空间大小时,向CPU发出通道完成传输中断请求。
进一步的,所述DMA控制器还包括:
外设缓存大小寄存器,用于存放外设的缓存空间大小的数值;
内存缓存大小寄存器,用于存放内存中缓存空间大小的数值;
第一计数器,用于在一次外设与DMA控制器间的DMA传输中对外设与DMA控制器间传输的字节数进行计数;
第二计数器,用于在一次DMA传输中对DMA控制器与内存间传输的字节数进行计数;
所述DMA控制模块通过判断第一计数器的计数值是否小于外设缓存大小寄存器中的数值,来判断外设与DMA控制器间传输的字节数是否达到外设缓存空间的大小;通过比较第二计数器的计数值是否小于内存缓存大小寄存器中的数值,来判断DMA控制器与内存间传输的字节数是否达到内存缓存空间的大小。
进一步的,所述DMA控制器还包括:
源地址变化方式寄存器,用于存放表示传输中源地址变化方式的数值;
目的地址变化方式寄存器用于存放表示传输中目的地址变化方式的数值;其中,1表示增加,2表示减少,其它数值表示不变;
第三计数器,用于存放DMA传输的源地址;
第四计数器,用于存放DMA传输的目的地址;
所述DMA控制模块按照第三计数器中的源地址和第四计数器中存放的目的地址进行DMA传输;还用于根据源地址变化方式寄存器及目的地址变化方式寄存器的值来控制第三、第四计数器中的源/目的地址的数值递增、或递减、或不变。
本发明还提供了一种在上述DMA控制器中进行DMA传输的方法,包括:
当CPU要进行DMA传输时的步骤为:
(A)CPU在DMA控制器中选择一个通道;
(B)CPU关闭所选通道的硬件请求使能,并向DMA控制模块发出DMA传输请求;
(C)DMA控制模块判断通道是否空闲,如果不空闲则返回(C);否则,执行步骤(D)
(D)DMA控制模块在步骤(A)所选的通道中进行DMA传输,传输完成后执行步骤(E);
(E)开放所述通道的硬件请求使能;
当硬件要进行DMA传输时的步骤为:
(a)硬件向DMA控制模块请求进行DMA传输;
(b)DMA控制模块判断能否可以进行硬件请求;如果硬件请求使能被关闭则返回(b);否则执行下一步;
(c)DMA控制模块判断通道是否空闲,如果不空闲则返回(c);否则执行步骤(d);
(d)DMA控制模块进行DMA传输,直到传输完成。
进一步的,所述DMA控制器还包括:步骤(C)中,如果CPU发出取消DMA传输的要求,则DMA控制模块终止传输,执行(E)。
采用了本发明所提供的方案后,由于DMA控制器的每一个通道既可以支持硬件请求的DMA操作又可以支持CPU发起的DMA操作,因此能够实现用对DMA控制器的软/硬件复用。采用优化方案后,在进行“突发”传输时,本DMA控制器可以根据传输数据的总长度自适应调整传输类型,以保证DMA传输总能以最高效的方式进行;而且在进行外设与内存间的传输时,每次传输的数据量不再受限于外设的缓存大小,提高了传输效率。
附图说明
图1是现有技术中DMA控制器的工作原理示意图;
图2是本发明的DMA控制器的具体实施的示意图;
图3是本发明的DMA控制器中自适应模块的具体实施的逻辑电路图。
具体实施方式
一种实现软/硬件复用的DMA控制器,如图2所示,包括至少一个自适应模块、至少一个通道、DMA控制模块、数据长度计算模块、寄存器组及若干个计数器。
每个通道分别通过不同的接口与一个硬件相连。
所述寄存器组包括:
外设缓存大小寄存器,用于存放外设的缓存空间大小的数值;
内存缓存大小寄存器,用于存放内存中缓存空间大小的数值;
每个通道的硬件请求使能状态寄存器,用于存放表示硬件请求使能状态的数值;比如1表示允许硬件请求,其它数值表示不允许硬件请求;该寄存器默认的初始值为表示“允许硬件请求”的值;
每个通道的通道状态寄存器,用于存放表示通道状态的数值;比如1表示通道被占用,其它数值表示通道可用;
每个通道的软件请求寄存器,用于存放表示CPU是否发起DMA传输请求的数值,比如1表示有软件请求;其它数值表示无软件请求。
当软件要发起DMA传输请求时,先随机选择一个通道并对其通道状态寄存器的值进行判断,如果为“通道被占用”,则重新选择;如果为“通道可用”,说明通道空闲,则CPU将该通道的硬件请求使能状态寄存器的值置为“不允许硬件请求”的值,并配置软件请求寄存器的值为“有软件请求”;
每个通道的源地址变化方式寄存器,用于存放表示传输中源地址变化方式的数值;比如1表示增加,2表示减少,其它数值表示不变;
每个通道的目的地址变化方式寄存器用于存放表示传输中目的地址变化方式的数值;比如1表示增加,2表示减少,其它数值表示不变;
在进行DMA传输的过程中,对于地址的变化存在着多种需求。例如,当需要从一个FIFO中取数,存到一片内存中时,就需要源地址不变,而目的地址增加;当从内存中取数存到FIFO中时,则需要源地址增加,目的地址不变。实际应用中,源地址变化方式寄存器和目的地址变化方式寄存器的值由CPU根据DMA传输的需求配置。
所述计数器包括:
第一计数器,用于在一次外设与DMA控制器间的DMA传输中对外设与DMA控制器间传输的字节数进行计数;
第二计数器,用于在一次DMA传输中对DMA控制器与内存间传输的字节数进行计数;
第三计数器,用于存放DMA传输的源地址;
第四计数器,用于存放DMA传输的目的地址。
所述DMA控制模块用于接收硬件的DMA传输请求,并判断其相连通道的硬件请求使能状态寄存器的值是否为“允许硬件请求”的值,如果是则进行该硬件发起的DMA传输;否则不处理硬件请求,继续探询所述硬件请求使能状态寄存器的值,直到CPU发起的DMA传输结束,DMA控制模块将硬件请求使能状态寄存器的值置为“允许硬件请求”为止。
所述DMA控制模块还用于监控各通道的软件请求寄存器,当其值被CPU配置为表示“有软件请求”的值时,通过该通道进行CPU所发起的DMA传输;并在传输完成后将该通道的软件请求寄存器的值置为“无软件请求”,将硬件请求使能状态寄存器的值置为“允许硬件请求”;还用于当传输过程中软件请求寄存器的值被CPU置为“无软件请求”时,终止该通道的DMA传输,并将硬件请求使能状态寄存器的值置为“允许硬件请求”。
所述DMA控制模块在要进行DMA传输时,首先探询通道状态寄存器的值是否为“通道可用”,如果是则通过该通道进行DMA传输,并将所述通道状态寄存器的值置为表示“通道被占用”的值;否则继续探询所述通道状态寄存器的值。
DMA控制模块用于在开始DMA传输后,将所用传输通道的通道状态寄存器的值置为“通道被占用”;当该通道上的DMA传输完成或终止后,将通道状态寄存器的值置为表示“通道可用”的值。
这样一来,本DMA控制器的每一个通道既可以接收硬件请求的DMA操作又可以接收CPU发起的DMA操作,即能同时支持软件和硬件的请求,并且提高了DMA硬件资源的使用率。当一个通道相连的硬件不需要进行DMA传输时,就可以由CPU通过配置寄存器占用该通道来发起一次DMA传输。若CPU因为任何原因在传输前或传输过程中需要取消之前请求的DMA传输也可以通过CPU配寄存器来取消之前请求的DMA传输操作。CPU可以在外设的FIFO满时发起外设到内存的传输,在外设的FIFO不满时发起内存到外设的传输,而不用等待硬件来控制和请求DMA传输。
DMA控制模块控制各通道以时分复用的方式占用总线。这样当一个通道在进行DMA传输时,其它通道就可以对需要进行DMA传输的数据进行准备和处理;提高了系统的传输效率。
所述DMA控制模块还用于在进行突发传输时控制所述数据长度计算模块计算待传输数据的长度——即数据共有多少个字节——并发送给自适应模块;并根据所述自适应模块输出的突发传输模式进行突发传输。
所述DMA控制模块还在进行DMA传输期间,控制所述第一、第二计数器进行计数;并通过判断第一计数器的计数值是否小于外设缓存大小寄存器中的数值,来判断外设与DMA控制器间传输的字节数是否达到外设缓存空间的大小,达到时给外设完成本次外设与DMA控制器间的DMA传输请求的信号;还用于通过比较第二计数器的计数值是否小于内存缓存大小寄存器中的数值,来判断DMA控制器与内存间传输的字节数是否达到内存缓存空间的大小,达到时向CPU发出通道完成传输中断请求,并将所述硬件请求使能状态寄存器的值配置为“不允许硬件请求”的值;当接收到内存的缓存数据处理完的信号时——即当内存又可以接收或发送数据时,将所述硬件请求使能状态寄存器的值配置为“允许硬件请求”的值;以继续进行外设与内存间的DMA传输。
所述一次DMA传输是指从DMA控制器向CPU发起请求并获得总线控制权开始,到DMA控制器发出中断为止进行的传输;在一次DMA传输中,DMA控制器只需访问一次内存,所传输的数据量为内存中缓存空间的大小。
所述一次外设与DMA控制器间的DMA传输是指从外设与DMA控制器之间进行数据交换的传输过程,所传输的数据量为外设的缓存空间大小;内存中缓存空间的大小通常是外设缓存大小的整数倍;本发明里,一次DMA传输中可以包括多次外设与DMA控制器间的DMA传输。
另外,所述DMA控制模块按照第三计数器中的源地址和第四计数器中存放的目的地址进行DMA传输;还用于根据源地址变化方式寄存器及目的地址变化方式寄存器的值来控制第三、第四计数器中的源/目的地址的数值递增、或递减、或不变。
比如当从内存传输数据到一个FIFO时,目的地址变化方式寄存器的值表示“不变”的值;比如,内存每次传输8字节的数据给FIFO,每传输一次就将第三计数器的值加上8,然后下次传输中将该值作为新的源地址。
在实际应用时,当需要将内存中的一个数覆盖到一片内存中时,也可以采用该方法,固定源地址,增加目的地址即可。
所述自适应模块用于根据传输数据的长度自动选择效率最高的突发传输模式;其输入端与DMA控制器里的数据长度计算模块相连,根据输入的传输数据长度选择效率最高的突发传输模式,将所选择的传输模式输出给DMA控制模块,使DMA控制模块根据该模式进行突发传输。
如图3所示,所述自适应模块包括N个选择单元,N的值为突发传输可采用的传输模式种类数减1。
每个选择单元用于根据传输数据的长度在第一传输模式和第二传输模式中选择一种;其中,第二传输模式的效率高于第一传输模式;当数据长度大于等于第二传输模式一次所能传输的数据长度时,选择第二传输模式;否则选择第一传输模式。
第一个选择单元中,第一传输模式为效率最低的传输模式;第二传输模式为效率倒数第二低的传输模式;
其它各选择单元的第一传输模式为前一单元所选的传输模式;
最后一个选择单元的第二传输模式为最佳的传输模式;所述最后一个选择单元输出所选的传输模式给DMA控制模块;
各选择单元包括一个减法器、一个比较器和一个选择器;
所述选择器有一个输出端,第一、第二输入端和一个选择端,选择器根据选择端的信号,选择第一、第二输入端中的一路信号进行输出,比如当选择端输入高电平时输出第一输入端的信号,当选择端输入低电平时输出第二输入端的信号。
所述选择器的第一输入端输入第一传输模式的使能信号;第二输入端输入第二传输模式的使能信号;最后一个选择单元的选择器输出端与DMA控制模块相连;除此之外,其它各选择单元的选择器的输出端与下一选择单元选择器的第一输入端相连。
所述减法器用于得到数据长度值(以字节为单位)与第二传输模式所能传输字节数的差值,并输出给比较器;
所述比较器将所述差值与0进行比较,并输出相应信号给所述选择器的选择端;如果该差值大于等于0,则输出让选择器选择第一输入端的信号,否则输出让选择器选择第二输入端的信号。
在下文中,以传输模式有6种,N=5为例进行更详细的说明。
6种传输模式分别是16字、8字、4字、1字、半字和单字节传输模式,其中16字传输模式为最佳传输模式。
电路中共有减法器、比较器和选择器各5个;其中,减法器S1~S5的输出端各与比较器C1~C5的输入端相连;C1~C5的输出端分别与选择器E1~E5的选择端相连;
各选择器E1~E5的输入端所接信号如下:
E1:第一输入端为单字节传输方式的使能信号;第二输入端为半字传输方式的使能信号;
E2:第一输入端连接E1的输出端;第二输入端为1字传输模式的使能信号;
E3:第一输入端连接E2的输出端;第二输入端为4字传输模式的使能信号;
E4:第一输入端连接E3的输出端;第二输入端为8字传输模式的使能信号;
E5:第一输入端连接E4的输出端;第二输入端为最佳传输模式——即16字传输模式的使能信号;
E5的输出端接DMA控制模块,该模块根据E5的输出信号采用相应的传输模式进行突发传输。
首先,当要进行突发传输时,DMA控制模块控制数据长度计算模块计算需要传输的数据的长度(以字节为单位),并将该长度值送入各减法器的输入端;减法器S1~S5分别用该长度值减去2字节、4字节、16字节、32字节和64字节,所得到的差值分别相应送给比较器C1~C5的输入端;各比较器将输入的差值与0进行比较,如果大于等于0,则输出给选择器的信号为选择第二输入端的信号;否则输出选择第一输入端的信号。
本次“突发”传输结束后,由数据长度计算单元计算剩余数据的长度,然后再将长度输入给自适应模块。
当如图1所示的电路产生作用时,任意长度的传输都可以被DMA控制器接受。当剩余传输长度大于16字时,DMA控制器自动选择效率最高的16字突发传输模式。当剩余传输长度不足16字,但是大于8字时,DMA控制器自动调整为传输效率较高的8字突发传输模式,依此类推。当剩余的长度不足一个字时,DMA控制器也会根据剩余的传输长度自动调整为半字或单字节的传输模式。由此可知,本DMA控制器可以根据传输的总长度自适应调整传输类型,以保证DMA传输总能以最高效的方式进行。
在实际应用中,可以为每个总线接口各配置一个自适应模块。
本发明还提供了一种在上述软/硬件复用的DMA控制器中的DMA传输方法,包括:
当CPU要进行DMA传输时的步骤为:
(A)CPU在DMA控制器中选择一个通道;
(B)CPU通过将该通道的硬件请求使能状态寄存器的值置为表示“不允许硬件请求”的值,来关闭该通道的硬件请求使能;并通过将软件请求寄存器的值置为“有软件请求”,来向DMA控制模块发出DMA传输请求;
当DMA控制模块软件请求寄存器的值改变为“有软件请求”时,执行(C);
(C)DMA控制模块根据通道状态寄存器的值判断通道是否空闲,当通道状态寄存器的值为“通道被占用”时,返回(C),即继续探询通道状态寄存器的值;通道状态寄存器的值表示“通道可用”时,执行步骤(D);
(D)在步骤(A)所选的通道中进行DMA传输,并将通道状态寄存器的值置为“通道被占用”;在传输过程中,如果CPU要取消传输,则将软件请求寄存器的值置为“无软件请求”;
当DMA控制模块发现软件请求寄存器的值改变为“无软件请求”时,或传输完成后执行步骤(E);
(E)DMA控制模块将硬件请求使能状态寄存器的值置为“允许硬件请求”的值;将通道状态寄存器的值置为“通道可用”;将软件请求寄存器的值置为“无软件请求”。
当硬件要进行DMA传输时的步骤为:
(a)硬件向DMA控制模块请求进行DMA传输;
(b)DMA控制模块根据硬件请求使能状态寄存器的值判断能否可以进行硬件请求;如果硬件请求使能状态寄存器的值为“允许硬件请求”,则执行下一步;否则返回(b),即继续探询硬件请求使能状态寄存器的值;
(c)DMA控制模块根据通道状态寄存器的值判断通道是否空闲,当通道状态寄存器的值为“通道被占用”时,返回(c),即继续探询通道状态寄存器的值;否则执行步骤(d);
(d)在硬件相连的通道中进行DMA传输,并将通道状态寄存器的值置为“通道被占用”;传输完成后,将通道状态寄存器的值置为“通道可用”。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (12)
1、一种实现软/硬件复用的直接内存访问DMA控制器,包括DMA控制模块,用于控制DMA传输;其特征在于:
所述DMA控制模块用于接收硬件的DMA传输请求,并判断是否可以进行硬件请求;如果可以则进行所述硬件发起的DMA传输;还用于在CPU需要发出DMA传输请求时,向CPU提供通道的使用信息;并在接收CPU的DMA传输请求后,利用CPU所选择的空闲通道进行DMA传输,同时停止处理对该通道的硬件请求直到所述CPU发起的DMA传输完成或终止。
2、如权利要求1所述的DMA控制器,其特征在于,还包括:
硬件请求使能状态寄存器,用于存放表示硬件请求使能状态的数值;包括“允许硬件请求”和“不允许硬件请求”的值;由CPU在发起DMA传输时配置为“不允许硬件请求”的值;
通道状态寄存器,用于存放表示通道状态的数值,包括表示“通道被占用”的值和表示“通道可用”的值;
DMA控制模块还用于在要进行DMA传输时,探询通道状态寄存器的值是否为“通道可用”,如果是则通过该通道进行DMA传输,并将所述通道状态寄存器的值置为表示“通道被占用”的值;否则继续探询所述通道状态寄存器的值;并当该通道上的DMA传输完成或中断后,将通道状态寄存器的值置为表示“通道可用”的值;
所述DMA控制模块判断是否可以进行硬件请求是指探询硬件请求使能状态寄存器的值,如果为“允许硬件请求”的值则表示可以进行硬件请求;否则不处理所述硬件请求,继续探询;
所述DMA控制模块向CPU提供通道的使用信息是指通过所述通道状态寄存器的值告知CPU通道是否空闲;
所述DMA控制模块在完成或中断CPU发起的DMA传输后将硬件请求使能状态寄存器的值置为“允许硬件请求”。
3、如权利要求2所述的DMA控制器,其特征在于,还包括:
软件请求寄存器,用于存放表示CPU是否发起DMA传输请求的数值,包括表示“有软件请求”和“无软件请求”的值,由CPU在发起DMA传输时配置为“有软件请求”的值;
所述DMA控制模块在CPU发起的DMA传输完成后将该通道的软件请求寄存器的值置为“无软件请求”,还用于当传输过程中软件请求寄存器的值被CPU置为“无软件请求”时,终止该通道的DMA传输;
所述DMA控制模块接收CPU的DMA传输请求是指监控软件请求寄存器,当其值被CPU配置为表示“有软件请求”的值时,表示接收到CPU所发起的DMA传输请求。
4、如权利要求1所述的DMA控制器,其特征在于:所述DMA控制模块控制各通道以时分复用的方式占用总线。
5、如权利要求1所述的DMA控制器,其特征在于:还包括数据长度计算模块和至少一个自适应模块;
所述DMA控制模块还用于在进行突发传输时控制所述数据长度计算模块计算待传输数据的长度,并发送给自适应模块;并根据所述自适应模块选择的突发传输模式进行突发传输;
所述至少一个自适应模块,用于根据传输数据的长度自动选择效率最高的突发传输模式并输出给所述DMA控制模块。
6、如权利要求5所述的DMA控制器,其特征在于:所述自适应模块包括N个选择单元,N的值为突发传输可采用的传输模式种类数减一;
每个选择单元用于根据传输数据的长度在第一传输模式和第二传输模式中选择一种;其中,第二传输模式的效率高于第一传输模式;当数据长度大于等于第二传输模式一次所能传输的数据长度时,选择第二传输模式;否则选择第一传输模式;
第一个选择单元中,第一传输模式为效率最低的传输模式;第二传输模式为效率倒数第二低的传输模式;
其它各选择单元的第一传输模式为前一单元所选的传输模式;
最后一个选择单元的第二传输模式为最佳的传输模式;所述最后一个选择单元输出所选的传输模式给DMA控制模块。
7、如权利要求6所述的DMA控制器,其特征在于:各选择单元包括一个减法器、一个比较器和一个选择器;
所述选择器有一个输出端,第一、第二输入端和一个选择端,选择器根据选择端的信号,选择第一、第二输入端中的一路信号进行输出;
所述选择器的第一输入端输入第一传输模式的使能信号;第二输入端输入第二传输模式的使能信号;
最后一个选择单元的选择器输出端与DMA控制模块相连;除此之外,其它各选择单元的选择器的输出端与下一选择单元选择器的第一输入端相连;
所述减法器用于得到数据长度值与第二传输模式所能传输字节数的差值,并输出给比较器;
所述比较器将所述差值与0进行比较,并输出相应信号给所述选择器的选择端;如果该差值大于等于0,则输出让选择器选择第二输入端的信号,否则输出让选择器选择第一输入端的信号。
8、如权利要求1所述的DMA控制器,其特征在于:所述DMA控制模块在外设与内存间进行DMA传输期间,当外设与DMA控制器间传输的字节数达到外设缓存空间大小时,给外设完成本次外设与DMA控制器间的DMA传输请求的信号;当DMA控制器与内存间传输的字节数达到内存缓存空间大小时,向CPU发出通道完成传输中断请求。
9、如权利要求8所述的DMA控制器,其特征在于,还包括:
外设缓存大小寄存器,用于存放外设的缓存空间大小的数值;
内存缓存大小寄存器,用于存放内存中缓存空间大小的数值;
第一计数器,用于在一次外设与DMA控制器间的DMA传输中对外设与DMA控制器间传输的字节数进行计数;
第二计数器,用于在一次DMA传输中对DMA控制器与内存间传输的字节数进行计数;
所述DMA控制模块通过判断第一计数器的计数值是否小于外设缓存大小寄存器中的数值,来判断外设与DMA控制器间传输的字节数是否达到外设缓存空间的大小;通过比较第二计数器的计数值是否小于内存缓存大小寄存器中的数值,来判断DMA控制器与内存间传输的字节数是否达到内存缓存空间的大小。
10、如权利要求1所述的DMA控制器,其特征在于,还包括:
源地址变化方式寄存器,用于存放表示传输中源地址变化方式的数值;
目的地址变化方式寄存器用于存放表示传输中目的地址变化方式的数值;其中,1表示增加,2表示减少,其它数值表示不变;
第三计数器,用于存放DMA传输的源地址;
第四计数器,用于存放DMA传输的目的地址;
所述DMA控制模块按照第三计数器中的源地址和第四计数器中存放的目的地址进行DMA传输;还用于根据源地址变化方式寄存器及目的地址变化方式寄存器的值来控制第三、第四计数器中的源/目的地址的数值递增、或递减、或不变。
11、一种在权利要求1所述的DMA控制器中进行DMA传输的方法,包括:
当CPU要进行DMA传输时的步骤为:
(A)CPU在DMA控制器中选择一个通道;
(B)CPU关闭所选通道的硬件请求使能,并向DMA控制模块发出DMA传输请求;
(C)DMA控制模块判断通道是否空闲,如果不空闲则返回(C);否则,执行步骤(D)
(D)DMA控制模块在步骤(A)所选的通道中进行DMA传输,传输完成后执行步骤(E);
(E)开放所述通道的硬件请求使能;
当硬件要进行DMA传输时的步骤为:
(a)硬件向DMA控制模块请求进行DMA传输;
(b)DMA控制模块判断能否可以进行硬件请求;如果硬件请求使能被关闭则返回(b);否则执行下一步;
(c)DMA控制模块判断通道是否空闲,如果不空闲则返回(c);否则执行步骤(d);
(d)DMA控制模块进行DMA传输,直到传输完成。
12、如权利要求11所述的方法,其特征在于,步骤(C)中,如果CPU发出取消DMA传输的要求,则DMA控制模块终止传输,执行(E)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100986701A CN100481045C (zh) | 2007-04-24 | 2007-04-24 | 一种实现软/硬件复用的dma控制器和传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100986701A CN100481045C (zh) | 2007-04-24 | 2007-04-24 | 一种实现软/硬件复用的dma控制器和传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101034383A CN101034383A (zh) | 2007-09-12 |
CN100481045C true CN100481045C (zh) | 2009-04-22 |
Family
ID=38730946
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100986701A Expired - Fee Related CN100481045C (zh) | 2007-04-24 | 2007-04-24 | 一种实现软/硬件复用的dma控制器和传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100481045C (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105988953B (zh) * | 2015-02-12 | 2019-03-12 | 深圳市中兴微电子技术有限公司 | 一种直接内存存取dma控制器及数据传输的方法 |
CN107844435A (zh) * | 2017-11-08 | 2018-03-27 | 北京锐安科技有限公司 | 一种缓存系统、方法及装置 |
EP3644192B1 (en) | 2018-08-23 | 2022-04-20 | Shenzhen Goodix Technology Co., Ltd. | Master chip, slave chip, and dma transfer system between chips |
CN109857686B (zh) * | 2019-03-26 | 2020-12-29 | 北京简约纳电子有限公司 | 一种dma数据同步传输变异步传输的方法 |
CN111831595A (zh) * | 2020-06-30 | 2020-10-27 | 山东云海国创云计算装备产业创新中心有限公司 | 一种dma传输方法及相关装置 |
CN112269749B (zh) * | 2020-10-30 | 2022-10-25 | 厦门紫光展锐科技有限公司 | I2c通信系统 |
-
2007
- 2007-04-24 CN CNB2007100986701A patent/CN100481045C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101034383A (zh) | 2007-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100440184C (zh) | 一种能同时进行读写操作的dma控制器及传输方法 | |
CN100481045C (zh) | 一种实现软/硬件复用的dma控制器和传输方法 | |
US9201816B2 (en) | Data processing apparatus and a method for setting priority levels for transactions | |
CN1554050B (zh) | 具有自适应优先权控制器的数据处理器及其方法 | |
US7624221B1 (en) | Control device for data stream optimizations in a link interface | |
CN102282546B (zh) | 资源控制 | |
CN111210136B (zh) | 一种机器人任务调度的方法及服务器 | |
CN101218570A (zh) | 在直接存储器存取任务请求之间进行仲裁的装置和方法 | |
US20090024778A1 (en) | Memory controller, bus system, integrated circuit, and control method of integrated circuit | |
CN113468084A (zh) | 一种多模式dma数据传输系统 | |
CN101046786A (zh) | 一种实现高效dma传输的dma控制器及传输方法 | |
CN106155814A (zh) | 一种支持多种工作模式的可重构运算单元及其工作方式 | |
JP5040050B2 (ja) | 複数チャネルdmaコントローラおよびプロセッサシステム | |
CN101339541A (zh) | 一种dma数据传输方法及dma控制器 | |
CN101324870A (zh) | 处理器系统、总线控制方法和半导体装置 | |
JP2004220597A (ja) | センダ・レシーバ要求再施行方法および装置 | |
CN100539538C (zh) | 具有链表处理器的存储器管理系统 | |
CN116192772A (zh) | 一种基于空间缓存的cpu收发包调度装置及方法 | |
JP2008541276A (ja) | 同時読み出し応答確認拡張ダイレクト・メモリ・アクセス・ユニット | |
CN101169766A (zh) | 动态建立直接内存访问通路的方法及系统 | |
US10318457B2 (en) | Method and apparatus for split burst bandwidth arbitration | |
CN101599049B (zh) | 控制dma访问不连续物理地址的方法及dma控制器 | |
CN107018087A (zh) | 数据通信方法及系统 | |
CN101278277B (zh) | 运算处理装置 | |
CN109145397A (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: 20090422 Termination date: 20120424 |