0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在WINDOWS操作系统下基于PCI总线开发WDM驱动程序

电子设计 来源:INTERNET 作者:王磊,朱齐丹,王 2020-03-20 08:05 次阅读

1、引言

微型计算机界以INTEL公司为主推出了PCI总线规范。采用PCI总线设备所具有的配置空间以及PCI总线通过桥接电路与CPU相连的技术使PCI总线具有广泛的适应性,并且PCI总线采用宽字节和高达33Mb的时钟频率的猝发和主控方式传输能满足高速设备的要求。

在WINDOWS操作系统下,开发PCI设备的驱动程序最好的方案是WDM驱动程序。在一个系统中开发出WDM驱动程序,稍加修改即可在其他系统中编译运行。

2WINDOWS驱动程序模型WDM

WDM(WINDOWSDriverProgramModel)是一个模块化的、分层次类型的微型驱动程序结构,它是编写设备驱动程序的主要模型。设备驱动程序是提供连接到计算机的硬件的软件接口,它是操作系统的一部分,用户应用程序以一种规范的方式访问硬件,而不必考虑必须如何控制硬件。在WINDOWS中,驱动程序总是使设备看起来像是一个文件,可以打开设备的一个句柄,然后应用程序可以在设备句柄最后关闭之前向驱动程序发出读写请求。WDM是在WindowsNT驱动程序体系的基础上发展而来的,修改或增加了即插即用、电源管理等功能,使之适应硬件和用户的要求。

PCI总线是一种高性能、与CPU无关的32/64位地址数据复用的总线,它支持突发传输、即插即用、电源管理等功能,不但能满足现在的应用需要,而且能够适应未来的需求。PCI总线支持硬件资源动态自动配置,以支持即插即用。在PCI设备插入PCI插槽或上电后,PCI总线配置机构自动根据PCI设备的要求实现配置。PCI总线支持内存读写、I/O端口读写、中断机制和DMA功能。由于这些硬件特点使PCI设备的WDM驱动程序的设计变得很复杂。在开发WDM驱动程序之前,还有必须掌握PCI设备的需要分配的资源等配置信息以及PCI设备的功能和操作方法。

在WDM中,采用了分层的驱动程序体系结构,总线驱动程序或类驱动程序在最底层直接与设备打交道,设备功能驱动程序在上层通过与低层驱动程序打交道,实现设备的功能,中间还可以有类过滤驱动程序或设备过滤驱动程序用于数据的过滤或转换。在PCI总线的驱动程序层中,其层次图如图1所示:

在WINDOWS操作系统下基于PCI总线开发WDM驱动程序

在PCI设备的WDM驱动程序中,一般是编写功能驱动程序。PCI总线驱动程序由操作系统实现,过滤驱动程序一般在特殊的情况下需要编写。因此本文只讨论PCI设备功能驱动程序的设计。在PCI设备功能驱动程序中,需要处理PCI设备的内存、端口的读写、中断处理和DMA数据传输,实现PCI设备的功能,因此,PCI设备功能驱动程序是很标准的WDM设备驱动程序。

3、PCI设备资源的获得及内存、I/O读写

PCI设备的硬件资源是由PCI配置机构动态分配的,由PCI设备实现PCI配置寄存器,提出需要分配的硬件资源,由PCI配置机构分配资源。驱动程序需要取得这些资源,才能操作硬件。因此,PCI设备的硬件资源分配与管理是驱动程序中很重要的部分。硬件资源主要包括映射内存空间、I/O空间、中断。当系统的PNP管理器在取得设备的资源后会自动向驱动程序发出IRP_MN_START_DEVICE的IRP,在该IRP栈中包含了设备的资源信息。好的驱动程序都应该使用这种方法,每个支持PNP功能的驱动程序,都应实现IRP_MN_START_DEVICE处理。在该IRP处理中应先交给低层驱动程序处理后,再根据IRP栈内内容进行资源分配。

在PCI设备的驱动程序中,获得的设备内存是一段映射物理内存,这是无法使用的,需要将其映射成系统可以访问的非分页内存。函数MmMapIoSpace完成该功能。该函数的原型为:

参数PhysicalAddress为物理地址;NumberOfBytes为地址的数量;CacheEnable为内存是否可以隐藏,取值可为MmNonCached,MmCached,MmWriteCombined,这里必须取为MmNonCached。

在PC上,I/O空间是一个64K字节的寻址空间。I/O端口的寻址方式与内存是不一样的。但是在WDM驱动程序中,对其处理与内存是一样的,把其看作寄存器,映射为设备内存。其映射方法和访问函数的用法与内存资源一样,只不过函数XXXREGISTERXXX改为XXXPORTXXX。

