基于USB2.0接口的语音采集系统设计
中断处理子程序首先判断中断的产生源,然后进行相应的处理、设置。中断信号USBINT使用C6713的外部中断EXT_INT5,给出的外部信号指示DSP有中断产生或USB寄存器读请求。具体流程如图7所示。
USB设备驱动程序主要是通过调用微软的USBD.SYS来实现PC机与USB总线的数据交换,其主要功能是为相应的USB设备建立设备驱动对象,并完成对USB设备的初始化、对USB设备的即插即用功能和电源的管理,实现对USBD.sys的调用以及对USB设备的控制与数据的交换。我们使用了第三方的开发工具--Numega公司的Driverstudio进行开发,DriverStudio能加速开发、调试、测试、调整和配置WDM驱动程序。DriverWorks框架结构为USB设备驱动程序的开发提供了3个类:KUsbLowerDevice、KusbInerface和KusbPipe,用于实现USB设备的操作。KUsbLowerDevice类是KPnPLowerDevice类的派生类,它继承了KPnPLowerDevice类的成员函数,主要用于逻辑设备(底层USB设备)的编程。KUsbLowerDevice类实例代表端点0,允许USB驱动程序通过默认控制管道控制USB设备,如配置USB设备、传输各种控制状态和请求,KUsbInerface类用于接口的编程,它的作用更多的是结构上的而非功能上的,其成员函数几乎不与实际物理设备交互作用,设备驱动程序使用这个类可以获得接口和管道的信息。KUsbPipe类用于管道的编码,管道是主机和端点的一个信息连接,只有深刻理解这3个类,才能进行USB设备驱动程序的编写,本设计中要为Windows XP开发一个设备驱动程序,DriverWork提供独特的DriverWizard可以自动生成代码,精心制作的类库减少了对简单接口的复杂操作。
应用程序的主要功能是实现对数据采集系统的控制采集和数据处理,并在计算机中显示处理结果,在Win32系统中,把每一个设备都抽象为文件,通过调用Win32 API函数应用程序,向设备驱动程序发出特定的IRP请求,就可以实现应用程序与WDM驱动程序通信,设备驱动程序得到请求后,向更底层驱动程序传递IRP请求,最后到达硬件设备,完成对硬件设备的控制与访问操作,这个通信过程大致可这样描述:应用CreateFile()函数打开设备并创建到设备的连接;然后用DeviceIoControl()函数或者ReadFile()函数、WriteFile()函数与WDM驱动程序进行通信,包括从驱动程序中读取数据和写入数据两种情况。应用程序退出时,用CloseHandle()函数关闭设备。
语音采集板卡用USB2.0接口来实施数据传送,实现厂商定义请求的处理功能,以及语音采集、传送到主机以*.dat格式文件保存、主机读取*.dat格式传送到语音采集板卡、语音回放功能。实践证明,回放的语音信号清晰,失真度低,效果良好。
结语
本文讲DSP的高速数据处理能力与USB2.0接口的高速数据传输能力有机结合,采用TMS320C6713和USB2.0接口设计实现了一个语音信号采集系统。实验表明:USB接口工作正常,语音采集卡运行稳定,实时性高,具有较高的精度,固件程序、USB设备驱动程序和应用程序都能正常地运行,且具有使用方便、性价比高的优点,通过主机界面可方便地控制语音信号的采集和播放,并可将采集到的语音数据通过USB接口高速传输到计算机进行存储和回放,达到了语音采集系统的设计目标。
作者:施荣荣 张翠芳