先进先出存储器
在DMA传输方式下,由于PCI9054内部的FIFO只有32级深度,实时传送高速数据时,PCI9054内部的FIFO会很快存满,而DSP内的数据仍会源源不断的传送过来,易造成数据的丢失,因此必须要扩展外部FIFO。
本系统采用I D T公司高速CMOS同步FIFO芯片IDT72V3660,它的容量为4096×36bit;有高达100MHz的读写速度;可以兼容3.3V和5V两种接口电压。该FIFO具有标准的"满"(FF#)、"半满"(HF#)、"空"(EF#)等标志。系统可以根据这些标志信号控制对FIFO的读写操作。在CPLD的逻辑控制下,当WEN#有效时,在WCLK的每一个上升沿,FIFO会把输人数据线上的数据存入内部存储器。当REN#有效且输出允许(OE#有效)时,在RCLK的每一个上升沿,FIFO会把内部存储器中的数据发送到输出数据总线上(低电平用"#"表示)。
该系统的软件设计主要包括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传输。一次数据传输完毕后,驱动程序通过操作系统将内核中的数据拷贝到用户态内存,交给应用软件处理。