当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]PCI总线电机控制卡的WDM设备驱动程序设计

摘要:结合基于PCI总线的精密电机运动控制卡,介绍了PCI设备的WDM设备驱动程序的设计过程,PCI设备的获得,I/O端口的读写,内存的读写以及中断的处理,和设备驱动程序的安装。

关键词:PCI总线;WDM

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所示:?

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

3PCI设备资源的获得及内存、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。??[!--empirenews.page--]

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位工作方式,产生输出到功率放大器件。

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

7结束语

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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

从世界上第一颗DSP诞生至今30年来,国际一线老牌芯片厂商长期占据领先技术和市场地位,国内芯片厂商在DSP上的声量很小。然而经过了6年的沉心打磨之后,湖南进芯电子开始在这一领域崭露头角。凭借着更贴近中国本土特色的差异化产...

关键字: DSP MCU 电机控制 进芯电子

2024年4月10日 –提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 (Mouser Electronics) 即日起开售NXP Semiconductors的MCX工业和物联网微控制器...

关键字: 微控制器 电机控制 机器学习

USB摄像头是一种采用USB接口的视频采集设备,其优点在于即插即用、操作简便,无需额外驱动程序,支持笔记本电脑,并且成本较低,可以支持远程网络观看。

关键字: usb摄像头 驱动程序

变频器是一种应用广泛的电力控制设备,主要用于调整交流电动机的电源频率。通过改变电机的输入频率,变频器可以实现多种功能,提高设备的性能和可靠性,实现节能减排和安全生产。

关键字: 变频器 电机控制

变频器的速度设置是变频器使用中的重要环节,通过合理的设置,可以实现电机的快速启动、

关键字: 变频器 电机控制

变频器是一种应用变频技术与微电子技术的电气设备,主要用于调整交流电动机的电力控制。其核心作用是改变电机工作电源的频率,进而控制交流电动机的运行。

关键字: 变频器 电机控制

电机控制是现代工业和家庭设备中不可或缺的一部分。通过对电机控制原理图的深度讲解和分析,可以更好地理解电机控制的工作原理和设计思路。本文将详细介绍电机控制原理图的基本组成和各个部分的功能,以及常见的电机控制方案。

关键字: 电机控制 电机控制原理图

2023年12月21日,中国– 意法半导体发布了STM32 ZeST*(零速满转矩)软件算法。该算法运行在STM32微控制器上,让无感电机驱动器能够在零转速时产生最大转矩。意法半导目前正在与指定客户分享这个算法。该算法首...

关键字: 电机控制 电机驱动器

交流伺服电机是一种广泛应用于各种自动化控制系统的执行元件。它是一种将电能转变为机械能的高精度、高效率的电机。交流伺服电机主要由一个用以产生磁场的电磁铁绕组或分布的定子绕组和一个旋转电枢或转子组成。当通电线圈在磁场中受力转...

关键字: 交流伺服电机 电机控制

步进电机控制器是一种能够发出均匀脉冲信号的电子产品,它可以控制步进电机的运行。步进电机控制器主要由驱动电路板和控制器组成。驱动电路板的作用是提供电源和输出脉冲信号,而控制器则用于控制步进电机的运行。

关键字: 步进电机控制器 电机控制
关闭
关闭