基于DSP的PCI高速测控系统结构的研究
控制逻辑芯片 CPLD
本系统采用 Altera公司的 EPM7 128来实现系统的逻辑控制,主要包括 DSP控制逻辑、 FIFO控制逻辑、 PCI9054接口控制逻辑三个部分,其中,对 PC219054的逻辑控制是设计的重点。设计中利用 MaxPlusⅡ软件进行 VHDL语言编程、仿真和调试。
PCI9054 及外部接口分析
PCI与板载 CPU的桥接有两种设计方案,一种是采用 FPGA,通过软件编程实现硬件功能。另一种是利用专用 PCI桥接芯片,适合快速开发的场合。
本系统采用 PLX公司的 PCI总线专用接口控制芯片 PC19054。它符合 PCIV2.1和 PCIV2_2规范;可同时支持 3.3V和 5V两种信号环境;提供了两个独立的可编程 DMA控制器;内部有 6种可编程 FIFO,以实现零等待突发传输及局部总线和 PCI总线之间的异步操作;在 PCI总线端支持 33MHz/ 32位,传输速率最高可达 132MB/ s;在局部端可编程实现 8/ 16/ 32位的数据宽度,支持复用/非复用的 32位地址/数据,时钟最高可达 50MHz。
PCI9054局部总线可工作在 M、 J、 C三种模式, M模式是专门为 Motorola公司的 MPC850和 MPC860提供直接非复用的接口; J模式地址/数据线复用; C模式与 J模式差别不大,但地址/数据线非复用,更符合连接习惯。本设计采用 C模式。
PCI9054的数据传输模式可分为主模式、从模式、 DMA模式。模式的选择主要根据硬件设计者对硬件的设计需要而定。本系统采用 DMA模式,在 DMA传输模式下, PCI9054既是 PCI端的主控方,又是局部端的主控方。
PCI9054集成了两个互相独立的 DMA通道,每个通道都支持 Block DMA和 Scatter/( 3ather DMA,其中通道 0还支持请求( Demand) DMA传输方式。当有通道进行 DMA传输时, DMA控制器将发起对局部总线和 PCI总线操作,其传输过程如图 2所示。
PC219054提供了三个物理总线接口: PCI总线接口、 EEPROM接口、局部总线接口。 PCI总线接口依照 PCI扩展板上定义的引脚分配情况将彼此对应的信号连接在一起即可。本系统采用的 EEPROM为 4K、 3.3V串行的 93LC66B,通过对 PCI时钟分频来产生 EEPROM时钟,内部存放 PCI9054的配置信息,系统加电时 PCI9054自动加载 EEPROM中的配置信息,并由 BIOS通过 PCI总线对配置寄存器读写,来完成各种控制功能。接口电路如图 3所示。
PCI9054在 DMA传输方式下,通过设置其 DMA控制器内部的寄存器即可实现两总线之间的数据传送。传输过程由以下几个步骤实现:
1.设置传输方式寄存器:通过寄存器 DMA MODE0或 DMAMODE1的位 9来设置 DMA通道的传输方式,置 0表示 Block传输,置 1表示 Scatter/ Gather传输;
2.设置命令/状态寄存器:启动/停止 DMA操作,并读此寄存器返回 DMA状态;
3.设置描述寄存器:设置 DMA的传输方向;
4.设置传输计数寄存器:以字节为单位设置传输数据量;
5.设置 PCI地址寄存器:设置 PCI总线侧的地址空问;
6.设置局部地址寄存器:设置局部总线侧的地址空间。 当进行数据采集时,由应用程序或通过 DSP的外部引脚( pin21)向 DSP发出采集命令,同时复位 FIFO,在 13SP内部程序和 CPLD的控制下,数据经 DO-31源源不断地输入到 FIFO中,当 FIFO半满时发出半满标志信号( HF#), CPLD接到半满信号后,立即向 PCI9054发出中断请求信号( LINT),驱动程序响应中断,在中断响应程序内,发出读命令、要读取的字节数、传输方向、地址信号等, PCI9054设定“ DMA传输开始位”启动数据传输,当 ADS#为低(有效), BLAST为高(无效), LW/ R为低(有效)时,表明 PCI9054开始一个有效的读数据周期, CPLD产生一个低电平信号 REN#给 FIFO,同时作为 Ready信号返回给 PCI9054, 表明已准备就绪。直到 ADS#为高(无效)且 BLAST#为低(有效)时,表明 PCI9054已经开 始最后一个周期,同时设定 D M A“传输结束位”结束 DMA操作,此时 REN#信号再次变高电平(无效),完成一次数据突发传输。接口电路如图 4所示。
该系统的软件设计主要包括 DSP测控程序、 PCI设备驱动程序和 Windows应用程序三个部分。驱动程序是连接硬件系统和应用程序的桥梁,是整个测控系统开发中的关键一步。在此简单介绍一下 PCI设备驱动程序开发过程。
在 Windows环境下共有三种类型的驱动程序,分别是 VXD、 NT、 WDM。因为 WDM可以应用在 windows98/ 2000/ XP下,支持即插即用、电源管理、 WMI等功能,是 Windows NT驱动体系基础上发展起来的未来主流驱动程序体系,所以为这里选择设计 WDM驱动程序。
开发工具选择 Compuware公司提供的 DriverStudio完成驱动程序的开发, DriverWorks是 DriverStudio中的一个部分, DriverWorks中的类库封装了针对驱动程序的各种通用操作,使用其中的 DriverWizard向导功能,能够非常方便地实现 WDM驱动程序的开发。
其中 PCI配置空间的访问采用 KPciConfiguration实现。 I/ O访问采用 DriverStudio中的 KIoRange类实现。硬件中断响应的处理可以采用 Kinterrupt类实现。 DMA读主要是利用三个类来实现数据传输,分别为: KDmaTransfer、 KdmaAdapter和 K C o m m o n D m a B U ff e r。 KDmaTransfer用于 DMA传输控制。 KdmaAdapter用于建立一个 DMA适配器来说明 DMA通道的特性。 KCommonDmaBuffer用于申请系统提供的公用缓冲区。
执行过程中驱动程序首先设置 PCI9054的工作方式和中断寄存器、 DMA配置寄存器,然后等待本地中断的到来。当 FIFO半满时表明本地中断到来,在设备成员函数 Isr_IrqO中屏蔽本地中断,在设备成员函数 DpcFor_Irq()中调用 KDmaTransfer: Continue()函数进行 DMA传输。一次数据传输完毕后,驱动程序通过操作系统将内核中的数据拷贝到用户态内存,交给应用软件处理。
结语
在实验室中利用 PCI9054作为接口芯片的高速测控系统,可实现持续数据传输速率达 50MB/ s,且系统运行稳定,具有广泛的应用前景。