4、中断的处理

在PCI总线中,很多设备共享一个中断,这就需要在中断处理函数要格外小心,处理不当,就会导致系统崩溃。驱动程序首先要在IRPMNSTARTDEVICE中获得中断资源,然后需要连接到中断处理函数中,使其当有中断请求时,进入中断服务例程。连接中断的函数为IoConnectInterrupt,具体用法见上段程序中的“中断资源”部分。十分需要注意的是在连接中断之前,一定要确定PCI设备不会产生中断请求,最好在PCI设备上电后,中断为屏蔽状态。在连接中断后,调用开启中断请求的函数需要同步处理,以防在函数的执行中,出现运行时间上的错误,而且在开启中断时,一定要在所有的硬件资源分配以后,否则如果有中断产生,系统就会立即调用中断处理例程,如果例程中使用了还没有分配的资源,就会出现意想不到的结果。

在中断服务例程中,相应的处理最好简洁快速,因为中断例程运行的级别很高,当有中断请求时,不但会打断应用程序的执行,而且会打断在硬件中断级以下的所有运行程序。在WDM中,提供了DPC(DeferredProcedureCall)例程,将在中断例程中耗时的但不需要立即处理的任务延时处理。比如,驱动程序接受应用程序的写PCI设备的数据,当写完后,硬件产生中断标志执行完毕,这时需要结束该IRP,就可以将结束IRP这个耗时的任务交给DPC完成。

在该实例中,由应用程序调用函数WriteFile,将数据传递给驱动程序,驱动程序的DispatchWrite例程负责处理该IRP,在该例程中,由于需要中断的配合,假定无法立即执行完毕,必须将IRP串行化,StartIo例程如果没有其他任务,就开始处理该IRP,处理完毕后立即返回,但不能结束IRP,当PCI设备完成操作后,就会产生中断,在中断服务例程中把IRP交给DPC,在DPC中处理完后结束该IRP。

5、驱动程序的安装与应用

Windows98和Windows2000是依靠INF文件来得到硬件设备驱动程序的安装信息的一个设备信息文件(INF)。只要将文件中双引号中的提示改为相应的内容即可生成我们自己的设备信息文件。

[Strings]

ProviderName=“yourcompanynamehere”//公司名称

MfgName=“NameofHWmanufacturerhere”//硬件制造商名称

DeviceDesc=“Descriptionofdevicehere”//设备描述

DeviceClassName=“Descriptionofdeviceclasshere”//设备类的描述

当系统加电时,WINDOWS操作系统会自动检测所有外设,当第一次检测到我们的设备时系统会提示用户指定新硬件的驱动程序。根据提示指定了我们修改过的INF文件,以及编译后生成的.sys系统文件系统就自动安装好了新硬件的驱动程序。或者可以用控制面板中的添加新硬件来搜索新硬件。

驱动程序安装好以后,在应用程序中就可以像打开其他驱动程序(如虚拟设备驱动程序VxD)一样用CreateFile打开设备。

6、基于PCI总线的电机运动控制卡

图2为该系统硬件组成框图,该控制卡采用PCI总线实现主计算机与控制卡之间的信息传递。控制卡上有2个伺服控制专用芯片LM628,分别用于控制伺服电机;来自2个伺服电机的增量式码盘输入信号(A相、B相和Z脉冲),经电平变换后分别送入LM628经四倍频和计数后作为反馈信号,由LM628根据主计算机给定的位置、速度、加速度生成梯形轨迹速度曲线作为给定值,实现伺服电机的反馈控制。主计算机对该控制器发送命令,伺服控制器即按给定的运动形式输出相应的数字信号,本卡中LM628工作于8位工作方式,产生输出到功率放大器件。

在WINDOWS操作系统下基于PCI总线开发WDM驱动程序

应用PCI总线目标接口芯片PCI9052完成控制卡的接口部分,专用运动控制处理芯片LM628完成对电机的控制,再加上相应的电路,即实现了基于PCI总线的精密电机运动控制卡的硬件设计。

7、结束语

WDM用一个相对独立的模块来处理设备数据的传输,驱动程序在这个模块中启动或停止设备,并实现中断或其他方式的输入输出操作。WDM使驱动程序的结构非常清晰、完整,也使中断I/O方式的设备驱动程序的设计和实现更加方便、快捷。应用WDM编制的设备驱动程序在本电机控制卡得到很好的应用。

责任编辑:gt


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    6705

    浏览量

    123157
  • PCI
    PCI
    +关注

    关注

    4

    文章

    662

    浏览量

    130158
  • 总线
    +关注

    关注

    10

    文章

    2863

    浏览量

    87934
