CN101710309A - 一种基于海量数据传输的dma控制器 - Google Patents
一种基于海量数据传输的dma控制器 Download PDFInfo
- Publication number
- CN101710309A CN101710309A CN200910242497A CN200910242497A CN101710309A CN 101710309 A CN101710309 A CN 101710309A CN 200910242497 A CN200910242497 A CN 200910242497A CN 200910242497 A CN200910242497 A CN 200910242497A CN 101710309 A CN101710309 A CN 101710309A
- Authority
- CN
- China
- Prior art keywords
- data
- transmission
- counter
- piece
- byte
- 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.)
- Granted
Links
Images
Landscapes
- Bus Control (AREA)
Abstract
本发明涉及一种基于海量数据传输的DMA控制器,通过对公共寄存器及字节计数器、块计数器以及子块数计数器的配置可实现字节数据传输、块数据传输和子块数据传输。字节数据传输和子块数据传输适用于数据源缓存区和数据目的缓存区不同的情况,块数据传输,适用于数据源缓存区与数据目的缓存区相同的情况,通过改变其逻辑地址就完成了传送过程。采用本发明的技术方案使数据源缓冲区与数据目的缓冲区数据可以在一个节拍内完成数据传输,大大加快了DMA传输的数据量,提高了传输效率。
Description
技术领域
本发明涉及一种DMA结构,尤其涉及一种基于海量数据传输的DMA控制器。
背景技术
在含有中央处理器(CPU)的系统中,为了提高CPU的使用效率和数据传输速率,在海量数据传输操作过程中,通常采用直接内存访问(Direct MemoryAccess Control,DMA)的方式对数据进行操作。而DMA的操作是通过DMA控制器(DMA Controller,DMAC)来实现的。DMA控制器有选择型和多路型两类,本发明涉及的DMA控制器为选择型,即物理上连接有多个硬件,而逻辑上只允许一个硬件,即在某段时间内只能为一个硬件服务。
如图1所示,在现有传统DMA结构中,外设发起的DMA传输通常是从外设1的FIFO中取数据放到外设2的FIFO中,外设发起的DMA传输通常是从外设的缓存中取数据放到总线上的存储器中;例如当有外设需要进行DMA传输时,当其缓存装满数据后,其通过DMA请求触发器想DMA控制器发起DMA传输请求。在此之前CPU已经将地址等控制信息配给DMA控制器内的地址寄存器中,当DMA控制器接到DMA传输请求时,其向CPU发起总线占用请求。CPU通常在执行完当前指令后将总线控制权交给DMA控制器。此时DMA控制器的控制、状态寄存器发生变化,表明已获得总线控制权,开始进行DMA传输,传输中用一个计数器对传输的数据量进行计算,并且每个时钟节拍只能传送1个字节。这虽然有效的避免了由CPU重复取数、搬数所耗费的时间,但是对于海量数据传输来说,由于数据量大,逐字节的传送仍然需要消耗很长时间,因此传输效率依然较低。另外,在现有的DMA传输中,如果外设比如UART等仅有字节类型的缓存,则DMA控制器仅用总线的低8位进行传输,降低了总线的利用率,并且DMA传输效率也比较低。
发明内容
本发明的技术解决问题是:针对上述不足,提供一种基于海量数据传输的DMA控制器,数据传输量大,并且传输速率高。
本发明的技术解决方案是:一种基于海量数据传输的DMA控制器,包括总线接口、寄存器组、状态机、存储器管理单元和数据缓存区,总线接口与控制器的总线相连,数据缓存区连接两个外部设备;控制器通过总线接口对寄存器组进行配置管理,寄存器组的配置结果控制状态机的工作状态,状态机根据状态机的工作状态控制存储器管理单元完成数据缓存区与外部设备的数据交换;
所述寄存器组包括:块数计数器、子块数计数器、字节计数器以及由数据源基址寄存器、数据目的基址寄存器、数据地址增量寄存器、DMA状态寄存器和DMA控制寄存器构成的公共寄存器;
所述控制器将寄存器组配置成三种配置结果,三种配置结果对应三种状态机的工作状态,其中状态机的第一种工作状态是字节数据传输,状态机的第二种工作状态是块数据传输,状态机的第三种工作状态是子块数据传输;
字节传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址加1模式;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为0,即为字节传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为1,即DM控制器A传输过程采用字节传输;
子块数计数器设置为1,即DMA控制器传输过程采用字节传输;
字节计数器设置为欲传送数据的字节数,即当次DMA控制器要传输的字节数;
块数据传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址不改变;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为1,即为块传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为欲传输数据的块数,每次DMA控制器传输过程完成一块数据的传输,此计数器中的值相应减1,当所有块数据传输完成后计数器的值为0;
子块数计数器设置为1,即每次DMA控制器传输过程中每块数据中包含唯一子块,当所有数据块传输完成后此计数器中的值为0;
字节计数器设置为每块数据所包含的字节数;
子块数传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址不改变;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为2,即为子块传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为欲传输数据的块数,DMA控制器传输过程每完成一个数据块的传输,此计数器中的值相应减1,当所有块数据传输完成后此计数器中的值为0;
子块数计数器设置为每块数据所包含的子块个数,每次DMA控制器传输过程仅完成一子块数据的传输,该计数器中的值相应减1,当所有子数据块传输完成后该计数器的值为0,该计数器中的值为0时表示一块数据传输完成;
字节计数器设置为子块数据所包含的字节数。
一种基于海量数据传输的DMA控制器,包括两个总线接口、寄存器组、存储器管理单元、数据缓存区和状态机;两个总线接口的一端与控制器的总线相连,其中一个总线接口的另一端连接寄存器组,另外一个总线接口的另一端连接存储器管理单元,数据缓存区连接两个外部设备;控制器对寄存器组进行配置管理,寄存器组的配置结果控制状态机的工作状态,状态机根据状态机的工作状态通过另外一个总线接口控制存储器管理单元完成数据缓存区与外部设备的数据交换;
所述寄存器组包括:块数计数器、子块数计数器、字节计数器以及由数据源基址寄存器、数据目的基址寄存器、数据地址增量寄存器、DMA状态寄存器和DMA控制寄存器构成的公共寄存器;
所述控制器将寄存器组配置成三种配置结果,三种配置结果对应三种状态机的工作状态,其中状态机的第一种工作状态是字节数据传输,状态机的第二种工作状态是块数据传输,状态机的第三种工作状态是子块数据传输;
字节传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址加1模式;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为0,即为字节传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为1,即DM控制器A传输过程采用字节传输;
子块数计数器设置为1,即DMA控制器传输过程采用字节传输;
字节计数器设置为欲传送数据的字节数,即当次DMA控制器要传输的字节数;
块数据传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址不改变;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为1,即为块传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为欲传输数据的块数,每次DMA控制器传输过程完成一块数据的传输,此计数器中的值相应减1,当所有块数据传输完成后计数器的值为0;
子块数计数器设置为1,即每次DMA控制器传输过程中每块数据中包含唯一子块,当所有数据块传输完成后此计数器中的值为0;
字节计数器设置为每块数据所包含的字节数;
子块数传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址不改变;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为2,即为子块传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为欲传输数据的块数,DMA控制器传输过程每完成一个数据块的传输,此计数器中的值相应减1,当所有块数据传输完成后此计数器中的值为0;
子块数计数器设置为每块数据所包含的子块个数,每次DMA控制器传输过程仅完成一子块数据的传输,该计数器中的值相应减1,当所有子数据块传输完成后该计数器的值为0,该计数器中的值为0时表示一块数据传输完成;
字节计数器设置为子块数据所包含的字节数。
所述状态机利用第一种工作状态控制存储器管理单元完成数据缓存区与外部设备的数据交换的方法为:
(a)控制器根据传输数据的大小设置字节计数器的计数值,存储器管理单元将数据缓存区映射为输入数据缓存区和输出数据缓存区;
(b)当外设将数据存入输入数据缓存区后发出DMA数据传输请求,控制器启动状态机采用字节数据传输;
(c)状态机控制存储器管理单元将输入数据缓存区中的第一个字节写入输出数据缓存区中,每写完一个字节后字节计数器的计数值减1,直到字节计数器的计数值为0时,本次字节数据传输完成。
所述状态机利用第二种工作状态控制存储器管理单元完成数据缓存区与外部设备的数据交换的方法为:
(a)控制器根据传输数据的大小分别设置块数计数器和字节计数器的计数值,存储器管理单元将数据缓存区映射为输入数据缓存区和输出数据缓存区;
(b)当外设将数据存入输入数据缓存区后发出DMA数据传输请求,控制器启动状态机采用块数据传输;
(c)状态机控制存储器管理单元将输入数据缓存区的地址和输出数据缓存区的地址进行互换,输入数据缓存区变换为输出数据缓存区,输出数据缓存区变换为输入数据缓存区,一次输入数据缓存区和输出数据缓存区地址的交换记为一次单块数据的传输,每完成一次单块数据传输后块数计数器的计数值减1,直到块数计数器的计数值为0时,本次块数据传输完成。
本发明与现有技术相比的优点是:本发明的组成结构使数据传送具有三种传输方式,通过对公共寄存器及字节计数器、块计数器以及子块数计数器的配置可实现字节数据传输、块数据传输和子块数据传输,字节数据传输和子块数据传输适用于数据源缓存区和数据目的缓存区不同的情况,块数据传输,适用于数据源缓存区与数据目的缓存区相同的情况,通过改变其逻辑地址就完成了传送过程。采用本发明的技术方案使数据源缓冲区与数据目的缓冲区数据可以在一个节拍内完成数据传输,大大加快了DMA传输的数据量,提高了传输效率。
附图说明
图1为现有DMA控制器的结构图;
图2为本发明DMA控制器的第一种组成结构图;
图3为本发明DMA控制器的第二种组成结构图;
图4为本发明字节传输的工作流程图;
图5为本发明块数据传输的工作流程图;
图6为本发明块数据传输存储管理单元对数据缓冲区的映射原理图;
图7为本发明子块数据传输的工作流程图;
图8为子块数据传输时存储管理单元对数据缓冲区的第一种映射原理图;
图9为子块数据传输时存储管理单元对数据缓冲区的第二种映射原理图。
具体实施方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
如图2所示,本发明的DMA控制器包括总线接口、寄存器组、状态机、存储器管理单元和数据缓存区,总线接口与控制器的总线相连,数据缓存区连接两个外部设备;控制器通过总线接口对寄存器组进行配置管理,寄存器组的配置结果控制状态机的工作状态,状态机根据状态机的工作状态控制存储器管理单元完成数据缓存区与外部设备的数据交换;
寄存器组包括:块数计数器、子块数计数器、字节计数器以及由数据源基址寄存器、数据目的基址寄存器、数据地址增量寄存器、DMA状态寄存器和DMA控制寄存器构成的公共寄存器;
数据源基址寄存器,用于存放传输数据的首地址;
数据目的基址寄存器,用于存放数据传送目的缓冲区的首地址,即子块首地址;
数据地址增量寄存器,用于存放在连续传送过程中源地址与目的地址每次修改的增量;
DMA状态寄存器,用于查询DMA当前的活动状态,包括表示“DMA正在传送数据”、“DMA暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
DMA控制寄存器,用于控制DMA的启动、复位、暂停以及继续操作;
块数计数器,用于设置要连续传送的数据块个数;
子块数计数器,用于设置每个数据块所含的子块数及传送子块所采用的传送方式,传送方式为整块传送或者字节传送;
字节计数器,用于设置要传送的字节数。
如图3所示,包括两个总线接口、寄存器组、存储器管理单元、数据缓存区和状态机;两个总线接口的一端与控制器的总线相连,其中一个总线接口的另一端连接寄存器组,另外一个总线接口的另一端连接存储器管理单元,数据缓存区连接两个外部设备;控制器对寄存器组进行配置管理,寄存器组的配置结果控制状态机的工作状态,状态机根据状态机的工作状态通过另外一个总线接口控制存储器管理单元完成数据缓存区与外部设备的数据交换;
所述寄存器组包括:块数计数器、子块数计数器、字节计数器以及由数据源基址寄存器、数据目的基址寄存器、数据地址增量寄存器、DMA状态寄存器和DMA控制寄存器构成的公共寄存器;
数据源基址寄存器,用于存放传输数据的首地址;
数据目的基址寄存器,用于存放数据传送目的缓冲区的首地址,即子块首地址;
数据地址增量寄存器,用于存放在连续传送过程中源地址与目的地址每次修改的增量;
DMA状态寄存器,用于查询DMA当前的活动状态,包括表示“DMA正在传送数据”、“DMA暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
DMA控制寄存器,用于控制DMA的启动、复位、暂停以及继续操作;
块数计数器,用于设置要连续传送的数据块个数;
子块数计数器,用于设置每个数据块所含的子块数及传送子块所采用的传送方式,传送方式为整块传送或者字节传送;
字节计数器,用于设置要传送的字节数。
DMA控制器,在数据传送期间,控制器可以自由访问DMA控制寄存器及DMA状态寄存器;一个启动命令只传送一个数据,数据传送完成后等待下一个启动命令,在传送期间,如果“暂停”命令被写入,DMA控制器将停止传送,但保留当前状态,等待“继续”命令被写入后,继续传送过程,“复位”命令则将全部寄存器设置和状态复位。DMA控制器支持字节传送及整块传送模式,该DMA控制器在数据源缓冲区与数据目的缓冲区之间的数据传输通道宽度支持8位、16位和32位。在字节传送模式时,单个时钟可完成数据源缓冲区与数据目的缓冲区之间一个字节(8位)、半字(16位)或字(32位)的传输,由于其所具有的可配置的数据总线宽度,所以可适应多个数据缓冲区之间的数据传输;在整块传送模式时,通过存储器管理单元实现数据源缓冲区与数据目的缓冲区之间的地址映射,从而达到在一个时钟节拍内完成一个数据块的传送。当数据源缓冲区与数据目的缓冲区具有相同字节数时,采用本发明所述及的整块传送模式方案可以在一个时钟节拍内完成整个数据块的传输,当数据源缓冲区与数据目的缓冲区的字节数不一致时,根据适当配置将数据源缓冲区或数据目的缓冲区分割成具有相同字节数的子数据块,即可在一个节拍完成一个子块的传送。当DMA控制器完成数据源缓冲区与数据目的缓冲区之间一块数据的传输时,向CPU发出DMA传输完成中断请求。DMA控制模块,通过更改数据源基址寄存器和数据目的基址寄存器的设置来实现不同数据缓冲区之间的数据交换,通过对数据地址增量寄存器的设置来修改非整块传送模式下数据源地址和目的地址每次修改的增量,以实现对8-bit、16-bit及32-bit数据总线的支持。
DMA控制器,控制器对字节计数器、块数计数器及子块数计数器进行设置,将数据源缓冲区与数据目的缓冲区的字节数配置成具有相同字节数的子数据块以实现整块数据之间的地址映射,以便利用整块传送模式提高数据的传输速率。DMA控制器可以连续在两个数据缓冲区之间传送多个数据块,中间不需要CPU干预。当数据缓冲区为FIFO时,访问地址设置为固定的端口地址,即设置地址增量寄存器的值为0。
存储器管理单元,用于实现数据源缓冲区与数据目的缓冲区之间的地址映射。存储器管理单元内部设置数据源缓存区即输入缓存区和数据目的缓存区即输出缓存区德基地址指针,分别用于指向数据源缓冲区和数据目的缓冲区的首地址。
在采用块传输的过程中,一块数据传输完成后,存储器管理单元完成信号修改数据源和数据目的基地址,以完成缓冲区之间的地址映射。
在采用字节传送的过程中,一字节数据传输完成后,存储器管理单元完成信号分别修改数据源和数据目的基地址,以完成地址与数据之间的对应。
控制器将寄存器组配置成三种配置结果,三种配置结果对应三种状态机的工作状态,其中状态机的第一种工作状态是字节数据传输,字节传送即每个节拍传送一个字节,适用于数据源和数据目的不同物理块的情况;状态机的第二种工作状态是块数据传输,整块传送即一个节拍就完成整个子块的传送,适用于数据源与数据目的是同一物理块的情况,改变其逻辑地址就完成了传送过程;状态机的第三种工作状态是子块数据传输,同样适用于数据源和数据目的不同物理块的情况,传输效率比字节传送效率高。
所述控制器将寄存器组配置成三种配置结果,三种配置结果对应三种状态机的工作状态,其中状态机的第一种工作状态是字节数据传输,状态机的第二种工作状态是块数据传输,状态机的第三种工作状态是子块数据传输;
字节传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址加1模式;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为0,即为字节传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为1,即DM控制器A传输过程采用字节传输;
子块数计数器设置为1,即DMA控制器传输过程采用字节传输;
字节计数器设置为欲传送数据的字节数,即当次DMA控制器要传输的字节数;
块数据传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址不改变;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为1,即为块传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为欲传输数据的块数,每次DMA控制器传输过程完成一块数据的传输,此计数器中的值相应减1,当所有块数据传输完成后计数器的值为0;
子块数计数器设置为1,即每次DMA控制器传输过程中每块数据中包含唯一子块,当所有数据块传输完成后此计数器中的值为0;
字节计数器设置为每块数据所包含的字节数;
子块数传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址不改变;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为2,即为子块传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为欲传输数据的块数,DMA控制器传输过程每完成一个数据块的传输,此计数器中的值相应减1,当所有块数据传输完成后此计数器中的值为0;
子块数计数器设置为每块数据所包含的子块个数,每次DMA控制器传输过程仅完成一子块数据的传输,该计数器中的值相应减1,当所有子数据块传输完成后该计数器的值为0,该计数器中的值为0时表示一块数据传输完成;
字节计数器设置为子块数据所包含的字节数。
1、状态机利用第一种工作状态控制存储器管理单元完成数据缓存区与外部设备的数据交换的方法如图4所示,此模式与传统DMA传送方式相同,每个时钟周期传送一个字节数据,在此种传送模式下需设置的寄存器有:DMA控制寄存器和字节数寄存器。其过程为:
(a)控制器根据传输数据的大小设置字节计数器的计数值,存储器管理单元将数据缓存区映射为输入数据缓存区和输出数据缓存区;最大传送字节数以FIFO实际大小相同,本次设计中最大字节数为512字节,可根据实际需要确定;
(b)当外设将数据存入输入数据缓存区后发出DMA数据传输请求,控制器启动状态机采用字节数据传输;
(c)状态机控制存储器管理单元将输入数据缓存区中的第一个字节写入输出数据缓存区中,每写完一个字节后字节计数器的计数值减1,直到字节计数器的计数值为0时,本次字节数据传输完成。
2、状态机利用第二种工作状态控制存储器管理单元完成数据缓存区与外部设备的数据交换的方法如图5所示,在外设1和外设2的FIFO大小相同的情况下,采用整块传输模式,每周期传送一个整块的数据块(512字节,可设置),在该模式下需要设置的寄存器有:DMA控制寄存器、块数计数器和字节计数器,每传送一块数据,块数计数器值减一,为0时,数据传输完成。其过程为:
(a)控制器根据传输数据的大小分别设置块数计数器和字节计数器的计数值,存储器管理单元将数据缓存区映射为输入数据缓存区和输出数据缓存区,如图6所示;
(b)当外设将数据存入输入数据缓存区后发出DMA数据传输请求,控制器启动状态机采用块数据传输;
(c)状态机控制存储器管理单元将输入数据缓存区的地址和输出数据缓存区的地址进行互换,输入数据缓存区变换为输出数据缓存区,输出数据缓存区变换为输入数据缓存区,一次输入数据缓存区和输出数据缓存区地址的交换记为一次单块数据的传输,每完成一次单块数据传输后块数计数器的计数值减1,直到块数计数器的计数值为0时,本次块数据传输完成。
3、在两个外设的FIFO大小相同时,本发明采用整块数据传输的方式,该方式具有高的传输效率。而在两个外设的FIFO大小不同时,采用字节传送模式同样可以完成任务,但采用字节传输比较慢,因此本发明提供了一种更为有效的传输方式——子块传输模式,在此种模式下需要设置的寄存器有:DMA控制寄存器、字节计数器、块数计数器和子块数计数器,DMA控制器在收到“启动”信号后,每传送一子块数据,子块数计数器的值减一,子块数计数器的值为0时,一块数据传输完成,同时块数计数器的值减一,块数计数器的值为0时,数据传输全部完成。控制流程如图7所示:
a)控制器根据传输数据的大小和实际应用输入数据缓冲区和输出数据缓冲区的大小,分别设置块数计数器、子块数计数器和字节计数器的计数值;
b)当外设将数据存入输入数据缓存区后发出DMA数据传输请求,控制器启动状态机采用子块数据传输;
c)状态机控制存储器管理单元将输入数据缓存区中的数据按子块方式输出,每完成一次子块数据传输后子块数计数器的计数值减1,直到子块数计数器的计数值为0时,所有子块传输完成,即完成一块数据的传输。
d)每完成一次单块数据传输后块数计数器的计数值减1,直到块数计数器的计数值为0时,本次块数据传输全部完成。
在子块数据传送的过程中,根据外设数据块大小的不同,存储器管理单元采用两种不同的管理方案。第一种方案为输入数据缓冲区大于输出数据缓冲区管理方案,第二中方案为输入数据缓冲区小于输出数据缓冲区管理方案。
在采用第一种输入数据缓冲区大于输出数据缓冲区管理方案时,如图8所示,在这种方案下,存储器管理单元将数据缓冲区,映射为两个大的逻辑存储缓冲区,同时定义逻辑存储缓冲区1作为输入数据缓冲区,逻辑存储缓冲区2为输出数据缓冲区。
a)控制器根据传输数据的大小和实际应用输入数据缓冲区和输出数据缓冲区的大小,分别设置块数计数器、子块数计数器和字节计数器的计数值;
b)当外设将数据写入输入数据缓冲区后向DMA控制器发出数据传输请求;
c)控制器接收到数据传输请求后启动DMA状态机,控制器通过状态机启动存储器管理单元,存储器管理单元负责完成输入数据缓冲区与输出数据缓冲区的地址映射,此时输入数据缓冲区变成输出数据缓冲区,输出数据缓冲区变成输入数据缓冲区,即逻辑缓冲区1作为输出数据缓冲区,逻辑缓冲区2为输入数据缓冲区。
d)存储器管理单元根据子块数计数器将逻辑缓冲区1分割为N个大小相同的子块,每个子块定义为一个输出数据缓冲区,即包含N个大小相同的输出数据缓冲区,输出数据缓冲区指针在第一个输出数据缓冲区。
e)存储器管理单元控制输出数据缓冲区完成一个子块数据的传输,即完成一个输出数据缓冲区的传输后,存储器管理单元控制输出数据缓冲区指针跳转到下一个输出数据缓冲区,同时控制子块数计数器中的值减1,直到所有子块传输完毕,子块数计数器中的值为0,则一整块数据传输完成。否则存储器管理单元将输出数据缓冲区首地址指向下一子块,DMA控制器继续下一子块数据传输。
f)一整块数据传输完成后,块数计数器中的值减1,直到块数计数器中值为0,则所有数据传输完成,否则DMA控制器继续下一块数据传输。
在采用第二种输入数据缓冲区小于输出数据缓冲区管理方案时,如图9所示,在这种方案下:存储器管理单元将数据缓冲区也映射为两个大的逻辑存储缓冲区,同时定义逻辑缓冲区1作为输入数据缓冲区,逻辑缓冲区2为输出数据缓冲区;
a)控制器根据传输数据的大小和实际应用输入数据缓冲区和输出数据缓冲区的大小,分别设置块数计数器、子块数计数器和字节计数器的计数值;
b)当外设将数据写入输入数据缓冲区后向DMA控制器发出数据传输请求;
c)状态机接收到数据传输请求后启动存储器管理单元,存储器管理单元根据子块数计数器将逻辑缓冲区1即输入数据缓冲区分割为N个大小相同的子块,每块都映射为一个输入数据缓冲区;
d)存储器管理单元完成第一个输入数据缓冲区的地址映射后,将输入数据缓冲区指针跳转到下一个子块地址即下一个输入数据缓冲区,同时子块数计数器中的值减1,直到子块数计数器中的值为0,完成所有子块传输,则N个子块数据已写入逻辑存储缓冲区1;
e)存储器管理单元控制逻辑存储缓存区1和逻辑存储缓存区2的地址互换,将逻辑存储缓存区1映射为输出数据缓冲区,逻辑存储缓存区2映射为新的输入数据缓冲区,准备接收新的输入数据;
f)存储器管理单元控制逻辑存储缓存区1即输出数据缓冲区完成其与外设的一个块数据的传输,同时块数计数器中的值减1,如此循环直到块数计数器中的值为0,完成全部块传输。
实施例:在典型的海量数据存储设备USB 2.0SD卡读卡器中的应用。假设USB FIFO与SD卡FIFO大小均为512字节。在USB高速模式下,USB主机发送一个数据包到USB FIFO中并要求传输到SD卡FIFO中(写SD卡操作),MCU启动DMA整块传送以完成一块传送,DMA完成信号直接修改USB FIFO和SD卡FIFO基地址,即两基地址直接互换,完成源数据地址和目的数据地址的映射。在USB全速模式下(数据长度为64字节),通过设置子块长度寄存器为64字节,子块数为8,将USB FIFO分割为8个长度为64字节的子块。当USB主机发送一个数据包到USB FIFO中后,MCU启动DMA整块传输。传送一个64字节的子块。DMA传输完成信号修改USB FIFO基地址到下一子区域首地址(基地址+64字节),如果基地址跨越USB FIFO区域边界,则将USB FIFO和SD卡FIFO基地互换,完成数据源地址和数据目的地址的映射。
上述为本发明的最优实施方式,其余与现有技术相同部分不再赘述。在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的变形,但这些相应的变形都应属于本发明。
Claims (4)
1.一种基于海量数据传输的DMA控制器,其特征在于:包括总线接口、寄存器组、状态机、存储器管理单元和数据缓存区,总线接口与控制器的总线相连,数据缓存区连接两个外部设备;控制器通过总线接口对寄存器组进行配置管理,寄存器组的配置结果控制状态机的工作状态,状态机根据状态机的工作状态控制存储器管理单元完成数据缓存区与外部设备的数据交换;
所述寄存器组包括:块数计数器、子块数计数器、字节计数器以及由数据源基址寄存器、数据目的基址寄存器、数据地址增量寄存器、DMA状态寄存器和DMA控制寄存器构成的公共寄存器;
所述控制器将寄存器组配置成三种配置结果,三种配置结果对应三种状态机的工作状态,其中状态机的第一种工作状态是字节数据传输,状态机的第二种工作状态是块数据传输,状态机的第三种工作状态是子块数据传输;
字节传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址加1模式;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为0,即为字节传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为1,即DM控制器A传输过程采用字节传输;
子块数计数器设置为1,即DMA控制器传输过程采用字节传输;
字节计数器设置为欲传送数据的字节数,即当次DMA控制器要传输的字节数;
块数据传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址不改变;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为1,即为块传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为欲传输数据的块数,每次DMA控制器传输过程完成一块数据的传输,此计数器中的值相应减1,当所有块数据传输完成后计数器的值为0;
子块数计数器设置为1,即每次DMA控制器传输过程中每块数据中包含唯一子块,当所有数据块传输完成后此计数器中的值为0;
字节计数器设置为每块数据所包含的字节数;
子块数传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址不改变;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为2,即为子块传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为欲传输数据的块数,DMA控制器传输过程每完成一个数据块的传输,此计数器中的值相应减1,当所有块数据传输完成后此计数器中的值为0;
子块数计数器设置为每块数据所包含的子块个数,每次DMA控制器传输过程仅完成一子块数据的传输,该计数器中的值相应减1,当所有子数据块传输完成后该计数器的值为0,该计数器中的值为0时表示一块数据传输完成;
字节计数器设置为子块数据所包含的字节数。
2.一种基于海量数据传输的DMA控制器,其特征在于:包括两个总线接口、寄存器组、存储器管理单元、数据缓存区和状态机;两个总线接口的一端与控制器的总线相连,其中一个总线接口的另一端连接寄存器组,另外一个总线接口的另一端连接存储器管理单元,数据缓存区连接两个外部设备;控制器对寄存器组进行配置管理,寄存器组的配置结果控制状态机的工作状态,状态机根据状态机的工作状态通过另外一个总线接口控制存储器管理单元完成数据缓存区与外部设备的数据交换;
所述寄存器组包括:块数计数器、子块数计数器、字节计数器以及由数据源基址寄存器、数据目的基址寄存器、数据地址增量寄存器、DMA状态寄存器和DMA控制寄存器构成的公共寄存器;
所述控制器将寄存器组配置成三种配置结果,三种配置结果对应三种状态机的工作状态,其中状态机的第一种工作状态是字节数据传输,状态机的第二种工作状态是块数据传输,状态机的第三种工作状态是子块数据传输;
字节传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址加1模式;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为0,即为字节传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为1,即DM控制器A传输过程采用字节传输;
子块数计数器设置为1,即DMA控制器传输过程采用字节传输;
字节计数器设置为欲传送数据的字节数,即当次DMA控制器要传输的字节数;
块数据传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址不改变;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为1,即为块传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为欲传输数据的块数,每次DMA控制器传输过程完成一块数据的传输,此计数器中的值相应减1,当所有块数据传输完成后计数器的值为0;
子块数计数器设置为1,即每次DMA控制器传输过程中每块数据中包含唯一子块,当所有数据块传输完成后此计数器中的值为0;
字节计数器设置为每块数据所包含的字节数;
子块数传输的配置方式为:
数据源基址寄存器设置为输入数据缓冲区的首地址;
数据目的基址寄存器设置为输出数据缓冲区的首地址;
数据地址增量寄存器分为源地址增量控制位和目的地址增量控制位,源地址增量控制位和目的地址增量控制位分别设置为地址不改变;
DMA控制寄存器包含启动控制位、暂停控制位和传输方式控制位,传输方式控制位设为2,即为子块传输方式;
DMA状态寄存器,用于查询DMA控制器当前的活动状态,包括表示“DMA控制器正在传送数据”、“DMA控制器暂停或者不活动”、“全部数据传送完成”、“全部数据未传送完成”和“一子块传输完成”的值;
块数计数器设置为欲传输数据的块数,DMA控制器传输过程每完成一个数据块的传输,此计数器中的值相应减1,当所有块数据传输完成后此计数器中的值为0;
子块数计数器设置为每块数据所包含的子块个数,每次DMA控制器传输过程仅完成一子块数据的传输,该计数器中的值相应减1,当所有子数据块传输完成后该计数器的值为0,该计数器中的值为0时表示一块数据传输完成;
字节计数器设置为子块数据所包含的字节数。
3.根据权利要求1或2所述的一种基于海量数据传输的DMA控制器,其特征在于:所述状态机利用第一种工作状态控制存储器管理单元完成数据缓存区与外部设备的数据交换的方法为:
(a)控制器根据传输数据的大小设置字节计数器的计数值,存储器管理单元将数据缓存区映射为输入数据缓存区和输出数据缓存区;
(b)当外设将数据存入输入数据缓存区后发出DMA数据传输请求,控制器启动状态机采用字节数据传输;
(c)状态机控制存储器管理单元将输入数据缓存区中的第一个字节写入输出数据缓存区中,每写完一个字节后字节计数器的计数值减1,直到字节计数器的计数值为0时,本次字节数据传输完成。
4.根据权利要求1或2所述的一种基于海量数据传输的DMA控制器,其特征在于:所述状态机利用第二种工作状态控制存储器管理单元完成数据缓存区与外部设备的数据交换的方法为:
(a)控制器根据传输数据的大小分别设置块数计数器和字节计数器的计数值,存储器管理单元将数据缓存区映射为输入数据缓存区和输出数据缓存区;
(b)当外设将数据存入输入数据缓存区后发出DMA数据传输请求,控制器启动状态机采用块数据传输;
(c)状态机控制存储器管理单元将输入数据缓存区的地址和输出数据缓存区的地址进行互换,输入数据缓存区变换为输出数据缓存区,输出数据缓存区变换为输入数据缓存区,一次输入数据缓存区和输出数据缓存区地址的交换记为一次单块数据的传输,每完成一次单块数据传输后块数计数器的计数值减1,直到块数计数器的计数值为0时,本次块数据传输完成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102424977A CN101710309B (zh) | 2009-12-15 | 2009-12-15 | 一种基于海量数据传输的dma控制器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102424977A CN101710309B (zh) | 2009-12-15 | 2009-12-15 | 一种基于海量数据传输的dma控制器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101710309A true CN101710309A (zh) | 2010-05-19 |
CN101710309B CN101710309B (zh) | 2011-05-04 |
Family
ID=42403101
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102424977A Expired - Fee Related CN101710309B (zh) | 2009-12-15 | 2009-12-15 | 一种基于海量数据传输的dma控制器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101710309B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102937939A (zh) * | 2012-10-10 | 2013-02-20 | 无锡众志和达存储技术股份有限公司 | 基于sata控制器的dma地址对预读取方法 |
CN104503929A (zh) * | 2014-12-02 | 2015-04-08 | 天津国芯科技有限公司 | 一种采用dma控制器进行字符串处理的方法及装置 |
WO2015180667A1 (en) * | 2014-05-28 | 2015-12-03 | Mediatek Inc. | Computing system with reduced data exchange overhead and related data exchange method thereof |
CN107844438A (zh) * | 2017-12-07 | 2018-03-27 | 合肥国为电子有限公司 | 用于地震仪主控站cpu与外设数据传输的桥接器及方法 |
CN111966608A (zh) * | 2020-08-14 | 2020-11-20 | 苏州浪潮智能科技有限公司 | 一种外存储器的直接内存储器访问方法和装置 |
WO2020258566A1 (zh) * | 2019-06-28 | 2020-12-30 | 苏州浪潮智能科技有限公司 | 一种数据传输方法及乒乓dma架构 |
CN114328318A (zh) * | 2021-12-28 | 2022-04-12 | 湖南航天经济发展有限公司 | 微控制器用直接设备互连的dma控制器及互联控制方法 |
-
2009
- 2009-12-15 CN CN2009102424977A patent/CN101710309B/zh not_active Expired - Fee Related
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102937939A (zh) * | 2012-10-10 | 2013-02-20 | 无锡众志和达存储技术股份有限公司 | 基于sata控制器的dma地址对预读取方法 |
CN102937939B (zh) * | 2012-10-10 | 2015-12-16 | 无锡众志和达数据计算股份有限公司 | 基于sata控制器的dma地址对预读取方法 |
WO2015180667A1 (en) * | 2014-05-28 | 2015-12-03 | Mediatek Inc. | Computing system with reduced data exchange overhead and related data exchange method thereof |
CN104503929A (zh) * | 2014-12-02 | 2015-04-08 | 天津国芯科技有限公司 | 一种采用dma控制器进行字符串处理的方法及装置 |
CN104503929B (zh) * | 2014-12-02 | 2017-10-24 | 天津国芯科技有限公司 | 一种采用dma控制器进行字符串处理的装置 |
CN107844438A (zh) * | 2017-12-07 | 2018-03-27 | 合肥国为电子有限公司 | 用于地震仪主控站cpu与外设数据传输的桥接器及方法 |
CN107844438B (zh) * | 2017-12-07 | 2023-06-16 | 合肥国为电子有限公司 | 用于地震仪主控站cpu与外设数据传输的桥接器及方法 |
WO2020258566A1 (zh) * | 2019-06-28 | 2020-12-30 | 苏州浪潮智能科技有限公司 | 一种数据传输方法及乒乓dma架构 |
CN111966608A (zh) * | 2020-08-14 | 2020-11-20 | 苏州浪潮智能科技有限公司 | 一种外存储器的直接内存储器访问方法和装置 |
CN111966608B (zh) * | 2020-08-14 | 2023-06-06 | 苏州浪潮智能科技有限公司 | 一种外存储器的直接内存储器访问方法和装置 |
CN114328318A (zh) * | 2021-12-28 | 2022-04-12 | 湖南航天经济发展有限公司 | 微控制器用直接设备互连的dma控制器及互联控制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101710309B (zh) | 2011-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101710309B (zh) | 一种基于海量数据传输的dma控制器 | |
CN100440184C (zh) | 一种能同时进行读写操作的dma控制器及传输方法 | |
CN100464318C (zh) | 一种实现高效dma传输的dma控制器及传输方法 | |
CN102231142B (zh) | 一种带有仲裁器的多通道dma控制器 | |
CN108228492B (zh) | 一种多通道ddr交织控制方法及装置 | |
CN103064805B (zh) | Spi控制器及通信方法 | |
CN105224482A (zh) | 一种fpga加速卡高速存储系统 | |
US20090307408A1 (en) | Peer-to-Peer Embedded System Communication Method and Apparatus | |
CN102789439A (zh) | 控制数据传输过程中的中断的方法 | |
JP2004531002A (ja) | データ処理装置及びデータ処理装置における第1及び第2の処理手段を同期させる方法 | |
CN100561453C (zh) | 一种直接内存访问控制器 | |
CN102263698B (zh) | 虚拟通道的建立方法、数据传输的方法及线卡 | |
CN102081556A (zh) | 与不同种类的资源通信的基于指令系统结构的内定序器 | |
CN101089820A (zh) | 信息处理装置及访问控制方法 | |
CN102184151A (zh) | Pci-e转pci桥装置及其主动预取数据的方法 | |
CN101504632B (zh) | 一种dma数据传输方法、系统及一种dma控制器 | |
JP2005122372A (ja) | データ転送制御装置、電子機器及びデータ転送制御方法 | |
CN101237346B (zh) | 网络处理器及网络处理器的读写串口的方法 | |
US5535333A (en) | Adapter for interleaving second data with first data already transferred between first device and second device without having to arbitrate for ownership of communications channel | |
US8284792B2 (en) | Buffer minimization in interface controller | |
CN109062857A (zh) | 一种能高速实现多处理器间通信的新型消息控制器及其通信方法 | |
US20240078200A1 (en) | Memory operating method, memory and electronic device | |
CN115328832B (zh) | 一种基于pcie dma的数据调度系统与方法 | |
CN102708079A (zh) | 应用于微控制器的控制数据传输的方法及系统 | |
CN1378148A (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110504 Termination date: 20191215 |