CN114416613A - 一种dma数据传输***及方法 - Google Patents

一种dma数据传输***及方法 Download PDF

Info

Publication number
CN114416613A
CN114416613A CN202111641451.XA CN202111641451A CN114416613A CN 114416613 A CN114416613 A CN 114416613A CN 202111641451 A CN202111641451 A CN 202111641451A CN 114416613 A CN114416613 A CN 114416613A
Authority
CN
China
Prior art keywords
address
dma
ring buffer
pointer
descriptor
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.)
Pending
Application number
CN202111641451.XA
Other languages
English (en)
Inventor
闫振林
林后斌
马义飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SUZHOU XIONGLI TECHNOLOGY CO LTD
Original Assignee
SUZHOU XIONGLI TECHNOLOGY CO LTD
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SUZHOU XIONGLI TECHNOLOGY CO LTD filed Critical SUZHOU XIONGLI TECHNOLOGY CO LTD
Priority to CN202111641451.XA priority Critical patent/CN114416613A/zh
Publication of CN114416613A publication Critical patent/CN114416613A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0835Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Systems (AREA)
  • Bus Control (AREA)

Abstract

本申请提供一种DMA数据传输***及方法,所述***包括数据缓存模块和DMA控制模块,所述数据缓存模块包括环形缓冲区和描述符队列。在外设与主机CPU进行数据交互时,将数据存储在所述环形缓冲区,所述环形缓冲区中设有头指针和尾指针,所述环形缓冲区的信息储存在所述描述符队列中。所述DMA控制模块通过所述描述符队列对数据的传输过程进行管理,无需中断机制,减少了硬件的等待时间,并且所述环形缓冲区的大小和数量均可配置,多个所述环形缓冲区可以分时复用数据传输总线带宽,提高数据传输总线带宽的利用率。

Description

