采用直接存储器访问方式进行数据传送的方法

文档序号:7601145阅读:200来源:国知局
专利名称:采用直接存储器访问方式进行数据传送的方法
技术领域
本发明涉及一种数据传送的方法,尤其涉及一种采用直接存储器访问方式进行数据传送的方法。
背景技术
移动终端的发展趋势要求移动终端具有更长的待机时间和更小的体积。更长的待机时间要求移动终端在芯片的设计上满足更低的功耗,软件更精简,效率更高;更小的体积需要移动终端所使用的芯片更加微型化。
移动终端的CPU(Central Processing Unit,中央处理器)采用DMA(DirectMemory Access,直接存储器访问)方式对外设进行写入和读出操作,DMA方式是一种高速的数据传输操作,允许在外设和内存之间直接读写数据,即不通过CPU,也不需要CPU干预,整个数据传输操作在DMA控制器的控制下进行。CPU除了在数据传输的开始和结束时作一些处理外,在传输过程中CPU可以进行其它的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作的状态。DMA一般有多个彼此独立的通道,允许进行不同的访问控制,可以进行不同内容的DMA传输,DMA可以以CPU时钟的速度进行数据吞吐,具有较高的数据吞吐率。
目前采用DMA方式对地址空间中的几块内存中的数据进行传送时的方法是CPU首先在DMA通道的中断服务程序或应用程序中设定该通道的DMA传输特性,传输特性中包括源地址、目的地址和控制特性等,DMA发起通道传送,传送结束后触发中断,在该通道的中断服务程序或应用程序中重新设定该DMA通道下一次的DMA传输特性(包括源地址、目的地址和控制特性等),然后再次启动此通道。这种方式需要反复的结束和开启DMA通道,CPU需要频繁的进行干预,其中DMA通道的结束由DMA的硬件根据控制特性中初始设定的传送大小来控制,DMA通道的启动需要在CPU的控制下通过软件来实现,频繁的结束和启动DMA通道会带来一定的软件开销,过多的占用CPU的处理时间,造成系统性能的下降。
目前采用DMA方式进行的传输都是单向传输,由于外设都是能同时收发数据的,因此外设在进行数据双向收发时就需要占用两个DMA通道,一个DMA通道用来接收外设到内存的数据,另一个DMA通道用来发送内存到外设的数据。两个通道可以认为是各自独立的,各自完成的接收或发送功能。由于DMA通道的资源是有限的,因此当DMA需要连接多个外设时,就有可能会出现通道资源不够用的情况。

发明内容
本发明的目的在于提供一种采用直接存储器访问方式进行数据传送的方法,解决了现有技术中采用DMA方式进行数据传送时需要反复的结束和开启DMA通道的问题以及采用DMA方式同时收发数据时需要占用两个DMA通道的问题。
为解决上述问题,本发明提供以下技术方案一种采用直接存储器访问方式进行数据传送的方法,包括以下步骤A、设置由两个链表表项构成的环形链表,链表表项内的内容包括源地址、目的地址、链路地址索引和通道传输控制,两个链表表项之间通过链路地址索引相互链接;B、处理器将所述两个链表表项中的一个链表表项加载到直接存储器访问控制器;C、直接存储器访问控制器根据通道传输控制中配置的传送数据量,将数据从源地址传送到目的地址,并在该数据传送完成后根据链路地址索引加载另一个链表表项进行数据传送,直到所有数据传送结束。
所述步骤C具体包括以下步骤C1、直接存储器访问控制器根据通道传输控制中配置的传送数据量,将数据从源地址传送到目的地址;C2、数据传送完成后,直接存储器访问控制器向处理器发出中断信号,并在通道的状态寄存器中记录本次数据传送的结果,若传送成功则进行步骤C3,若传送失败则结束传送过程,并通知上层软件;C3、中断服务程序清除此中断信号,直接存储器访问控制器根据链表表项中的链路地址索引加载另一个链表表项的内容进行数据传送,直到所有数据传送结束。
所述环形链表可以配置成单向传送模式或双向收发模式。
在单向传送模式中,当数据是由内存向外设传送时,在步骤C中处理器将最后一次传送所对应的链表数据设置为空,数据传送结束;当数据是由外设向内存传送时,在步骤C中若外设寄存器在设定的时间内没有收到外设的数据,则触发超时中断,外设寄存器将剩下的数据传输完毕后关闭外设和直接存储器访问通道。
在双向收发模式中,若从外设到内存的数据接收比从内存到外设的数据发送先结束,则将数据接收方向所对应的链表表项中的源地址和目的地址交换,将环形链表配置为从内存到外设的单向传送模式;若从内存到外设的数据发送比从外设到内存的数据接收先结束,则将数据发送方向所对应的链表表项中的源地址和目的地址交换,将环形链表配置为从外设到内存的单向传送模式。
由于本发明采用了以上技术方案,故具有以下有益效果本发明配置了一个环形链表来完成DMA方式的数据传送,通过对环形链表中两个链表表项的内容不同配置,可以在一条DMA通道上进行数据的单向传送或双向收发,在单向传送模式下,可以进行快速连续的DMA传送,在双向收发模式下,DMA可以连接更多的外设,从而充分的发挥了DMA的效能,较少的占用了CPU的处理时间,使整个系统可以工作在更低的频率下,降低了系统的功耗,能够使移动终端具有更长的待机时间。


