PCI9052接口芯片的配置及驱动程序开发
时间:06-19
来源:互联网
点击:
(2) 内存的访问
在基于DriverStudio开发的驱动程序中,向存储器空间读写大量数据一般选用Write/Read函数,但对于一个实际存在的物理设备的访问,在某一时刻只能进行一个操作,因而在访问内存对象的时候,一般都要求一个IRP排队的队列,可通过设备类的成员函数QueueIrp将IRP插入队列。DriverWorks提供有KDeviceQueue类,其成员函数StartIo用于处理设备对象的IRP队列。具体的操作是通过KMemoryRange类来实现对设备内存映射空间的访问。其访问流程见图4所示。需要注意的是,当IRP队列为空时,调用QueueIrp时,系统将同步调用StartIo函数。
(3) 中断处理
驱动程序的中断处理编程涉及到内核机制比较多的一种驱动程序,因而相对复杂。首先用中断服务程序提升系统的IRQL,但不能进行大多数有用的内核调用。另外,提升IRQL运行代码需要尽可能快地运行。所以,中断处理一般和在DIS-PATCH_LEVEL级运行的延迟调用(DPC)例程相配合可解决以上两个问题。在DriverWorks中,通常通过KInterrupt类和KDeferredCall类来实现,并通过向导来在中断服务例程和DPC中增加功能代码。KDeferredCall类封装有DPC的操作。KInter-rupt类用于实现硬件中断的处理,其成员函数包括中断初始化,以及将一个中断服务例程连接到另一个中断和解除其连接等。在中断服务例程中把IRP交给DPC例程,可在DPC处理完后结束该IRP。需要注意的是,中断服务例程不是KInter-rupt类的成员函数,它的主要作用是减少中断延迟时间。
3 结束语
本文主要从访问设备硬件资源的角度介绍了PCI配置空间的配置和驱动程序的开发方法。利用该方法可对PCI板卡的配置空间和所需的硬件资源进行正确设置,然后通过DriverStudio的驱动程序向导生成工具在程序框架里添加适当的代码,最后借助于DriverStudio开发包提供的调试工具SoftICE和DriverMonitor以及由Wizard产生的控制台应用程序,来快速开发出基于PCI总线的设备驱动程序。
- 热插拔和缓冲I2C总线 (04-14)
- PCIe总线何时突破Unix服务器坚冰(02-03)
- TMS320VC5402 HPI接口与PCI总线接口设计(04-12)
- 基于Nios II的I2C总线接口的实现(04-09)
- 双口RAM CY7C026在高速数据采集系统中的应用(04-12)
- 计算机在新型多电机同步系统中的应用(07-08)