CN114461273A - 一种对pci设备进行dma读写操作的方法 - Google Patents
一种对pci设备进行dma读写操作的方法 Download PDFInfo
- Publication number
- CN114461273A CN114461273A CN202210026555.8A CN202210026555A CN114461273A CN 114461273 A CN114461273 A CN 114461273A CN 202210026555 A CN202210026555 A CN 202210026555A CN 114461273 A CN114461273 A CN 114461273A
- Authority
- CN
- China
- Prior art keywords
- dma
- register
- physical address
- read
- computer
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/12—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
- G06F13/124—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
- G06F13/126—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine and has means for transferring I/O instructions and statuses between control unit and main processor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Bus Control (AREA)
Abstract
本发明公开了一种对PCI设备进行DMA读写操作的方法,所述方法包括如下步骤:对DMA的寄存器进行配置;根据所述寄存器配置的DMA模式,开辟物理地址空间;物理地址开辟完成后,根据所述寄存器配置的DMA模式以及DMA读写的方向,开启DMA的数据读写;数据读写完成后,进行中断服务,释放物理地址空间。该方法以DMA读写操作的方式完成对PCI设备的数据传输,传输速率更快。
Description
技术领域
本方法属于PCI总线领域,具体而言属于一种对PCI设备进行DMA读写操作的方法。
背景技术
PCI是外设部件互连标准的缩写,它是目前个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽。PCI设备在工业控制中应用也是相当广泛,可是PCI设备的单次读写操作效率很低,每次申请总线占用太多的时间,无法满足实时性、大数据的传输要求。
DMA是直接存储器访问的缩写,允许不同速度的硬件装置来沟通,而不需要依赖于CPU的大量中断负载,DMA传输将数据从一个地址空间复制到另外一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。
对于传统的PCI总线来说,它既支持单次数据传输,也支持突发数据传输。无论哪种工作模式传输数据都有数据连接建立的过程,因此对于33MHZ的工作时钟来说,其单次数据传输在8个时钟周期内传输33bit的数据,传输速率依旧较低。在用户具有越来越多的数据传送要求的情况下,提高主设备和主机之间的传输速度显然是大势所趋。
有鉴于此,特提出本发明。
发明内容
本发明的第一目的在于提供一种对PCI设备进行DMA读写操作的方法,该方法通过DMA读写的方式大大加快了PCI总线的数据传输速率,并且此方法在数据传输时不需要计算机的CPU进行控制和参与,提高了计算机的利用效率。
本发明的第二目的在于提供一种支持上述方法的设备,所述设备能够支持对PCI设备进行DMA读写操作。
为了实现本发明的上述目的,特采用以下技术方案:
本方法包括如下步骤:
对DMA的寄存器进行配置;
根据所述寄存器配置的DMA模式,开辟物理地址空间;
物理地址开辟完成后,根据所述寄存器配置的DMA模式以及DMA读写的方向,开启DMA的数据读写;
数据读写完成后,进行中断服务,释放物理地址空间。
其中对DMA寄存器进行配置过程中,需要进行配置的寄存器包括:存放DMA使能模式的DMAMODE0寄存器,所述使能模式包括BLOCK模式、BURST模式、Bterm模式等;存放对PCI设备进行DMA写操作的起始地址的DMAPADR0寄存器;存放对PCI设备进行DMA读操作的起始地址的DMALADR0寄存器;存放一次DMA操作传输的字节数的DMASIZ0寄存器;存放DMA读写操作方向的DMADPR0寄存器。
寄存器配置完成之后需要计算机开辟物理地址空间了,开辟物理地址空间时,会根据DMA模式的不同而开辟不同的物理地址空间,这里所说的不同的物理地址空间指的是其地址连续或是不连续,具体而言DMA模式是BLOCK模式时,开辟的物理地址空间为连续的;DMA模式是Scatter/Gather模式时,开辟的物理地址空间时不连续的。
由于在寄存器配置环节已经配置完毕了DMAPADR0寄存器,因此在物理地址开辟完成后,直接将所述物理地址的首地址写入DMAPADR0寄存器中即可,这样可直接将所述物理地址的首地址作为PCI内存空间的DMA传输的起始地址。
物理地址开辟完成之后就需要开始进行数据传输了,此时需要根据DMA读写方向和DMAMODE0寄存器中存放的DMA模式的不同,来对DMADPR0寄存器进行配置,具体而言为:当DMA传输方向为从PCI到本地时,即DMA写时,将需要传输的数据放在实现开辟好的物理地址中,之后判断是BLOCK模式还是Scatter/Gather模式来向DMADPR0寄存器写入不同的值。后续对DMACSR0寄存器写入特定的值即可使能DMA通道0并启动通道0,DMA数据传输便开始了。
数据传输结束后,会触发IST中断,之后会判断此中断是否是DMA0中断,如果是,则会开始执行DMA0中断服务函数,在中断服务函数中要实现的目标包括:停止通道0并清除中断,还需要释放计算机开辟出的物理地址空间,如此即实现了对PCI设备进行DMA读写的操作。
值得一提的是,在上述方法步骤进行之前还需要进行一系列的预处理工作,所述预处理工作是由计算机的CPU进行完成的。所述预处理工作包括:搜索PCI设备、初始化PCI设备、中断挂起,其中所述搜索设备为搜索总线上满足指定供应商ID和设备ID的设备;所述初始化PCI设备是将PCI设备的总线地址转换为计算机物理地址,然后将计算机物理地址映射成虚拟地址;所述中断挂起指的是连接中断服务线程,设置中断优先级,使能全局中断、本地中断和DMA中断。
本发明还公开了一种对PCI设备进行DMA读写操作的设备,其包括:
寄存器配置模块:用于对DMA的寄存器进行配置;
物理地址开辟模块:用于根据所述寄存器配置的DMA模式,开辟物理地址空间;
读写启动模块:用于物理地址开辟完成后,根据所述寄存器配置的DMA模式以及DMA读写的方向,开启DMA的数据读写;
读写结束模块:用于数据读写完成后,进行中断服务,释放物理地址空间。
并且本发明还公开了一种计算机可读存储介质,其上存储有计算机程序,所述程序执行时实现上述方法的步骤。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述方法的步骤。
与现有技术相比,本发明的有益效果在于:
(1)通过DMA传输的方式来实现对PCI设备的读写,大大加快了PCI设备的数据传输速率,并且由于DMA传输的过程中不需要由计算机的CPU进行参与,因此也节省了计算机的CPU计算资源。
(2)此方法使用方便,维护起来也相对简单,且适用性较高。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本发明实施例提供的方法流程示意图;
图2为本发明实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合附图和具体实施方式对本发明的技术方案进行清楚、完整地描述,但是本领域技术人员将会理解,下列所描述的实施例是本发明一部分实施例,而不是全部的实施例,仅用于说明本发明,而不应视为限制本发明的范围。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了更加清晰的对本发明中的技术方案进行阐述,下面以具体实施例的形式进行说明。
实施例
参阅图1所示,本实施例提供了一种在RTX64实时操作系统中对PCI9054设备进行DMA读写操作的方法,所述方法包括如下步骤:
在DMA正式的读写操作前,需要由CPU进行一些预处理工作,包括:搜索PCI设备,使用到了DeviceSearch(VENDOR_ID,DEVICE_ID,&slotNumber,pciData)函数,此函数中VENDOR_ID为0x10B5,DEVICE_ID为0x9054,slotNumber为槽号指针,pciData为PCI数据指针;设备初始化,使用到了GetMemBaseAddr(pciData,busNumber,BAR0_INDEX)函数,其中busNumber为总线号,BAR0_INDEX为基地址标志,该函数中包含了两个子函数,分别是RtTranslateBusAddress函数与RtMapMemory函数,它们的作用分别是将板卡的总线地址转换为计算机物理地址,然后将计算机物理地址映射成软件可以使用的虚拟地址;中断挂起,使用到了RtAttachInterrupt(&AttachParams)函数,其中AttachParams为中断配置参数指针,可以根据此指针进行中断服务函数、中断优先级等的配置。
S1:对DMA的寄存器进行配置。
该步骤中,具体配置的寄存器包括:DMAMODE0寄存器、DMAPADR0寄存器、DMALADR0寄存器、DMASIZ0寄存器和DMADPR0寄存器,其中DMAMODE0寄存器用于存放DMA使能模式;DMAPADR0寄存器用于存放对PCI设备进行DMA写操作的起始地址;DMALADR0寄存器用来存放对PCI设备进行DMA读操作的起始地址;DMASIZ0寄存器用来存放一次DMA操作传输的字节数;DMADPR0寄存器用来存放DMA读写操作方向。
还需要配置INTCSR寄存器,将其bit18设置为1,这代表了本地DMA0的中断使能。
S2,根据所述寄存器配置的DMA模式,开辟物理地址。
该步骤中,采用函数RtAllocateContiguousMemory(ULONG Length,LARGE_INTEGER PhysicalAddress)来开辟物理地址空间,其中参数Length为0x400,PhysicalAddress为0xffffff,该函数的返回值是虚拟地址的基地址pVirtualAddress,采用函数RtGetPhysicalAddress(pVirtualAddress)获取到物理地址的首地址,将该首地址写入到DMAPADR0寄存器中,代表了对PCI设备进行DMA写操作的起始地址。
S3,物理地址开辟完成后,根据所述寄存器配置的DMA模式以及DMA读写的方向,开启DMA的数据读写。
该步骤中,根据DMA读写方向和DMA模式的不同,来配置寄存器以开启DMA传输,具体而言为:当DMA写操作时,使用memcpy函数将需要写的数据放在开辟事先开辟的物理地址空间中,之后判断DMA模式,如果是BLOCK模式,则向DMADPR0寄存器写入0x0,若是Scatter/Gather模式,DMADPR0寄存器写入0x3,向DMADPR0寄存器写入完后,再向DMACSR0寄存器写入0x3,即可以使能DMA通道0,并启动通道0,数据会开始传输;当DMA读操作时,判断DMA模式,若是BLOCK模式,DMADPR0寄存器写入0x8,若是Scatter/Gather模式,DMADPR00寄存器写入0xB,向DMADPR0寄存器写入完后,向DMACSR0寄存器写入0x3,即可使能DMA通道0,并启动通道0,数据就会开始传输。
S4,数据读写完成后,进行中断服务,释放物理地址空间。
该步骤中,数据传输完成之后会触发IST中断,会读取INTCSR寄存器的bit21判断是否是DMA0中断,如果是DMA0中断,则会执行DMA0中断服务函数,所述中断服务函数会向DMACSR0寄存器中写入0x8来停止通道0并清除中断。最后需要释放掉计算机开辟的物理地址,使用到了RtFreeContiguousMemory(pVirtualAddress)函数,如此即算完成了DMA的数据传输。
本实施例还提供了一种对PCI设备进行DMA读写操作的设备,其包括:
寄存器配置模块:用于对DMA的寄存器进行配置;
物理地址开辟模块:用于根据所述寄存器配置的DMA模式,开辟物理地址空间;
读写启动模块:用于物理地址开辟完成后,根据所述寄存器配置的DMA模式以及DMA读写的方向,开启DMA的数据读写;
读写结束模块:用于数据读写完成后,进行中断服务,释放物理地址空间。
图2是本发明公开的一种计算机设备的结构示意图。参考图2所示,该计算机设备包括:输入装置63、输出装置64、存储器62和处理器61;所述存储器62,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器61执行,使得所述一个或多个处理器61实现如上述实施例提供的一种辐射归一化方法;其中输入装置63、输出装置64、存储器62和处理器61可以通过总线或者其他方式连接,图2中以通过总线连接为例。
存储器62作为一种计算设备可读写存储介质,可用于存储软件程序、计算机可执行程序,如本申请实施例所述的一种辐射归一化方法对应的程序指令;存储器62可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等;此外,存储器62可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件;在一些实例中,存储器62可进一步包括相对于处理器61远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置63可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入;输出装置64可包括显示屏等显示设备。
处理器61通过运行存储在存储器62中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理。
上述提供的计算机设备可用于执行上述实施例提供的一种辐射归一化方法,具备相应的功能和有益效果。
本申请实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如上述实施例提供的一种辐射归一化方法,存储介质是任何的各种类型的存储器设备或存储设备,存储介质包括:安装介质,例如CD-ROM、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如DRAM、DDR RAM、SRAM、EDO RAM,兰巴斯(Rambus)RAM等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等;存储介质可以还包括其它类型的存储器或其组合;另外,存储介质可以位于程序在其中被执行的第一计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到第一计算机系统;第二计算机系统可以提供程序指令给第一计算机用于执行。存储介质包括可以驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。
当然,本申请实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上实施例所述的一种对PCI设备进行DMA读写操作的方法,还可以执行本申请任意实施例所提供的一种对PCI设备进行DMA读写操作的方法。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种对PCI设备进行DMA读写操作的方法,其特征在于,包括如下步骤:
对DMA的寄存器进行配置;
根据所述寄存器配置的DMA模式,开辟物理地址空间;
物理地址开辟完成后,根据所述寄存器配置的DMA模式以及DMA读写的方向,开启DMA的数据读写;
数据读写完成后,进行中断服务,释放物理地址空间。
2.根据权利要求1所述的方法,其特征在于,所述配置寄存器过程中需要配置的寄存器包括:DMAMODE0寄存器、DMAPADR0寄存器、DMALADR0寄存器、DMASIZ0寄存器和DMADPR0寄存器。
3.根据权利要求2所述的方法,其特征在于,物理地址开辟完成后,将物理地址首地址存放入所述DMAPADR0寄存器中,以作为DMA对PCI设备读操作的起始地址。
4.根据权利要求1所述的方法,其特征在于,所述开启DMA数据读写过程中,根据DMA读写方向和DMA模式的不同向寄存器存放入不同的值,以启动通道0,进而开启DMA的读写操作。
5.根据权利要求4所述的方法,其特征在于,DMA读写完成后触发中断,若所述中断为DMA0中断,执行DMA0中断服务函数以停止所述通道0并清除中断,释放物理地址。
6.根据权利要求1所述的方法,其特征在于,在配置寄存器之前还需要进行预处理工作,包括:搜索PCI设备、初始化PCI设备、中断挂起;其中所述初始化PCI设备是将PCI设备的总线地址转换为计算机物理地址,然后将计算机物理地址映射成虚拟地址。
7.根据权利要求6所述的方法,其特征在于,所述预处理工作由计算机的CPU完成。
8.一种对PCI设备进行DMA读写操作的设备,其特征在于,包括:
寄存器配置模块:用于对DMA的寄存器进行配置;
物理地址开辟模块:用于根据所述寄存器配置的DMA模式,开辟物理地址空间;
读写启动模块:用于物理地址开辟完成后,根据所述寄存器配置的DMA模式以及DMA读写的方向,开启DMA的数据读写;
读写结束模块:用于数据读写完成后,进行中断服务,释放物理地址空间。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序执行时实现权利要求1-7任一项所述方法的步骤。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210026555.8A CN114461273A (zh) | 2022-01-11 | 2022-01-11 | 一种对pci设备进行dma读写操作的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210026555.8A CN114461273A (zh) | 2022-01-11 | 2022-01-11 | 一种对pci设备进行dma读写操作的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114461273A true CN114461273A (zh) | 2022-05-10 |
Family
ID=81409044
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210026555.8A Pending CN114461273A (zh) | 2022-01-11 | 2022-01-11 | 一种对pci设备进行dma读写操作的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114461273A (zh) |
-
2022
- 2022-01-11 CN CN202210026555.8A patent/CN114461273A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI679539B (zh) | 主從式系統、指令執行方法與資料存取方法 | |
US7171526B2 (en) | Memory controller useable in a data processing system | |
US5564114A (en) | Method and an arrangement for handshaking on a bus to transfer information between devices in a computer system | |
US6128732A (en) | Implementing universal serial bus support with a minimum of system RAM | |
JP3415975B2 (ja) | ホスト・メモリと非dma対応の拡張データ処理装置との間でデータを転送する方法 | |
US9164804B2 (en) | Virtual memory module | |
CN110941395B (zh) | 动态随机存取存储器、内存管理方法、系统及存储介质 | |
WO2022227473A1 (zh) | 一种spi访问控制方法、系统、计算设备及存储介质 | |
JPH1069455A (ja) | コンピュータ・システム・バス上でスレーブdmaエミュレーションを行う方法 | |
US6047349A (en) | System for communicating through a computer system bus bridge | |
US5428760A (en) | Circuitry and method for sharing internal microcontroller memory with an external processor | |
US7165124B2 (en) | Data transfer control system, electronic instrument, program, and data transfer control method | |
JP2002503847A (ja) | 2次バスからのメッセージング・ユニットへのアクセス | |
US9047264B2 (en) | Low pin count controller | |
JP2963426B2 (ja) | バスブリッジ装置及びトランザクションフォワード方法 | |
JPH10116187A (ja) | マイクロコンピュータ | |
CN110765060B (zh) | Mdio总线到并行总线转换方法及装置、设备、介质 | |
CN114461273A (zh) | 一种对pci设备进行dma读写操作的方法 | |
CN110765065A (zh) | 片上系统 | |
CN111177027B (zh) | 动态随机存取存储器、内存管理方法、系统及存储介质 | |
US5974239A (en) | Data transfer method for a bus device in a computer system by placing first and second addresses corresponding to a bridge and with the bus device respectively on a bus | |
CN114168503A (zh) | 一种接口ip核控制方法、接口ip核、装置及介质 | |
CN116601616A (zh) | 一种数据处理装置、方法及相关设备 | |
US20040230734A1 (en) | Data transfer control system, electronic instrument, and data transfer control method | |
US7694004B2 (en) | Bit-granular writes of control registers |
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 |