一种直接存储器访问控制器及传输数据的方法
技术领域
本发明涉及采用直接存储器访问(DMA)方式传输数据的方法,特别涉及一种DMA控制器及传输数据的方法。
背景技术
计算机系统和外部设备之间、或者计算机系统不同内存之间的数据传输通常通过中央处理器(CPU)和数字信号处理器(DSP)进行。CPU和DSP统称为微控制单元(MCU),MCU可以采用程控法或者中断法控制与外部设备之间的数据传输,但是这两种数据传输的方式都比较慢。当高速外部设备和计算机系统内存之间、或者计算机系统不同的内存之间进行大量数据快速传输时,这两种数据传输的方式就在一定程度上限制了数据传输的速率。
为了提高计算机系统和外部设备之间、或者计算机系统不同内存之间数据传输的速度,出现了DMA。DMA是一种高速的数据传输操作,其允许计算机系统和外部设备之间、或者计算机系统不同内存之间直接读写数据。整个数据传输的操作在DMA控制器的控制下进行,MCU除了在数据传输开始和结束时,给出数据传输开始和结束的指令,在数据传输的过程中对数据传输不再进行其他的处理。这样,在大部分时间内,MCU处理其他过程和数据传输过程可以并行操作,使整个计算机系统的效率大大提高。
图1为现有技术的DMA控制器结构图,DMA控制器悬挂在计算机系统总线上,对数据传输过程进行控制。DMA控制器中包括:总线Slave接口101、DMA请求和响应接口102、控制逻辑和寄存器组103、信道逻辑和寄存器组104、总线Master接口105和中断请求逻辑接口106。
总线Slave接口101,计算机系统的MCU通过该接口来配置DMA控制器中的控制逻辑和寄存器组103以及信道逻辑和寄存器组104,使DMA实现各种数据传输的工作模式以及各个DMA控制器通道的参数设置。DMA请求和响应接口102主要用来处理计算机系统中的内存到外设、外设到内存以及外设到外设的DMA传送请求和应答信号。总线Master接口105,DMA通过该接口实现对挂接在计算机系统总线的内存以及外设中的数据进行传输。中断请求逻辑接口106,当DMA控制器的工作状态改变时,例如某通道传输结束或者失败,则通知MCU,MCU再来查询DMA控制器中的控制逻辑和寄存器组103,来实现相应的控制,从而完成DMA控制器和MCU的信息和数据的交互。
其中,控制逻辑和寄存器组103中包括六个寄存器,如图2所示:DMA中断状态寄存器(DMAIntStatus)201、DMA中断屏蔽寄存器(DMAIntMask)202、DMA传输结束寄存器(DMAIntTCStatus)203、DMA传输结束中断寄存器(DMAIntTCClear)204、DMA传输错误寄存器(DMAIntERRStatus205)以及DMA传输错误中断寄存器(DMAIntERRClear)206。DMAIntStatus201用于表示经过DMAIntMask202屏蔽后的DMA控制器通道的中断状态;DMAIntMask202用于表示对DMA控制器的各个通道设置中断屏蔽;DMAIntTCStatus203用于表示对应的DMA控制器通道传输数据结束了;DMAIntTCClear204用于清除对应的DMA控制器通道的传输结束中断标志;DMAIntERRStatus205用于表示对应的DMA控制器通道传输数据出错;DMAIntERRClear206用于清除对应的DMA控制器通道的传输出错中断标志。控制逻辑和寄存器组103就是采用这六个寄存器控制DMA控制器中的各个通道传输数据的。
中断请求逻辑接口106包括三根中断信号线:DMA通道传输错误中断信号(DMAINTERR)、DMA通道传输结束信号(DMAINTTC)以及DMA通道传输组合中断信号(DMAINTR)。DMAINTERR为DMA控制器通道传输出错的中断信号线;DMAINTTC为DMA控制器通道传输正确完成的中断信号线;DMAINTR表示DMA控制器通道传输中断,是DMAINTTC和DMAINTERR通过逻辑或操作得到的中断信号线。通过三根中断信号线,就可以实现DMA控制器和一个MCU的信息和数据的交互。
目前,使用DMA控制器传输数据的方式有两种。第一种方式:在一个计算机系统中通常使用多个DMA控制器,每个DMA控制器只隶属于一个MCU,由其所属的MCU来完成相应的控制和信息交互功能。第二种方式:在一个计算机系统中采用一个DMA控制器,利用客户(Client)/服务(Server)工作模式,其具体过程为:DMA由一个MCU单独控制,此MCU称之为DMA服务器(DMA Server),其他MCU则作为此DMA服务的请求者,即DMA客户器(DMA Client)。当DMA Client需要使用DMA控制器时,向DMA Server发出服务请求,由DMA Server配置并启动DMA控制器,在DMA控制器传送数据结束时,由DMA Server将DMA控制器传输数据的结果,以消息的方式,通知给DMA Client。
采用第一种方式传输数据,达不到有效的资源复用,增大了计算机系统的成本以及体积;采用第二种方式传输数据,需要DMA Server和DMAClient的参与,增大了延迟,降低计算机系统中MCU的响应和处理时间,从而降低了计算机系统的工作效率。
发明内容
有鉴于此,本发明的主要目的在于一方面提供一种DMA控制器,该DMA控制器能够减少所增大的计算机系统的成本和体积。
本发明另一方面提供一种传输数据的方法,该方法能够利用本发明提供的DMA控制器传输数据,提高计算机系统中MCU的响应和处理时间,提高计算机系统的工作效率。
根据上述目的,本发明的具体技术方案是这样实现的:
一种直接存储器访问DMA控制器,该DMA控制器挂接在计算机系统的总线上,包括:总线Slave接口、总线Master接口以及信道逻辑和寄存器组,该DMA控制器还包括:具有一组或一组以上寄存器DMAIntMask和DMAIntStatus的控制逻辑和寄存器组、以及具有对应一组或一组以上中断信号线DMAINTERR、DMAINTTC和DMAINTR的中断请求逻辑接口,一组寄存器DMAIntMask和DMAIntStatus以及对应的一组信号线DMAINTERR、DMAINTTC和DMAINTR控制DMA控制器中的通道,该通道分配给一个微控制单元MCU,其中,
总线Slave接口将接收到MCU发送的控制信号后转发给控制逻辑和寄存器组和信道逻辑和寄存器组;控制逻辑和寄存器组根据控制信号通过该MCU对应的一组寄存器DMAIntMask和DMAIntStatus设置给该MCU所分配通道的工作模式;信道逻辑和寄存器组设置给该MCU所分配通道的参数;设置完成后通过总线Master接口传输数据,传送数据完成后信道逻辑和寄存器组向中断请求逻辑接口发送该通道当前状态信号,中断请求逻辑接口通过该MCU对应的一组信号线DMAINTERR、DMAINTTC和DMAINTR通知MCU给该MCU所分配通道的状态。
所述的DMA控制器用于计算系统中的内存到内存的数据传输。
当所述的DMA控制器用于计算机系统中的内存到外设、外设到外设或者外设到内存的数据传输时,该DMA控制器还包括DMA请求和响应接口,用于接收来自外设的DMA请求信号,触发信道逻辑和寄存器组发起DMA传输,传输完毕后,发送应答信号给外设;
在所述设置完成后通过总线Master接口传输数据之前,所述的信道逻辑和寄存器组接收通过DMA请求和响应接口发送的来自外设的DMA请求信号。
所述控制逻辑和寄存器组具有的寄存器DMAIntMask和DMAIntStatus组数与计算机系统中的MCU个数相同;
所述中断请求逻辑接口具有的信号线DMAINTERR、DMAINTTC和DMAINTR组数与计算机系统中的MCU个数相同。
所述控制逻辑和寄存器组具有的寄存器DMAIntMask和DMAIntStatus组数比计算机系统中的MCU个数少一个;
所述中断请求逻辑接口具有的信号线DMAINTERR、DMAINTTC和DMAAINTR组数比计算机系统中的MCU个数少一个。
所述控制逻辑和寄存器组还具有寄存器DMAIntMask、DMAIntStatus、DMAIntTCStatus、DMAIntTCClear控制计算机系统中的一个MCU所分配的DMA控制器中的通道;
所述中断请求逻辑接口还具有的信号线DMAINTERR、DMAINTTC和DMAINTR与计算机系统中的一个MCU所分配的DMA控制器中的通道相对应。
一种传输数据的方法,预先给计算机系统中的MCU分配DMA控制器中的专用通道,该方法还包括:
A、计算机系统中的MCU向DMA控制器发送传输数据请求;
B、DMA控制器收到该请求后,用预先分配给该MCU的DMA控制器中的专用信道传输数据。
所述给MCU分配的专用通道通过设置的寄存器DMAIntMask和DMAIntStatus进行控制传输。
设置所述MCU对应一组信号线DMAINTERR、DMAINTTC和DMAINT,在步骤B之后,该方法还包括:
C、DMA控制器传输数据完毕后,通过所设置的该MCU对应的一组信号线DMAINTERR、DMAINTTC和DMAINT发送信号给MCU。
所述给MCU分配的专用通道的过程为:
给计算机系统的外设或内存设置DMA控制器中的专用信道,MCU控制计算机系统的外设或内存传输数据,将计算机系统的外设或内存对应的DMA控制器中的专用信道作为给MCU分配的专用信道。
从上述方案可以看出,由于本发明仅仅增加了专门控制DMA控制器中各个通道的寄存器以及信号线,就可以使计算机系统中的各个MCU采用DMA控制器中的专用通道传输数据。从而,和现有技术中给计算机系统中的各个MCU分别配置DMA控制器的方案一相比,大大减少所增大的计算机系统的成本和体积。更进一步地,和现有技术中计算机系统只用一个DMA控制器采用Client/Server工作模式的方案二相比,由于计算机系统中的MCU都可以通过专用的DMA控制器通道控制数据传输,而不像方案二中的是Client的MCU必须通过是Server的MCU才能控制数据传输,从而提高了计算机系统中MCU的响应和处理时间,提高计算机系统的工作效率。
附图说明
图1为现有技术的DMA控制器结构图;
图2为现有技术的控制逻辑和寄存器组的结构图;
图3为本发明的DMA控制器结构图;
图4为采用本发明的DMA控制器进行数据传输的方法流程图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚明白,以下举具体实施例并参照本发明,对本发明进行进一步详细的说明。
由于DMA控制器一般都具有多个通道,如8通道的DMA控制器或者16通道的DMA控制器,因此本发明可以采用以下方式控制DMA控制器中的通道分配:将DMA控制器中的通道设置为某个MCU专用,即某个MCU控制其具有的DMA控制器中的通道进行内存到内存的DMA数据传输,包括软件上层任务间的消息传送,MCU之间的消息交互,LCD的数据搬移,流媒体以及编解码数据的搬移等。
将DMA控制器中的通道设置为某个MCU专用的过程为:将DMA控制器中的通道设置为某个外设专用,根据计算机系统的需求,某个MCU控制了某个外设,就控制了给某个外设分配的DMA控制器通道。
DMA控制器中的通道可以预先分配好,也可以根据计算机系统当前应用的需要进行动态的修改。
举一个例子说明本发明是如何分配DMA控制器中的通道的。例如:设置给通用串行总线架构(USB)存储器的发送接口(TX)使用DMA控制器中的通道4,USB的接收接口(RX)使用DMA控制器中的通道5。
如果USB只由MCU0来控制,则MCU0控制DMA控制器中的通道4和通道5。如果USB只由MCU1来控制,则MCU1控制DMA控制器中的通道4和通道5。如果USB可以同时由MCU0和MCU1来控制,则当MCU0使用USB时,MCU0控制DMA控制器中的通道4和通道5,当MCU1使用USB时,MCU0控制DMA控制器中的通道4和通道5。
为了实现本发明对DMA控制器的通道进行分配,本发明的DMA控制器也进行了相应的更改,即在DMA控制器中的控制逻辑和寄存器组103中给DMA控制器中的各个通道增加了相应的2个寄存器,在中断请求逻辑接口106中给DMA控制器中的各个通道增加了相应的3根信号线。这里,本发明将在DMA控制器中给各个通道增加了的相应2个寄存器、相应3根信号线和相关控制电路的组合称之为一个MCU控制资源,用MCUx表示。其中,x表示MCU控制资源的通道号,从1开始计数,一个MCUx包括寄存器DMAIntStatusx、寄存器DMAIntMaskx、信号线DMAINTERRx、信号线DMAINTTCx、信号线DMAINTRx以及相关的控制电路。信号线DMAINTERRx、信号线DMAINTTCx和信号线DMAINTRx用于完成和对应的MCU交互握手信号,寄存器DMAIntStatusx和寄存器DMAIntMaskx用于配置MCU对应通道的工作模式和参数。
本发明DMA控制器对于多个MCU的支持通过增加对应的MCUx来实现。如果需要支持N个MCU,则需要增加N-1组MCUx。剩下的一个MCU可以用现有技术已有的寄存器DMAIntStatus、寄存器DMAIntMask、信号线DMAINTERR、信号线DMAINTTC以及信号线DMAINTR进行支持。通常,一个计算机系统中会有1~3个MCU,则N为1~3。MCUx中相关的控制电路可以通过拷贝的方式来实现,将现有技术中DMA控制器中和已有寄存器DMAIntStatus、寄存器DMAIntMask、信号线DMAINTERR、信号线DMAINTTC以及信号线DMAINTR相关的控制电路进行复制即可。x为几,就复制几减一组相关的控制电路。
另外,本发明还可以不使用DMA控制器的寄存器DMAIntStatus、寄存器DMAIntMask、信号线DMAINTERR、信号线DMAINTTC以及信号线DMAINTR,如果支持N个MCU,则增加N组MCUx。
图3为本发明的DMA控制器结构图,DMA控制器悬挂在计算机系统总线上,对数据传输过程进行控制。DMA控制器中包括:总线Slave接口101、DMA请求和响应接口102、控制逻辑和寄存器组303、信道逻辑和寄存器组104、总线Master接口105和中断请求逻辑接口306。其中,在控制逻辑和寄存器组303中增加了x组的寄存器DMAIntStatus以及寄存器DMAIntMask,用于对x个MCU管理的通道分别进行配置和设置参数;在中断请求逻辑接口306增加了x组的信号线DMAINTERR、信号线DMAINTTC和信号线DMAINTR,用于分别和x+1个MCU进行消息交互,使对应的MCU可以分别对所管理的DMA控制器通道进行配置。
当计算机系统中内存与内存之间传输数据时,整个传输数据的过程为:总线Slave接口101将接收到MCU发送的控制信号后转发给控制逻辑和寄存器组303和信道逻辑和寄存器组104;控制逻辑和寄存器组303根据控制信号通过该MCU对应的一组寄存器DMAIntMask和DMAIntStatus设置给该MCU所分配通道的工作模式;信道逻辑和寄存器组104设置给该MCU所分配通道的参数;设置完成后通过总线Master接口105传输数据,传送数据完成后信道逻辑和寄存器组104向中断请求逻辑接口发送该通道当前状态信号,中断请求逻辑接口106通过该MCU对应的一组信号线DMAINTERR、DMAINTTC和DMAINTR通知MCU给该MCU所分配通道的状态。
当计算机系统中的内存与外设之间或者外设与外设之间进行数据传输时,外设通过DMA请求和响应接102给信道逻辑和寄存器组104发送DMA请求信号,设置通道完成后信道逻辑和寄存器组104接收到该DMA请求信号后再传输数据,当完成本次DMA请求的数据传输后,通过DMA请求和响应接102给外设发送DMA应答信号。
为了使DMA控制器的通道在一个时刻内只能属于一个MCU控制,则在DMA控制器的驱动程序进行设置,该驱动程序设置在相应的MCU中,由软件保证DMA控制器中的通道之间互斥性,其处理过程如下:
A)配置寄存器DMAIntMaskx,其中x表示对应MCU使用的通道,使得每个DMA控制器通道只能属于一个MCU。
设MCUx对应的DMAIntMaskx的值为αx或αy,则需要满足如下的两个关系式:
ax*ay=0,ax,ay∈[0,N-1],X≠Y (2)
B)在DMA控制器的驱动程序的其他配置如现有技术的DMA。
如图4所示,图4为采用本发明的DMA控制器进行数据传输的方法流程图,其具体过程为:
步骤400、计算机系统中的某个MCU向DMA控制器发送传输数据请求;
步骤401、DMA控制器收到该请求后,用预先分配给该MCU的DMA控制器中的专用信道传输数据;
步骤402、DMA控制器传输数据完毕后,通过预先分配给该MCU对应的信号线发送信号给该MCU,结束。
由于本发明给计算机系统中的各个MCU采用DMA控制器中的专用通道传输数据,而仅仅增加了专门控制各个通道的寄存器以及信号线,和现有技术中给计算机系统中的各个MCU分别配置DMA控制器的方案一相比,大大减少所增大的计算机系统的成本和体积。更进一步地,和现有技术中计算机系统只用一个DMA控制器采用Client/Server工作模式的方案二相比,由于计算机系统中的MCU都可以通过专用的DMA控制器通道控制数据传输,而不像方案二中的是Client的MCU必须通过是Server的MCU才能控制数据传输,从而提高了计算机系统中MCU的响应和处理时间,提高计算机系统的工作效率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。