采用PCI9052及GP2010实现GPS信号采集
9052有5个本地空间,用户可根据实际需要进行相应的配置。当将本地空间配置成I/O时,对该空间的读/写操作只能单次进行。利用PLXMon来开发驱动程序(调用其提供的API函数)进行I/O读/写,速度会十分慢(一般不会超过500kHz);而如配置成存储器空间,用户会
有多种接入模式,可大大提高接入速度。突发模式是为提高本地总线操作速度而设计的。在该模式期间,9052只提供一次传输开始和终止信号。开始信号有效后,地址将以本地时钟的频率(最高可达40MHz)递增,可以利用Bterm#引脚是否有效来终止突发操作。由于FIFO只需要一个口地址,在设计中为了利用其快速的存储器访问(突发访问)特性,我们还是为其分配了36KB的地址空间,以保证在该范围内FIFO的片选始终有效。图4是一次突发读时序。其中LCLK是本地时钟,ADS有效表示一次传输的开始,BLAST有效表示本次传输的终止。
在此须澄清一个概念:Pentium系列计算机(指CPU),不支持突发读操作,只可能产生单次读操作。用户若想在PCI总线上实现突发操作(FRAME信号有效,多余一个PCI时钟周期),应使用支持DMA传输的芯片,如PLX9054。但9052会将PCI总线上的多次单次读操作转化为本地空间上的突发操作。
5 PLXMon及PLX器件驱动程序的开发
PLXMon是PLX公司专为其产品开发的测试软件。在用户的板卡插入PCI槽,并安装了PLXMon提供的驱动程序后,启动该软件就可以观察和修改芯片内部寄存器的值,并可以对存储器空间进行测试。
Windows下的驱动程序包括硬件物理设备的驱动程序和文件系统等非物理设备的虚拟设备驱动程序,我们所编写的是硬件物理设备的驱动程序。Windows类操作系统(Windows 95、Windows 98、WindowsNT、Windows 2000)为了保证其安全性、稳定性和可移植性,对应用程序访问硬件资源加以限制,用户需要对系统硬件及操作系统软件有详细的了解才可开发出高效的驱动程序,因此开发周期较长。利用第三方提供的开发软件,可以大大缩短开发时间,但效率不一定高,尤其对实时性要求严格的程序显得有些无力。
①Device Developer Kit(DDK)。该软件中包括了有关设备驱动开发的文档、编译需要的头文件和库文件、调试工具和程序范例;但是由于DDK主要是使用汇编语言进行描述,开发起来比较困难。
②VtoolsD。该软件包是基于C/C++的,支持BorlandC++和VisualC++,使用和维护比较方便。
③WinDriver。允许用户使用Visual C++、Borland或者其它Win32编程工具软件在用户模式(UserMode)上编写设备驱动程序。
④PLXMon。PLX公司专为其芯片提供的驱动程序开发包和测试软件,同样可以在用户模式上编写。支持Visual C++环境。
图4 突发读时序
在开发程序时,我们发现PLXMon和WinDriver不兼容,而且除非有正式版本的WinDriver;否则试用期过后,利用它开发的驱动程序将无法使用。所以建立使用PLXMon,只需包括相应的头文件,用户便可以方便地调用其提供的API函数,对板卡上的资源进行访问。以下的程序片段是在调试电路板时编写的基本查询中断是否有效来读取缓存的。所调用的函数均为PLXMon提供的API函数。其中:PlxPciBaseAddressesGet()是得到板卡上存储空间的物理地址,而*(Data+i)=*(U32*)(va.Va3)是将该空间的值装入计算机内存。
图5是驱动程序流程图。
程序段如下:
Example:
rc_w=PlxPciBaseAddres
《采用PCI9052及GP2010实现GPS信号采集(第2页)》