一种DMA数据传输***及方法
技术领域
本申请涉及计算机应用技术领域,尤其涉及一种DMA数据传输***及方法。
背景技术
直接存储器访问(Direct Memory Access,DMA)是指在进行数据传输时不通过CPU(Central Processing Unit,中央处理器)而直接与***内存交换数据的接口技术。在DMA模式下,CPU只需要向DMA控制器下达指令,数据传输由DMA控制器来实现,数据传输完成后再把信息反馈给CPU,减少CPU的资源占用率。
传统的DMA控制器设有可配置通道,通道分为RX(Receive,接收)和TX(Transmit,发送)两个方向,每个方向设有源地址、目的地址、数据传输长度配置寄存器。CPU首先配置好DMA控制器的源地址、目的地址和数据传输长度配置寄存器,准备好数据传送后,DMA控制器向CPU发送请求;CPU响应请求后DMA控制器开始传输数据;数据传输完成后,DMA控制器上报中断给CPU。对于RX方向,CPU收到中断后读取数据进行处理;对于TX方向,CPU收到中断后重新配置通道,进行下一次数据传输。
传统的DMA方案采用硬件上报中断,软件清除中断的方式与控制层面CPU进行交互,通常硬件需要等待软件清除中断后才能进行后续的数据传输工作,造成数据传输总线带宽浪费。
发明内容
本申请提供了一种DMA数据传输***及方法,以解决数据传输总线带宽利用率低的问题。
一方面,本申请提供一种DMA数据传输***,包括主机CPU、外设数据寄存器以及传输总线,还包括数据缓存模块和DMA控制模块。
所述数据缓存模块通过所述传输总线与所述主机CPU连接,所述数据缓存模块通过所述传输总线与所述外设寄存器连接,所述DMA控制模块与所述外设数据寄存器连接。
所述DMA控制模块被配置为,在主机***内存中申请环形缓冲区,并初始化所述环形缓冲区,所述环形缓冲区上设有头指针和尾指针。
所述数据缓存模块包括所述环形缓冲区、所述头指针和所述尾指针。所述环形缓冲区被配置为,储存报文数据。所述头指针被配置为,指向所述环形缓冲区中待写入报文数据的地址。所述尾指针被配置为,指向所述环形缓冲区中待读出报文数据的地址。
所述DMA控制模块被配置为执行以下步骤:
初始所述化头指针的地址和所述尾指针的地址;
根据所述头指针的地址和所述尾指针的地址,将所述报文数据写入所述环形缓冲区,或者在所述环形缓冲区中读出所述报文数据;同步更新所述头指针和所述尾指针,使所述头指针指向所述环形缓冲区中下一个待写入所述报文数据的地址,使所述尾指针指向所述环形缓冲区中下一个待读出所述报文数据的地址。
在一种实现方式中,所述DMA控制模块包括逻辑控制器。在主机***内存中申请环形缓冲区,并初始化所述环形缓冲区的步骤中,所述逻辑控制器被配置为:
在***内存中申请若干个DMA内存块,设置所述DMA内存块的大小和数量。
创建若干个描述符。所述描述符的数量与所述DMA内存块的数量相等,每个所述描述符各指向一个所述DMA内存块。若干个所述描述符依次连接组成描述符队列,所述描述符队列为环形队列,所述描述符将所述DMA内存块串联起来,形成所述环形缓冲区。
将所述环形缓冲区的基地址写入所述外设数据寄存器,所述环形缓冲区的基地址为所述描述符队列中首端所述描述符指向的所述DMA内存块的地址。
在一种实现方式中,所述数据缓存模块还包括所述描述符队列。所述描述符队列被配置为,储存所述DMA内存块的地址和所述DMA内存块的大小。
在一种实现方式中,所述初始化所述头指针的地址和所述尾指针的地址,所述逻辑控制器被进一步配置为:
将所述头指针的初始地址指向所述描述符队列中首端所述描述符指向的所述DMA内存块的地址。
将所述尾指针的初始地址指向所述描述符队列中尾端所述描述符指向的所述DMA内存块的地址。
在一种实现方式中,所述DMA控制模块还包括写指令寄存器和读指令寄存器。所述写指令寄存器被配置为,发起或停止外设向所述主机CPU上报报文。所述读指令寄存器被配置为,发起或停止所述主机CPU向外设下发报文。
在一种实现方式中,在根据所述头指针的地址和所述尾指针的地址,将所述报文数据写入所述环形缓冲区,同步更新所述头指针和所述尾指针的步骤中,所述逻辑控制器被配置为执行以下步骤:
使能所述写指令寄存器,发起DMA写;
若所述环形缓冲区未满,将所述报文数据写入所述环形缓冲区中所述头指针指向的地址,写地址为:
Addr1W=Addr1B+Ptr1H×Size1DMA
其中,Addr1W为所述写地址;Addr1B为所述基地址;Ptr1H表示所述头指针指向的所述描述符的位置;Size1DMA为所述DMA内存块的大小;
更新所述头指针,使所述头指针指向下一个所述描述符的位置;
若所述环形缓冲区已满,等待主机CPU从所述环形缓冲区中所述尾指针指向的地址读出所述报文数据,读地址为:
Addr1R=Addr1B+Ptr1T×Size1DMA
其中,Addr1R为所述读地址;Addr1R为所述基地址;Ptr1T表示所述尾指针指向的所述描述符的位置;Size1DMA为所述DMA内存块的大小;
更新所述尾指针,使所述尾指针指向下一个所述描述符的位置;
若所述报文数据传输完成,关闭所述写指令寄存器,结束上报报文。
在一种实现方式中,在根据所述头指针的地址和所述尾指针的地址,在所述环形缓冲区读出所述报文数据,同步更新所述头指针和所述尾指针的步骤中,所述逻辑控制器被配置为执行以下步骤:
使能所述读指令寄存器,发起DMA读;
若所述环形缓冲区未空,从所述环形缓冲区中所述尾指针指向的地址读出所述报文数据,读地址为:
Addr2R=Addr2B+Ptr2T×Size2DMA
其中,Addr2R为所述读地址;Addr2B为所述基地址;Ptr2T表示所述尾指针指向的所述描述符的位置;Size2DMA为所述DMA内存块的大小;
更新所述尾指针,使所述尾指针指向下一个所述描述符的位置;
若所述环形缓冲区已空,等待主机CPU将所述报文数据写入所述所述环形缓冲区中所述头指针指向的地址,写地址为:
Addr2W=Addr2B+Ptr2H×Size2DMA
其中,Addr2W为所述写地址;Addr2B为所述基地址;Ptr2H表示所述头指针指向的所述描述符的位置;Size2DMA为所述DMA内存块的大小;
更新所述尾指针,使所述尾指针指向下一个所述描述符的位置;
若所述报文数据传输完成,关闭所述读指令寄存器,结束下发报文。
在一种实现方式中,所述DMA控制模块还包括头指针寄存器和尾指针寄存器。
所述头指针寄存器被配置为,储存所述头指针指向的所述描述符的位置。
所述尾指针寄存器被配置为,储存所述尾指针指向的所述描述符的位置。
在更新所述头指针和所述尾指针的步骤中,所述头指针和所述尾指针沿着所述环形缓冲区的同一个方向移动。
另一方面,本申请还提供一种DMA数据传输方法,应用于所述DMA数据传输***,步骤包括:
在主机***内存中申请环形缓冲区,并初始化所述环形缓冲区;所述环形缓冲区上设有头指针和尾指针;所述头指针指向所述环形缓冲区中待写入报文数据的地址;所述尾指针指向所述环形缓冲区中待读出报文数据的地址;
初始化所述头指针的地址和所述尾指针的地址;
根据所述头指针的地址和所述尾指针的地址,将所述报文数据写入所述环形缓冲区,或者在所述环形缓冲区中读出所述报文数据;同步更新所述头指针和所述尾指针,使所述头指针指向所述环形缓冲区中下一个待写入所述报文数据的地址,使所述尾指针指向所述环形缓冲区中下一个待读出所述报文数据的地址。
本申请提供的DMA数据传输***,包括数据缓存模块和DMA控制模块,所述数据缓存模块包括环形缓冲区和描述符队列。在外设与主机CPU进行数据交互时,将数据存储在所述环形缓冲区,所述环形缓冲区中设有头指针和尾指针,所述环形缓冲区的信息储存在所述描述符队列中。所述DMA控制模块通过所述描述符队列对数据的传输过程进行管理,将所述报文数据写入所述环形缓冲区中所述头指针指向的地址,或者在所述环形缓冲区中所述尾指针指向的地址读出所述报文数据,并同步更新所述头指针的地址和所述尾指针的地址。
本申请通过更新所述头指针和所述尾指针的方式与主机CPU进行数据交互,无需中断机制,减少了硬件的等待时间,并且所述环形缓冲区的大小和数量均可配置,多个所述环形缓冲区可以分时复用数据传输总线带宽,提高数据传输总线带宽的利用率。
附图说明
为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的DMA数据传输***结构示意图;
图2为本申请实施例提供的环形缓冲区结构示意图;
图3为本申请实施例提供的描述符队列结构示意图;
图4为本申请实施例提供的DMA控制模块结构示意图;
图5为本申请实施例提供的外设向主机CPU上报报文的流程图;
图6为本申请实施例提供的主机CPU向外设下发报文的流程图;
图7为本申请提供的DMA数据传输方法流程图。
具体实施方式
下面将详细地对实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下实施例中描述的实施方式并不代表与本申请相一致的所有实施方式。仅是与权利要求书中所详述的、本申请的一些方面相一致的***和方法的示例。
外设与主机CPU通过DMA方案进行数据交互时,完成一次数据传输后,需要上报中断给主机CPU,主机CPU收到中断后读取数据进行处理,或者重新配置DMA通道准备进行下一次数据传输。传统的DMA方案通常采用硬件上报中断,软件清除中断的方式与主机CPU进行交互,由于硬件和软件处理速度不同,通常硬件需要等待软件清除中断才能进行后续的数据传输工作,采用多次中断的DMA方案导致数据传输总线带宽浪费。基于此,本申请实施例提供一种DMA数据传输***及方法,解决数传输总线带宽利用率低的问题。
参见图1,本实施例提供的DMA数据传输***包括,数据缓存模块10和DMA控制模块20,所述数据缓存模块10通过传输总线与主机CPU连接,所述数据缓存模块10通过传输总线与外设数据寄存器连接,所述DMA控制模块20与外设数据寄存器连接。
参见图4,所述DMA控制模块20包括逻辑控制器21、头指针寄存器22、尾指针寄存器23、写指令寄存器24和读指令寄存器25。所述数据缓存模块10包括所述环形缓冲区11和所述描述符队列12,所述环形缓冲区11上设有头指针和尾指针,所述头指针指向所述环形缓冲区11中待写入报文数据的地址,所述尾指针指向所述环形缓冲区11中待读出报文数据的地址。
在外设与主机CPU进行数据交互时,所述逻辑控制器21首先在***内存中申请若干个DMA内存块111,并根据需求设置所述DMA内存块111的大小和数量。并且创建与所述DMA内存块111相等数量的描述符121,每个所述描述符121指向一个所述DMA内存块111,所述描述符121依次连接组成环形描述符队列12,所述描述符队列12将所述DMA内存块111串联起来,形成所述环形缓冲区11。所述环形缓冲区11的数量和大小可以根据不同的需求进行配置。所述描述符队列12用于存储所述DMA内存块111的地址和大小。
参见图2和图3,以将所述DMA内存块111和所述描述符121的数量设置为8个为例,所述环形缓冲区11包括8个所述DMA内存块111,所述描述符队列12包括8个所述描述符121,所述描述符121与所述DMA内存块111一一对应。所述逻辑控制器21将所述环形缓冲区11的基地址写入外设数据寄存器;所述基地址为所述描述符队列12中首端所述描述符121指向的所述DMA内存块111的地址。在本实施例中,所述描述符队12中首端所述描述符121为位置为0的所述描述符121,所述基地址为位置为0的所述描述符121对应的所述DMA内存块111的地址。
所述逻辑控制器21初始化所述头指针的地址和所述尾指针的地址,将所述头指针的初始地址指向所述描述符队列12中首端所述描述符121指向的所述DMA内存块111的地址,将所述尾指针的初始地址指向所述描述符队列12中尾端所述描述121符指向的所述DMA内存块111的地址。以图2为例,所述头指针的初始地址为标号为0的所述DMA内存块111的地址,所述尾指针的初始地址为标号为7的所述DMA内存块111的地址。相应地,参见图3,在所述描述符队列12中,所述头指针指向的所述描述符121的位置为0,所述尾指针指向所述的描述符121的位置为7。所述头指针指向的所述描述符121的位置储存在所述头指针寄存器22中,所述尾指针指向所述描述符121的位置储存在所述尾指针寄存器23中。
参见图5,当外设向主机CPU上报报文时,所述逻辑控制器21使能所述写指令寄存器24,发起DMA写。
若所述环形缓冲区11未满,将报文数据写入所述环形缓冲区11中所述头指针指向的地址,写地址为:
Addr1W=Addr1B+Ptr1H×Size1DMA
其中,Addr1W为所述写地址;Addr1B为所述基地址;Ptr1H表示所述头指针指向的所述描述符121的位置;Size1DMA为所述DMA内存块111的大小;
更新所述头指针,使所述头指针指向下一个所述描述符121的位置;
若所述环形缓冲区11已满,等待主机CPU从所述环形缓冲区11中所述尾指针指向的地址读出所述报文数据,读地址为:
Addr1R=Addr1B+Ptr1T×Size1DMA
其中,Addr1R为所述读地址;Addr1R为所述基地址;Ptr1T表示所述尾指针指向的所述描述符121的位置;Size1DMA为所述DMA内存块111的大小;
更新所述尾指针,使所述尾指针指向下一个所述描述符121的位置;
若所述报文数据传输完成,关闭所述写指令寄存器24,结束上报报文。
参见图6,当主机CPU向外设下发报文时,逻辑控制器21使能读指令寄存器25,发起DMA读。
若所述环形缓冲区未空,从所述环形缓冲区中所述尾指针指向的地址读出所述报文数据,读地址为:
Addr2R=Addr2B+Ptr2T×Size2DMA
其中,Addr2R为所述读地址;Addr2B为所述基地址;Ptr2T表示所述尾指针指向的所述描述符的位置;Size2DMA为所述DMA内存块的大小;
更新所述尾指针,使所述尾指针指向下一个所述描述符的位置;
若所述环形缓冲区已空,等待主机CPU将所述报文数据写入所述所述环形缓冲区中所述头指针指向的地址,写地址为:
Addr2W=Addr2B+Ptr2H×Size2DMA
其中,Addr2W为所述写地址;Addr2B为所述基地址;Ptr2H表示所述头指针指向的所述描述符的位置;Size2DMA为所述DMA内存块的大小;
更新所述尾指针,使所述尾指针指向下一个所述描述符的位置;
若所述报文数据传输完成,关闭所述读指令寄存器25,结束下发报文。
在上述外设与主机CPU进行数据传输的步骤中,所述头指针与所述尾指针沿着所述环形缓冲区11的同一个方向移动。参见图2和图3,以所述头指针和所述尾指针沿着所述环形缓冲区11的顺时针移动为例,判断所述环形缓冲区11是否已满的具体方法为,比较所述头指针和所述尾指针的位置,若所述尾指针指向的所述描述符121位于所述头指针指向的所述描述符121的前一个位置,例如所述头指针指向的所述描述符121的位置为2,所述尾指针指向的所述描述符121的位置为3,证明所述头指针下一个将要指向的地址中的数据未被读出,无法继续写入,所述环形缓冲区11已满,反之则证明所述环形缓冲区11未满。同样判断所述环形缓冲区是否已空的具体方法为,比较所述头指针和所述尾指针的位置,若所述尾指针指向的所述描述符121的位置与所述头指针指向的所述描述符121的位置相同,证明所述环形缓冲区11中的数据已经全部被读出,所述环形缓冲区11已空,反之则证明所述环形缓冲区11未空。
本实施例还提供一种DMA数据传输方法,应用于上述DMA数据传输***,参见图7,所述方法步骤为:
在主机***内存中申请环形缓冲区11,并初始化所述环形缓冲区11。所述环形缓冲区11上设有头指针和尾指针,所述头指针指向所述环形缓冲区11中待写入报文数据的地址,所述尾指针指向所述环形缓冲区11中待读出报文数据的地址。
初始化所述头指针的地址和所述尾指针的地址。将所述头指针的初始地址指向所述描述符队列12中首端所述描述符121指向的所述DMA内存块111的地址,将所述尾指针的初始地址指向所述描述符队列12中尾端所述描述符121指向的所述DMA内存块111的地址。
根据所述头指针的地址和所述尾指针的地址,将所述报文数据写入所述环形缓冲区11,或者在所述环形缓冲区11中读出所述报文数据。同步更新所述头指针和所述尾指针,使所述头指针指向所述环形缓冲区11中下一个待写入所述报文数据的地址,使所述尾指针指向所述环形缓冲区11中下一个待读出所述报文数据的地址。
本实施例提供的DMA数据传输***,包括数据缓存模块10和DMA控制模块20,所述数据缓存模块包括环形缓冲区11和描述符队列12。在外设与主机CPU进行信息交互时,将数据存储在所述环形缓冲区11,所述环形缓冲区11中设有头指针和尾指针,所述环形缓冲区11的信息储存在所述描述符队列12中。所述DMA控制模块10通过所述描述符队列12对数据的传输过程进行管理,将所述报文数据写入所述环形缓冲区11中所述头指针指向的地址,或者在所述环形缓冲区11中所述尾指针指向的地址读出所述报文数据,并同步更新所述头指针的地址和所述尾指针的地址。
本申请通过更新所述头指针和所述尾指针的方式与主机CPU进行数据交互,无需中断机制,减少了硬件的等待时间,并且所述环形缓冲区11的大小和数量均可配置,多个所述环形缓冲区11可以分时复用数据传输总线带宽,提高数据传输总线带宽的利用率。
本申请提供的实施例之间的相似部分相互参见即可,以上提供的具体实施方式只是本申请总的构思下的几个示例,并不构成本申请保护范围的限定。对于本领域的技术人员而言,在不付出创造性劳动的前提下依据本申请方案所扩展出的任何其他实施方式都属于本申请的保护范围。

