图5. 驱动程序流程图
2 USB驱动程序和应用程序的开发
GPD(General Purpose Driver)是一个通用目的的设备驱动程序,是应用程序与EZ-USB 外设进行通信的桥梁。EZ-USB的GPD 代码Cypress公司提供原型,用户可以在此基础上生成定制驱动程序。
1)定制驱动程序的生成
采用Cypress 提供的GPD,由于GPD 只能执行一些标准的USB 设备请求和数据传输,
不能满足用户特定外设的需要,需进行扩充以生成用户定制驱动程序。对GPD 中的EZUSBSYS. C,EZUSBSYS. H,SOURCES 进行修改,再在WindowsDDK 与VC ++ 6. 0 下利用Build 命令重新编译即可生成用户定制驱动程序。
2)设备驱动程序与应用程序的接口
设备驱动程序介于硬件与用户应用软件之间。用户可以以一种规范的方式调用Win32API函数访问硬件,而不必考虑如何控制硬件。为了方便人们开发新的驱动程序,Windows已经自带了一些类驱动程序,用户只需要在这些类驱动程序的基础上编写功能驱动程序来实现特定的功能。图5给出了驱动程序的调用流程,可以清楚地看到功能驱动程序所处的层次。
开发过程中主要是了解应用程序中如何调用驱动提供的接口函数。用户应用程序通过
I / O 控制调用访问EZ-USB 设备驱动程序达到控制USB 设备的目的,应用程序首先通过调用Win32函数CreateFile来取得访问设备驱动程序的句柄,再利用Win32函数DeviceIoControl对设备进行I / O 控制。
(1) 获取设备句柄。
EZ-USB 设备驱动程序可以与多个EZ-USB 设备通信。每一个连接到主机的EZ-USB 设备,驱动程序都为它创建一个形如Ezusb-i(i从0递增)的链接符。Win32 函数CreateFile以设备链接符为参数获取第i个Ezusb设备的句柄。通过CreateFile函数获取USB 设备句柄后,再利用I / O控制来处理设备的I / O 请求。[2]
(2) 设备I / O 控制
应用程序通过Win32 函数DeviceIoControl向设备驱动程序发送I / O 请求。DeviceIoControl函数通过I / O 控制码(IOCTRL)及其他辅助参数向设备驱动程序发送特定的I / O 请求并返回操作结果,来实现数据或控制命令的传输。[2]
3.2.3 Win32应用程序
上位机应用程序主要负责读取硬件所输出的数据采集结果并向下发送控制指令,而且能存储和显示采集到的波形。Win32程序使用VC++6.0实现,通过USB中断或块传输来读取AD采集结果,采样速度可以达到20K。
五、结速语
本文通过介绍ADS7825和EZ-USB FX2芯片的特点及相关的软硬件基本开发过程,阐述了实现光谱数据采集系统的全过程。笔者根据上文提到方法设计了硬件并编写了相应的固件程序、驱动程序和应用程序,在实际应用中已获得正常使用。