PCI9052接口芯片的配置及驱动程序开发(5)
用DriverStudio开发驱动程序时,可根据配置声明KIoRange类、KMemoryRange类和KInterrupt类来实现对内存空间、I/O空间、中断的操作。在本例中,基地址寄存器0和1固定用于PCI9052芯片的操作寄存器内存映射地址和I/O映射地址,基地址寄存器2则用于双口RAM的内存映射。通过一个外部引脚即可产生中断。标识两个KMem-oryRange类实例、一个KIoRange类实例和一个KInterrupt类实例的具体实现细节如下:
(1) I/O端口的访问
应用程序通过API函数DeviceIoControl的调用,并调用驱动程序的分发例程DeviceControl,同时通过KIoRange类来实现对I/O映射空间的访问。需要注意的是,当DeviceloControl异步调用的时候,必须在驱动程序中添加取消例程,并在DeviceControl例程中阻止一个应用程序对其的多次调用。KIoRange类的成员函数outb、inb、outw、inw、ind、outd可分别用于从端口读或写一个字节、字和双字数据。在WDM中,对于I/O端口,系统可将其看成寄存器,一般用于数字传输量比较小的地方。在对PCI设备的访问中,I/O端口的访问通常比较频繁。
(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总线的设备驱动程序。
(责任编辑:admin)- “扫一扫”关注融合网微信号
免责声明:我方仅为合法的第三方企业注册用户所发布的内容提供存储空间,融合网不对其发布的内容提供任何形式的保证:不保证内容满足您的要求,不保证融合网的服务不会中断。因网络状况、通讯线路、第三方网站或管理部门的要求等任何原因而导致您不能正常使用融合网,融合网不承担任何法律责任。
第三方企业注册用户在融合网发布的内容(包含但不限于融合网目前各产品功能里的内容)仅表明其第三方企业注册用户的立场和观点,并不代表融合网的立场或观点。相关各方及作者发布此信息的目的在于传播、分享更多信息,并不代表本网站的观点和立场,更与本站立场无关。相关各方及作者在我方平台上发表、发布的所有资料、言论等仅代表其作者个人观点,与本网站立场无关,不对您构成任何投资、交易等方面的建议。用户应基于自己的独立判断,自行决定并承担相应风险。
根据相关协议内容,第三方企业注册用户已知悉自身作为内容的发布者,需自行对所发表内容(如,字体、图片、文章内容等)负责,因所发表内容(如,字体、图片、文章内容等)等所引发的一切纠纷均由该内容的发布者(即,第三方企业注册用户)承担全部法律及连带责任。融合网不承担任何法律及连带责任。
第三方企业注册用户在融合网相关栏目上所发布的涉嫌侵犯他人知识产权或其他合法权益的内容(如,字体、图片、文章内容等),经相关版权方、权利方等提供初步证据,融合网有权先行予以删除,并保留移交司法机关查处的权利。参照相应司法机关的查处结果,融合网对于第三方企业用户所发布内容的处置具有最终决定权。
个人或单位如认为第三方企业注册用户在融合网上发布的内容(如,字体、图片、文章内容等)存在侵犯自身合法权益的,应准备好具有法律效应的证明材料,及时与融合网取得联系,以便融合网及时协调第三方企业注册用户并迅速做出相应处理工作。
融合网联系方式:(一)、电话:(010)57722280;(二)、电子邮箱:2029555353@qq.com dwrh@dwrh.net
对免责声明的解释、修改及更新权均属于融合网所有。