Claims (9)

1.一种DMA数据传输***,其特征在于,包括主机CPU、外设数据寄存器以及传输总线,其特征在于,包括数据缓存模块和DMA控制模块;
所述数据缓存模块通过所述传输总线与所述主机CPU连接;所述数据缓存模块通过所述传输总线与所述外设寄存器连接;所述DMA控制模块与所述外设数据寄存器连接;
所述DMA控制模块被配置为,在主机***内存中申请环形缓冲区,并初始化所述环形缓冲区;所述环形缓冲区上设有头指针和尾指针;
所述数据缓存模块包括所述环形缓冲区、所述头指针和所述尾指针;所述环形缓冲区被配置为,储存报文数据;所述头指针被配置为,指向所述环形缓冲区中待写入报文数据的地址;所述尾指针被配置为,指向所述环形缓冲区中待读出报文数据的地址;
所述DMA控制模块被配置为执行以下步骤:
初始所述化头指针的地址和所述尾指针的地址;
根据所述头指针的地址和所述尾指针的地址,将所述报文数据写入所述环形缓冲区,或者在所述环形缓冲区中读出所述报文数据;同步更新所述头指针和所述尾指针,使所述头指针指向所述环形缓冲区中下一个待写入所述报文数据的地址,使所述尾指针指向所述环形缓冲区中下一个待读出所述报文数据的地址。
2.根据权利要求1所述的DMA数据传输***,其特征在于,所述DMA控制模块包括逻辑控制器;在主机***内存中申请环形缓冲区,并初始化所述环形缓冲区的步骤中,所述逻辑控制器被配置为:
在***内存中申请若干个DMA内存块,设置所述DMA内存块的大小和数量;
创建若干个描述符;所述描述符的数量与所述DMA内存块的数量相等,每个所述描述符各指向一个所述DMA内存块;若干个所述描述符依次连接组成描述符队列;所述描述符队列为环形队列,所述描述符将所述DMA内存块串联起来,形成所述环形缓冲区;
将所述环形缓冲区的基地址写入所述外设数据寄存器;所述环形缓冲区的基地址为所述描述符队列中首端所述描述符指向的所述DMA内存块的地址。
3.根据权利要求2所述的DMA数据传输***,其特征在于,所述数据缓存模块还包括所述描述符队列;所述描述符队列被配置为,储存所述DMA内存块的地址和所述DMA内存块的大小。
4.根据权利要求3所述的DMA数据传输***,其特征在于,所述初始化所述头指针的地址和所述尾指针的地址,所述逻辑控制器被进一步配置为:
将所述头指针的初始地址指向所述描述符队列中首端所述描述符指向的所述DMA内存块的地址;
将所述尾指针的初始地址指向所述描述符队列中尾端所述描述符指向的所述DMA内存块的地址。
5.根据权利要求4所述的DMA数据传输***,其特征在于,所述DMA控制模块还包括写指令寄存器和读指令寄存器;所述写指令寄存器被配置为,发起或停止外设向所述主机CPU上报报文;所述读指令寄存器被配置为,发起或停止所述主机CPU向外设下发报文。
6.根据权利要求5所述的DMA数据传输***,其特征在于,在根据所述头指针的地址和所述尾指针的地址,将所述报文数据写入所述环形缓冲区,同步更新所述头指针和所述尾指针的步骤中,所述逻辑控制器被配置为执行以下步骤:
使能所述写指令寄存器,发起DMA写;
若所述环形缓冲区未满,将所述报文数据写入所述环形缓冲区中所述头指针指向的地址,写地址为:
Addr1W=Addr1B+Ptr1H×Size1DMA
其中,Addr1W为所述写地址;Addr1B为所述基地址;Ptr1H表示所述头指针指向的所述描述符的位置;Size1DMA为所述DMA内存块的大小;
更新所述头指针,使所述头指针指向下一个所述描述符的位置;
若所述环形缓冲区已满,等待主机CPU从所述环形缓冲区中所述尾指针指向的地址读出所述报文数据,读地址为:
Addr1R=Addr1B+Ptr1T×Size1DMA
其中,Addr1R为所述读地址;Addr1R为所述基地址;Ptr1T表示所述尾指针指向的所述描述符的位置;Size1DMA为所述DMA内存块的大小;
更新所述尾指针,使所述尾指针指向下一个所述描述符的位置;
若所述报文数据传输完成,关闭所述写指令寄存器,结束上报报文。
7.根据权利要求5所述的DMA数据传输***,其特征在于,在根据所述头指针的地址和所述尾指针的地址,在所述环形缓冲区读出所述报文数据,同步更新所述头指针和所述尾指针的步骤中,所述逻辑控制器被配置为执行以下步骤:
使能所述读指令寄存器,发起DMA读;
若所述环形缓冲区未空,从所述环形缓冲区中所述尾指针指向的地址读出所述报文数据,读地址为:
Addr2R=Addr2B+Ptr2T×Size2DMA
其中,Addr2R为所述读地址;Addr2B为所述基地址;Ptr2T表示所述尾指针指向的所述描述符的位置;Size2DMA为所述DMA内存块的大小;
更新所述尾指针,使所述尾指针指向下一个所述描述符的位置;
若所述环形缓冲区已空,等待主机CPU将所述报文数据写入所述所述环形缓冲区中所述头指针指向的地址,写地址为:
Addr2W=Addr2B+Ptr2H×Size2DMA
其中,Addr2W为所述写地址;Addr2B为所述基地址;Ptr2H表示所述头指针指向的所述描述符的位置;Size2DMA为所述DMA内存块的大小;
更新所述尾指针,使所述尾指针指向下一个所述描述符的位置;
若所述报文数据传输完成,关闭所述读指令寄存器,结束下发报文。
8.根据权利要求6-7任意一项所述的DMA数据传输***,其特征在于,所述DMA控制模块还包括头指针寄存器和尾指针寄存器;
所述头指针寄存器被配置为,储存所述头指针指向的所述描述符的位置;
所述尾指针寄存器被配置为,储存所述尾指针指向的所述描述符的位置;
在更新所述头指针和所述尾指针的步骤中,所述头指针和所述尾指针沿着所述环形缓冲区的同一个方向移动。
9.一种DMA数据传输方法,应用于权利1-8任意一项所述的DMA数据传输***,其特征在于,步骤包括:
在主机***内存中申请环形缓冲区,并初始化所述环形缓冲区;所述环形缓冲区上设有头指针和尾指针;所述头指针指向所述环形缓冲区中待写入报文数据的地址;所述尾指针指向所述环形缓冲区中待读出报文数据的地址;
初始化所述头指针的地址和所述尾指针的地址;
根据所述头指针的地址和所述尾指针的地址,将所述报文数据写入所述环形缓冲区,或者在所述环形缓冲区中读出所述报文数据;同步更新所述头指针和所述尾指针,使所述头指针指向所述环形缓冲区中下一个待写入所述报文数据的地址,使所述尾指针指向所述环形缓冲区中下一个待读出所述报文数据的地址。
CN202111641451.XA 2021-12-29 2021-12-29 一种dma数据传输***及方法 Pending CN114416613A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111641451.XA CN114416613A (zh) 2021-12-29 2021-12-29 一种dma数据传输***及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111641451.XA CN114416613A (zh) 2021-12-29 2021-12-29 一种dma数据传输***及方法