图1为本发明采用DMA方式进行数据传送的流程图;图2为本发明在进行数据连续接收时的示意图;图3为本发明的环形链表示意图;图4为本发明在进行数据连续发送时的示意图。
具体实施例方式
下面结合附图对本发明作进一步详细的描述。
图1所示为本发明采用DMA方式进行数据传送的流程图,其过程如下设置一由两个链表表项构成的环形链表,链表表项的内容包括源地址、目的地址、链路地址索引和通道传输控制,两个链表表项之间通过链路地址索引相互链接;将其中一个链表表项的内容加载到DMA控制器中,根据链表表项内的通道传输控制中配置的传送数据量,将数据从源地址传送到目的地址;数据传送完毕后,DMA控制器根据链表表项中的链路地址索引加载另一个链表表项的内容,进行数据传送,循环加载两个链表表项中的内容,直到数据传送结束。
上述数据传送过程可根据需要配置成单向传送模式或双向收发模式,单向传送模式下的DMA传输可将数据在外设与内存之间进行单向的连续传送,双向收发模式下的DMA传输能够利用单DMA通道进行数据的双向收发。
单向传送模式下的DMA传输过程可分为从外设到内存的数据接收过程和从内存到外设的数据发送过程,下面分别对其予以说明(一)从外设到内存的数据接收过程图2所示为从外设到内存的数据接收过程中的数据流和控制流,其中虚线表示控制流,实线表示数据流,控制流表示CPU对外设和DMA的配置信息,DMA反馈给CPU的中断信息等,数据流表示DMA把数据从外设搬进内存。
图3所示为所配置的环形链表,在环形链表中,链表表项1的各项参数设置为源地址1为图2中外设的数据寄存器的地址,目的地址1为图2中的RAM块1的地址,LLI1指向的是链表表项2在内存中的存储地址,通道传输控制1配置的是此次传输时的控制字,其中设定了本次的搬移数据大小,控制字中所设定的搬移数据大小就是图2中RAM块1空间的大小。
链表表项2的各项参数设置为源地址2为图2中外设的数据寄存器的地址,目的地址2为图2中的RAM块2的地址,LLI2指向的是链表表项1在内存中的存储地址,通道传输控制2配置的是此次传输时的控制字,其中设定了本次的搬移数据大小,控制字中所设定的搬移数据大小就是图2中RAM块2空间的大小。
环形链表配置完成后,CPU将链表表项1中的内容加载到DMA控制器中,DMA控制器中有一个LLI(Linked List Item,链路地址索引)控制寄存器,链表表项1中的LLI1被加载到LLI控制寄存器中,此时LLI控制寄存器中指向的是链表表项2的地址,启动该DMA通道进行数据的搬移,根据链表表项1中的目的地址1,DMA将数据搬移到RAM块1,由于通道传输控制1中的控制字所设定的搬移数据大小正好等于RAM块1空间的大小,因此当DMA搬完指定的数据时刚好装满RAM块1。DMA控制器向CPU发出一个中断信号,并在相应通道的状态寄存器中反映本次搬移的结果。
中断服务程序清除DMA控制器发出的中断信号,DMA控制器根据LLI1所指向的链表表项2的地址自动将链表表项2中的内容加载到DMA控制器中,根据所加载的链表表项2中的目的地址2,DMA将数据搬移到RAM块2,由于通道传输控制2中的控制字所设定的搬移数据大小正好等于RAM块2空间的大小,因此当DMA搬完指定的数据时刚好装满RAM块2。DMA控制器向CPU发出一个中断信号,并在通道的状态寄存器中反映本次搬移的结果。中断服务程序清除DMA控制器发出的中断信号,DMA控制器根据LLI2所指向的链表表项1的地址自动将链表表项1中的内容加载到DMA控制器中并启动DMA搬移。
根据环形链表的内容循环加载链表表项1和链表表项2,直到数据全部传送完毕。当外设的数据寄存器在设定的时间内没有收到数据时,则触发超时中断处理,此时会将外设的数据寄存器中目前剩下的数据传输完毕,并关闭外设和此DMA通道。
可以通过合理的设置RAM1和RAM2的大小(一般可以设置为相同大小),使得从外设向其中一个RAM块搬移的过程中,能够给CPU留有充分的时间来处理另一个RAM块中的数据,从而在新的数据到来时,旧的数据已经处理完了。
(二)从内存到外设的数据发送过程图4所示为从外设到内存的数据接收过程中的数据流和控制流,其中虚线表示控制流,实线表示数据流,控制流表示CPU对外设和DMA的配置信息,DMA反馈给CPU的中断信息等,数据流表示DMA把数据从内存搬移到外设。
将图3所示的环形链表的链表表项1的各参数设置为源地址1为内存RAM块1的地址,目的地址1为外设的接收数据寄存器的地址,LLI1指向的是链表表项2的地址,通道传输控制1配置的是此次传输时的控制字,包括搬移的数据大小等,控制字中所设定的搬移数据大小就是RAM块1空间的大小。链表表项2的各参数设置为源地址2为内存RAM块2的地址,目的地址2为外设的接收数据寄存器的地址,LLI2指向的是链表表项1的地址,通道传输控制2中所设定的搬移数据大小就是RAM块2空间的大小。
环形链表配置完成后,CPU将链表表项1中的内容加载到DMA通道控制器中,DMA通道将数据从RAM块1搬移到外设的数据寄存器中,所搬移的数据大小等于RAM块1空间的大小。在RAM块1内的数据搬移完成后,DMA会触发一个中断,并在通道的状态寄存器中反映此次搬移是否成功,中断服务程序清除DMA控制器发出的中断信号,同时DMA控制器根据LLI1所指向的链表表项2的地址自动将链表表项2中的内容加载到DMA控制器中,根据所加载的链表表项2的内容,DMA通道将RAM块2内的数据搬移到外设的数据寄存器中,所搬移的数据大小等于RAM块2空间的大小。当搬移完毕后,DMA通道控制器中又会根据LLI2所指向的链表表项1的地址自动加载链表表项1的内容,开始对RAM块1中的数据进行DMA搬移,按照这种方式,数据就可以周而复始的进行搬移,从而实现最小的CPU干预。
由于CPU是数据的发送方,DMA通道只是协助进行相应的数据搬移,因此CPU清楚的知道最后一块数据所在的内存位置,CPU将最后一次DMA传输时对应的链表数据设置为空,即可结束整个DMA传输。
双向收发模式下的DMA传输主要用于收发双方数据的速率均为固定速率的情况,利用一条DMA通道对两个内存块中的数据进行交叉读写操作,采用环形链表方式将读操作和写操作的控制信息以链表的形式连接起来,当环形链表中的一个链表表项传送完毕后,DMA控制器会向CPU发出一个中断信号,并在相应的状态寄存器中保存本次传送的结果(成功或失败)。同时,DMA控制器会根据当前的LLI控制寄存器中的内容自动从RAM的空间中加载另一个链表表项。这样反复加载读操作和写操作所对应的链表表项,即可实现利用一条DMA通道对两个内存块中的数据进行交叉读写操作。
下面以一个外设到内存的数据收发过程的DMA搬移为例,来说明采用单DMA通道进行数据双向收发的过程。
将图3所示的环形链表的链表表项1的各参数设置为源地址1为外设的数据寄存器的地址,目的地址1为RAM块1的地址,LLI1指向的是链表表项2的地址,通道传输控制1配置的是此次传输时的控制字,其中设定了搬移的数据大小,控制字中所设定的搬移数据大小正好等于RAM块1空间的大小。
链表表项2的各参数设置为源地址2为RAM块2的地址,目的地址2为外设的数据寄存器的地址,LLI2指向的是链表表项1的地址,通道传输控制2配置的是此次传输时的控制字,其中设定了搬移的数据大小,控制字中所设定的搬移数据大小正好等于RAM块2空间的大小。
环形链表配置完成后,CPU将链表表项1中的内容加载到DMA控制器中,然后启动该DMA通道进行数据的搬移,根据链表表项1中的源地址1和目的地址1,DMA将外设的数据寄存器内的数据搬移到RAM块1,由于通道传输控制1中的控制字所设定的搬移数据大小正好等于RAM块1空间的大小,因此当DMA搬完指定的数据时,RAM块1的空间刚好被装满,DMA控制器向CPU发出一个中断信号并在通道的状态寄存器中反映本次搬移的结果是否成功,若失败,传输结束并通知上层软件,若成功,中断服务程序清除此中断,同时DMA控制器根据LL1中的链表地址自动加载链表表项2。
根据所加载的链表表项2中的源地址2和目的地址2,DMA通道将数据从RAM块2搬移到外设的数据寄存器,所搬移的数据大小正好等于RAM块2空间的大小,DMA控制器向CPU发出一中断信号并在通道的状态寄存器中反映本次搬移的结果,中断服务程序将清除此中断信号,退出中断。在DMA发出中断的同时,DMA控制器会根据LLI2中的链表表项1的地址自动将将链表表项1的内容再次加载到DMA的控制器中,启动DMA搬移,再次对RAM块1进行写操作。
根据环形链表的内容循环加载链表表项1和链表表项2,直到对RAM块1进行写操作和对RAM块2进行读操作中的任何一方的数据搬移完毕,对于发送而言,由于CPU是数据的发起方,因此CPU可以明确的知道什么时候发出最后一块数据,可以通过在内存中设置一个结束标志位来指明,在中断服务程序中每次都先检查一下结束标志位的状态,就可以知道是否发送要结束了。
对于接收而言,可以根据该外设接收超时中断来决定,即在该外设设定的时间内,外设端口不再有新的数据到来了,则认为接收结束了,通过中断服务程序完成接收操作。
剩下的一方此时重新配置环形链表,将双向收发模式转换成单向传送模式,如果是发送结束了,则可以把原来用于发送的那块RAM重新当成接收RAM来使用,进行数据搬移。如果是接收结束了,则可以把原来用于接收的那块RAM块重新当成发送RAM来使用,进行数据搬移。
若转换后的单向传送模式为从内存向外设的数据发送过程,则需将环形链表中链表表项1的各参数设置为源地址1为内存中RAM块1的地址,目的地址1为外设的数据寄存器的地址,LLI1指向的是链表表项2的地址,通道传输控制1配置的是此次传输时的控制字,其中设定了搬移的数据大小,所设定的搬移数据大小就是RAM1空间的大小,链表表项2的内容不变。
若转换后的单向传送模式为从外设向内存的数据接收过程,则需将环形链表中链表表项2的各参数设置为源地址2为外设的接收数据寄存器的地址,目的地址2表示内存中RAM块2的地址,LLI2指向的是链表表项1的地址,通道传输控制2配置的是此次传输时的控制字,其中设定了搬移的数据大小,所设定搬移的数据大小就是RAM2空间的大小,链表表项1的内容不变。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
权利要求
1.一种采用直接存储器访问方式进行数据传送的方法,其特征在于包括以下步骤A、设置由两个链表表项构成的环形链表,链表表项内的内容包括源地址、目的地址、链路地址索引和通道传输控制,两个链表表项之间通过链路地址索引相互链接;B、处理器将所述两个链表表项中的一个链表表项加载到直接存储器访问控制器;C、直接存储器访问控制器根据通道传输控制中配置的传送数据量,将数据从源地址传送到目的地址,并在该数据传送完成后根据链路地址索引加载另一个链表表项进行数据传送,直到所有数据传送结束。
2.根据权利要求1所述的采用直接存储器访问方式进行数据传送的方法,其特征在于所述步骤C具体包括以下步骤C1、直接存储器访问控制器根据通道传输控制中配置的传送数据量,将数据从源地址传送到目的地址;C2、数据传送完成后,直接存储器访问控制器向处理器发出中断信号,并在通道的状态寄存器中记录本次数据传送的结果,若传送成功则进行步骤C3,若传送失败则结束传送过程,并通知上层软件;C3、中断服务程序清除此中断信号,直接存储器访问控制器根据链表表项中的链路地址索引加载另一个链表表项的内容进行数据传送,直到所有数据传送结束。
3.根据权利要求1所述的采用直接存储器访问方式进行数据传送的方法,其特征在于所述环形链表可以配置成单向传送模式。
4.根据权利要求3所述的采用直接存储器访问方式进行数据传送的方法,其特征在于在所述单向传送模式中,当数据是由内存向外设传送时,在所述步骤C中处理器将最后一次传送所对应的链表数据设置为空,数据传送结束。
5.根据权利要求3所述的采用直接存储器访问方式进行数据传送的方法,其特征在于在所述单向传送模式中,当数据是由外设向内存传送时,在所述步骤C中若外设寄存器在设定的时间内没有收到外设的数据,则触发超时中断,外设寄存器将剩下的数据传输完毕后关闭外设和直接存储器访问通道。
6.根据权利要求1所述的采用直接存储器访问方式进行数据传送的方法,其特征在于所述环形链表可以配置成双向收发模式。
7.根据权利要求6所述的采用直接存储器访问方式进行数据传送的方法,其特征在于在所述双向收发模式中,若从外设到内存的数据接收比从内存到外设的数据发送先结束,则将数据接收方向所对应的链表表项中的源地址和目的地址交换,将环形链表配置为从内存到外设的单向传送模式。
8.根据权利要求7所述的采用直接存储器访问方式进行数据传送的方法,其特征在于若外设寄存器在设定的时间内没有收到外设的数据,则从外设到内存的数据接收结束。
9.根据权利要求6所述的采用直接存储器访问方式进行数据传送的方法,其特征在于在所述双向收发模式中,若从内存到外设的数据发送比从外设到内存的数据接收先结束,则将数据发送方向所对应的链表表项中的源地址和目的地址交换,将环形链表配置为从外设到内存的单向传送模式。
10.根据权利要求9所述的采用直接存储器访问方式进行数据传送的方法,其特征在于根据在内存中设定的结束标志位的状态来判断从内存到外设的数据发送是否结束。
全文摘要
本发明公开了一种采用直接存储器访问方式进行数据传送的方法,以解决现有技术中采用DMA方式进行数据传送时需要反复的结束和开启DMA通道的问题以及采用DMA方式同时收发数据时需要占用两个DMA通道的问题。该方法设置一由两个链表表项构成的环形链表,两个链表表项之间通过链路地址索引相互链接,处理器将一个链表表项加载到DMA控制器,DMA控制器根据通道传输控制中配置的传送数据量,将数据从源地址传送到目的地址,并在该数据传送完成后根据链路地址索引加载另一个链表表项进行数据传送,直到所有数据传送结束。本发明充分的发挥了DMA的效能,较少的占用了CPU的处理时间,使整个系统可以工作在更低的频率下,降低了系统的功耗。
文档编号H04Q7/32GK1797379SQ20041010253
公开日2006年7月5日 申请日期2004年12月24日 优先权日2004年12月24日
发明者马涛 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1