新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于ISP1581的USB数据采集系统的实现

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

作者:时间:2013-09-11来源:网络收藏

  本设计中选用了Philips公司的2.0接口芯片,该芯片属于纯粹的接口芯片。这类接口芯片价格较低,接口方便,灵活性高,针对不同的硬件环境可以配合多种MCU使用,如单片机、DSP、FPGA。支持2种工作模式:通用处理器模式和断开总线模式。本设计中采用DSP来控制,连接方式选用通用处理器模式,原理图如图3所示。


  2 USB接口软件开发

  软件分为USB固件程序开发和USB设备驱动程序开发两大部分。

  2.1 USB固件程序开发

  所有基于微处理器及其外围电路的功能设备的正常工作都离不开固件的参与,固件的作用就是辅助硬件,即控制硬件来完成预期的功能,如没有固件的参与和控制,硬件设备只是芯片简单的堆砌,无法实现预期的功能,如同一台没有安装操作系统的计算机,无法正常工作。因此,用户必须编写固件程序来辅助硬件完成USB通信任务。具体如下:

  (1)初始化。主要是设置一些特殊寄存器的初值,以实现所需的设备属性或功能,例如开中断、使能端点、配置端口等。

  (2)辅助硬件完成设备的重新枚举(ReNumeration)过程。包括模拟设备的断开与重新连接,对收到的设置包进行分析判断,从而对主设备请求做出适当的响应,完成对设备的配置任务。

  (3)对中断的处理。

  (4)数据的接收和发送。

  (5)外围电路的控制。

  固件程序设计成中断驱动模式,采用模块化设计,其总体结构如图4所示。


  各模块的主要功能如下:

  (1)主程序:完成DSP及USB接口芯片的初始化、数据发送/接收标志位的判断及中断请求等待。

  (2)中断服务程序:中断服务程序是整个固件程序设计的重点。首先通过读取ISP1581中断寄存器的值判断所发生中断的类型,然后根据具体的中断类型进入相应的处理子程序或设置相应的标志位。中断服务程序中需要处理的有总线复位中断、高速状态变化中断、SETUP中断及端点的IN/OUT中断。在所有的中断处理程序中,EP0SETUP中断处理是最重要的,它是USB设备与PC机间建立通信链路的基础。

  (3)请求处理程序:USB标准请求处理程序负责处理枚举阶段主机发给设备的标准请求,以及正常工作时主机发送的厂商请求。USB2.0协议中规定了11种USB标准请求,对这11种标准请求作出正确的响应是设备成功枚举的重中之重。当固件接收到第1个SETUP中断后,就进入USB枚举过程,其过程是由主机发出一系列USB标准设备请求并要求及时得到设备响应,如果不需要进行操作,也必须指示一个空响应,使主机能为该设备准备其所请求的资源,建立好两者之间的信息沟通机制。

  (4)数据接收/发送程序:当用户通过主机端应用程序向设备索要数据或向设备发送数据时,DSP调用数据发送/接收子程序完成数据的发送/接收。数据的发送和接收过程如下:

  发送数据:选择端点索引→写发送缓冲区长度寄存器→写发送数据到数据端口寄存器→等待发送完毕标志。

  接收数据:选择端点索引→读接收缓冲区长度寄存器→从数据端口寄存器读取接收到的数据。

  (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函数相同,返回值为接收数据的字节数。



评论


相关推荐

技术专区

关闭