基于ISP1581的USB数据采集系统的实现

来源:电子工程世界 作者:—— 时间:2010-08-24 09:27

(5)硬件接口访问程序:硬件接口程序负责完成DSP对ISP1581的读写操作,它是整个固件程序中最底层也是使用最频繁的部分,在这里主要定义了2种类型的函数:ISP1581常用寄存器访问函数和数据端口寄存器访问函数。

  常用寄存器访问函数:

  void outport(unsigned int *reg_addr, unsigned short value);

  unsigned short inport(unsigned int *reg_addr);

  数据端口寄存器访问函数:

  void write_ep(unsigned short *addr, unsigned short size);

  unsigned short read_ep(unsigned short *addr);

  write_ep为写端点发送缓冲区函数,其中参数*addr为指向待发送缓冲区的起始地址指针,参数size为要发送数据的字节数;read_ep为读端点接收缓冲区函数,参数含义与write_ep函数相同,返回值为接收数据的字节数。

  2.2 驱动程序开发

  Windows环境下驱动程序有3种模型:VxD模型、KMD模型、WDM模型。WDM模型是微软力推的全新驱动程序模型,现在主流的操作系统都是采用基于WDM模型的驱动程序,因此本采集系统也采用WDM驱动程序模型来开发USB设备的驱动程序[6]。

  对于USB设备,其WDM驱动程序分为USB底层(总线)驱动程序和USB功能(设备)驱动程序。USB底层驱动程序由操作系统提供,负责与实际的硬件打交道,实现底层通信。USB功能驱动程序由设备开发者编写,不对实际的硬件进行操作,而是通过向USB底层驱动程序发送包含请求块URB(USB Request Block)的IRP,以实现对USB设备信息的发送和接收。

  目前,WDM驱动程序开发工具有3种:Microsoft公司的DDK、Numega公司的DriverStudio和Jungo公司的WinDriver。其中,DDK的开发难度较大,开发者需要对整个体系结构和WDM规范有很好的理解和把握,还要熟悉上千个DDK函数的功能和使用场合,且测试流程繁琐;DriverStudio的开发难度低一些,它将DDK函数按照逻辑功能进行组织,把很多常用功能封装成类,建立了一个基于C++语言的面向对象的编程环境,开发者面对的不再是上千个复杂凌乱的DDK函数,而是逻辑清晰的类库;WinDriver的开发几乎没有难度,开发者所编写的只是定制和调用它提供的通用驱动,开发周期较短,特别适合于驱动程序初学者使用。

  利用WinDriver开发设备驱动程序,有2种方法:(1)用Wizard自动生成驱动程序的框架代码,根据实际要求修改代码,加入定制的功能,再在用户态执行和调试代码,并将性能要求苛刻的部分插入到核心态,从而完成整个驱动程序的编写。在使用这种方法时,WinDriver已经完成了驱动程序编写的大部分工作,减少了工作量,使编写驱动成为相对较简单。但此方法生成的设备驱动程序,其通用性和可移植性较差;(2)完全用WinDriver提供的API函数来写驱动程序。这样要比修改由Wizard生成的框架代码灵活得多,并且编写的程序更简短。但这要求开发者熟悉驱动程序的框架,能熟练运用WinDriver API函数。

  为了缩短开发周期,在实际应用中选用了第1种方法生成驱动程序。具体步骤如下:

  (1) 启动Driver Wizard,检测连接的USB设备,生成inf文件,这个inf文件和WinDriver包含的windrvr6.sys一起,就是新开发USB设备的驱动程序。

  (2) 点击Next按钮,进入资源列表窗口,窗口中显示了管道(Pipe)的一些基本信息。此窗口还可以用于对外设进行读写,测试硬件资源的正确性,窗口中的Log部分即为测试结果。

  (3) 点击Next按钮,进入代码生成窗口,在窗口中选择生成C语言代码。之后Driver Wizard将自动生成针对ISP1581的样本程序和工程文件(包括代码文件、说明文件以及适用于VC++编译器的项目文件)。

  (4)重新安装这个USB设备的驱动程序,利用DriverWizard生成的文件,就可开发应用程序了。

相关文章

资讯排行榜

  • 每日排行
  • 每周排行
  • 每月排行

华强资讯微信号

关注方法:
· 使用微信扫一扫二维码
· 搜索微信号:华强微电子