Publications (1)

Publication Number Publication Date
CN114416613A true CN114416613A (zh) 2022-04-29

Family

ID=81269191

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111641451.XA Pending CN114416613A (zh) 2021-12-29 2021-12-29 一种dma数据传输***及方法

Country Status (1)

Country Link
CN (1) CN114416613A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115563038A (zh) * 2022-10-24 2023-01-03 苏州雄立科技有限公司 基于dma控制器的数据处理***、方法和数据处理设备
CN115687200A (zh) * 2022-12-30 2023-02-03 浙江中控研究院有限公司 基于FPGA应用于EPA的PCIe数据传输方法及***
CN116578234A (zh) * 2023-04-27 2023-08-11 珠海妙存科技有限公司 闪存访问***及方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060288129A1 (en) * 2005-06-17 2006-12-21 Level 5 Networks, Inc. DMA descriptor queue read and cache write pointer arrangement
CN104123250A (zh) * 2013-04-25 2014-10-29 上海联影医疗科技有限公司 基于dma的数据传输方法
CN104714918A (zh) * 2013-12-15 2015-06-17 中国航空工业集团公司第六三一研究所 主机环境下高速fc总线数据接收及缓冲方法
CN107302531A (zh) * 2017-06-19 2017-10-27 青岛华潞佳电子科技有限公司 一种基于状态机和环形队列的串口命令解析方法
CN112235206A (zh) * 2019-12-20 2021-01-15 青岛鼎信通讯股份有限公司 一种基于单片机的环形缓冲队列数据接收机制
CN113127391A (zh) * 2021-05-13 2021-07-16 西安微电子技术研究所 一种多设备兼容的dma数据传输引擎设计方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060288129A1 (en) * 2005-06-17 2006-12-21 Level 5 Networks, Inc. DMA descriptor queue read and cache write pointer arrangement
CN104123250A (zh) * 2013-04-25 2014-10-29 上海联影医疗科技有限公司 基于dma的数据传输方法
CN104714918A (zh) * 2013-12-15 2015-06-17 中国航空工业集团公司第六三一研究所 主机环境下高速fc总线数据接收及缓冲方法
CN107302531A (zh) * 2017-06-19 2017-10-27 青岛华潞佳电子科技有限公司 一种基于状态机和环形队列的串口命令解析方法
CN112235206A (zh) * 2019-12-20 2021-01-15 青岛鼎信通讯股份有限公司 一种基于单片机的环形缓冲队列数据接收机制
CN113127391A (zh) * 2021-05-13 2021-07-16 西安微电子技术研究所 一种多设备兼容的dma数据传输引擎设计方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115563038A (zh) * 2022-10-24 2023-01-03 苏州雄立科技有限公司 基于dma控制器的数据处理***、方法和数据处理设备
CN115563038B (zh) * 2022-10-24 2023-11-07 苏州雄立科技有限公司 基于dma控制器的数据处理***、方法和数据处理设备
CN115687200A (zh) * 2022-12-30 2023-02-03 浙江中控研究院有限公司 基于FPGA应用于EPA的PCIe数据传输方法及***
CN116578234A (zh) * 2023-04-27 2023-08-11 珠海妙存科技有限公司 闪存访问***及方法
CN116578234B (zh) * 2023-04-27 2023-11-14 珠海妙存科技有限公司 闪存访问***及方法