收藏 人收藏

    评论

    相关推荐

    PCI设备的WINDOWS驱动程序开发

    PCI设备WINDOWS驱动程序开发摘要:本文主要介绍了Windows9x
    发表于 05-03 12:10

    分享:基于PCI总线的双DSP系统WDM驱动程序设计

    如图3所示。 2 基于WDMPCI驱动程序设计 WDM是新一代的驱动程序构架,它是一个跨平台的驱动程
    发表于 09-24 22:18

    WDM设备驱动程序开发,Windows 2000/XP WD

    Windows 2000/XP WDM设备驱动程序开发主要介绍DriverStudio开发工具开发
    发表于 09-13 22:58 0次下载
    <b class='flag-5'>WDM</b>设备<b class='flag-5'>驱动程序</b><b class='flag-5'>开发</b>,<b class='flag-5'>Windows</b> 2000/XP WD

    WINDOWSPCI接口卡WDM驱动程序的DMA编程技术

    本文主要讨论了Windows环境开发PCI接口卡DMA应用的WDM编程技术,并给出了一个应用
    发表于 08-07 08:37 28次下载

    Windows环境开发PCI接口卡DMA应用的WDM编程技

    本文主要讨论了Windows环境开发PCI接口卡DMA应用的WDM编程技术,并给出了一个应用
    发表于 10-06 10:14 24次下载

    VxWorksPCI总线设备驱动程序设计

    随着VxWorks操作系统嵌入式系统中的应用,VxWorks产品的开发和应用也越来越广泛.本文描述了VxWorks
    发表于 11-28 16:36 17次下载

    PCI设备WINDOWS驱动程序开发

    PCI设备WINDOWS驱动程序开发 本文主要介绍了Windows9x
    发表于 05-03 11:54 3308次阅读

    PCI传输卡的WDM驱动程序设计

    PCI传输卡的WDM驱动程序设计 PCI总线规范是为提高微机总线的数据传输速度而制定的一种局部
    发表于 10-27 11:04 1000次阅读

    PCI设备的WDM驱动程序开发

    本文简要介绍了WDM驱动程序的结构体系,之后结合PCI设备的结构特点,通过实例说明如何利用驱动程序开发工具DriverWorks
    发表于 05-19 18:11 0次下载

    Windows WDM设备驱动程序开发指南

    书主要介绍Windows 98和Windows 2000新的驱动程序模型(WDM)。描述了WDM设备驱动
    发表于 12-12 15:31 0次下载
    <b class='flag-5'>Windows</b> <b class='flag-5'>WDM</b>设备<b class='flag-5'>驱动程序</b><b class='flag-5'>开发</b>指南

    Windows 2000WDM驱动程序的研究与开发

    本文分析研究了 Windows 2000 WDM 驱动程序的基本原理。以 Microsoft 的 DDK 为开发工具,
    发表于 04-18 10:02 0次下载

    基于操作系统PCI程序开发

    Vxworks是WindRiver公司开发的嵌入式实时操作系统,广泛地应用于航空航天、工业控制、通信等领域;分析了VxWorksPCI设备驱动程序
    发表于 09-22 16:31 9次下载
    基于<b class='flag-5'>操作系统</b>的<b class='flag-5'>PCI</b><b class='flag-5'>程序</b><b class='flag-5'>开发</b>

    基于WDM驱动程序模型实现过滤器驱动程序开发设计

    的升级,WDM已经成为Windows 2000系统驱动程序开发的主流。作为
    的头像 发表于 09-19 15:54 3118次阅读
    基于<b class='flag-5'>WDM</b><b class='flag-5'>驱动程序</b>模型实现过滤器<b class='flag-5'>驱动程序</b>的<b class='flag-5'>开发</b>设计

    VxWorks操作系统CompactPCI总线驱动程序的设计

    VxWorks操作系统CompactPCI总线驱动程序的设计(电源技术应用 期刊)-该文档为VxWorks操作系统
    发表于 08-31 16:09 17次下载
    VxWorks<b class='flag-5'>操作系统</b><b class='flag-5'>下</b>CompactPCI<b class='flag-5'>总线</b><b class='flag-5'>驱动程序</b>的设计

    VxWorks操作系统CompactPCI总线驱动程序设计

    VxWorks操作系统CompactPCI总线驱动程序设计(高频开关电源技术指标)-该文档为VxWorks操作系统
    发表于 09-27 17:24 8次下载
    VxWorks<b class='flag-5'>操作系统</b><b class='flag-5'>下</b>CompactPCI<b class='flag-5'>总线</b><b class='flag-5'>驱动程序</b>设计