基于DSP的PCI总线数据采集系统的研究
总线驱动器的任务之一就是枚举总线上的设备。并为每个设备创建一个PDO。一旦总线驱动器程序检查到新硬件存在,PnP管理器就创建一个PDO,创建完PDO后,PnP管理器参照注册表中的信息查找与这个PDO相关的过滤器和功能驱动程序。系统安装程序负责这些注册表项,而驱动程序包中控制硬件安装的INF文件负责添加其他表项。这些表项定义了过滤器和功能驱动程序在堆栈中的次序。
3.2 驱动程序的初始化
PnP管理器先装入硬件需要的驱动程序,然后再调用驱动程序中的AddDevice函数。一个驱动程序可以被多个类似的硬件使用。但驱动程序的某些全局初始化操作只能在第一次被装入时执行一次。而DriverEntry例程就是用于这个目的。DriverEntry是内核模式驱动程序主入口点常用的名字。I/O管理器按下面方式调用该例程:
DriverEntry的第一个参数是一个指针,指向一个被初始化的驱动程序对象,该对象代表用户的驱动程序。DriverEntry的第二个参数是设备服务键键名,其主要工作是把各种函数指针填入驱动程序对象。这些指针为操作系统指明了驱动程序容器中各种子例程的位置。
PnP管理器先装入最底层的过滤器驱动程序并调用其AddDevice函数。该函数创建一个FiDO,这样就在过滤器驱动程序和FiDO之间建立了水平连接。然后AddDevice把PDO连接到FiDO上。PnP管理器继续下上执行,装入并调用每个底层过滤器、功能驱动程序、高层过滤器,直到完成这个堆栈。该函数的原型如下:
DriverObject参数指向一个驱动程序对象,就是在DriverEntry例程中初始化的那个驱动程序对象。PDO参数指向设备堆栈底部的物理设备对象。AddDevice函数的基本任务是创建一个设备对象并把它连接到以PDO为底的设备堆栈中。
当AddDevice函数将FDO和FiDO创建且连接好后,PnP管理器分配资源且发送PRP_MN_START_DEVICE,功能驱动程序需要在这个IRP上做大量工作,包括分配并配置额外的软件资源以及为设备操作做准备。处理这个IRP主要通过PnPStartDevice函数完成。PnPStartDevice函数首先将IRP传递到底层驱动程序。等待完成后,调用IoGetCurrentIrpStackLocation函数得到当前自己的堆栈单元。I/O堆栈单元的Parameters联合有一个名为StarDevice的子结构,该结构包含了资源分配信息。在StarDevice里就可以将分配的资源填充到PDO的设备扩展域中,并且调用IoConnectInterrupt函数连接中断。
层次结构可以使I/O请求过程更加明了。每个影响到设备的操作都使用I/O请求包。通常IRP先被送到设备堆栈的最上层驱动程序,然后逐渐过滤到下面的驱动程序。内核通常通过发送I/O请求包(IRP)来运行驱动程序中的代码。
4 结束语
基于DSP的PCI总线数据采集系统充分利用了DSP丰富的内部资源、强大的数字信号处理能力及PCI总线的高传输速度,能够方便的开发数据压缩、语音压缩存储等新功能信号,并进行预处理与分析处理。通过PCI总线进行数据传送可大大提高传输速度。本系统适用于高速数据的采集和处理以及需要进行大量数据传输的应用场合。
- F1aSh存储器在TMS320C3X系统中的应用(11-11)
- 基于PIC18F系列单片机的嵌入式系统设计(11-19)
- DSP在卫星测控多波束系统中的应用(01-25)
- 基于PCI总线的双DSP系统及WDM驱动程序设计(01-26)
- 利用Virtex-5 FPGA实现更高性能的方法(03-08)
- DSP与单片机通信的多种方案设计(03-08)