Similar Documents

Publication Publication Date Title
CN114416613A (zh) 一种dma数据传输***及方法
CN114443529B (zh) 内存直接访问架构、***、方法、电子设备和介质
EP2097828B1 (en) Dmac to handle transfers of unknown lengths
US8683093B2 (en) Memory system having high data transfer efficiency and host controller
CN107305534B (zh) 同时进行内核模式访问和用户模式访问的方法
CN109558344B (zh) 一种适用于网络传输的dma传输方法及dma控制器
CN107967225B (zh) 数据传输方法、装置、计算机可读存储介质和终端设备
EP0141742A2 (en) Buffer system for input/output portion of digital data processing system
US7844752B2 (en) Method, apparatus and program storage device for enabling multiple asynchronous direct memory access task executions
US20140173162A1 (en) Command Queue for Communications Bus
JP2002541693A (ja) 高性能通信コントローラ
US6128674A (en) Method of minimizing host CPU utilization in driving an adapter by residing in system memory a command/status block a soft interrupt block and a status block queue
JP2557199B2 (ja) インターフェース・システムおよび方法
JP2007079789A (ja) 計算機システム及びイベント処理方法
CN111309656B (zh) 一种fpga通用dma ip核
CN113742269B (zh) 用于epa设备的数据传输方法、处理设备和介质
CN110046114B (zh) 基于pcie协议的dma控制器及dma数据传输方法
CN112131176B (zh) 一种基于pcie的fpga快速局部重构方法
CN104123250A (zh) 基于dma的数据传输方法
CN114817965A (zh) 基于多算法ip核实现msi中断处理的高速加解密***及方法
CN115718711A (zh) 一种dma数据传输的***和方法
CN111221757B (zh) 一种低延迟pcie dma数据传输方法及控制器
US8996772B1 (en) Host communication device and method with data transfer scheduler
CN110990309A (zh) Tte端***适配卡pcie控制器的高效中断操作方法
US8151015B2 (en) Systems and methods for effecting DMA data transfers

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination