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

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

3天内不再提示

基于WDM驱动程序和总线技术实现D/A数据输出板卡的设计

电子设计 来源:今日电子 作者:张春雨,范多旺 2021-05-31 09:06 次阅读

PCI(Perip heral Component Interconnect )是一种先进的高性能32/64位局部总线,支持线性突发传输,数据最大传输率可达132MB/s。

同时,PCI总线存取延误小,采用总线主控和同步操作,不受处理器限制,具有自动配置功能,非常适合于高速外设。所以,它正迅速取代原先的ISA总线成为微型计算机系统的主流总线。

随着工业控制pci设备的增多,需要开发大量专用WDM驱动程序。鉴于直接用ddk开发驱动程序难度大,周期长,本文介绍了用DriverStudio套件开发WDM驱动程序的方法以及基于9052总线控制器的D/A数据输出板卡的硬件结构。

基于WDM驱动程序和总线技术实现D/A数据输出板卡的设计

图1 D/A数据输出板卡硬件结构

D/A数据输出板卡硬件结构如图1所示。硬件电路由PCI总线控制器9052,数据锁存器LS373,D/A转换芯片,EEPROM组成。板卡上电时,读取EEPROM内容初始化9052配置空间,据此为板卡分配合适的内存空间和I/O空间,对空间进行读写操作。首先,上位机通过WriteFile()调用设备驱动程序,发送两个12位数字量,驱动程序相应函数将两个数字量分别写入两路锁存器,送入D/A转换芯片,最后输出模拟量。

9052空间配置

PCI9052芯片的配置寄存器分为PCI配置寄存器和局部配置寄存器,二者都可以由PCI总线和串行EEPROM访问。在PCI配置寄存器中的设备ID、制造商ID、版本号、首区类代码、类别代码、指令寄存器和状态寄存器等寄存器在所有的PCI设备中都必须实现,具体设置可参考相关资料。PCI配置寄存器提供有6个基地址寄存器(BASE0~BASE5)这些基地址都是系统中的物理地址,其中BASE0和BASE1是用来访问局部配置寄存器的基地址,BASE0是映射到内存的基地址,BASE1是映射到I/O的基地址,可用于通过内存和I/O来访问局部配置寄存器。这两个基地址可固定用于PCI9052芯片的寄存器操作。通过BASE2~BASE5四个空间最多可以访问局部端所接的4个芯片,实现4个局部地址空间(局部空间0~3)的PCI总线访问。

本设计选取LAS0(Local Address Space 0)来访问局部端的锁存器,该寻址空间大小为4Kb,与其有关的寄存器有四个:LAS0范围寄存器、LAS0局部基址寄存器、LAS0局部总线区域描述符和片选0基址寄存器。LAS0范围寄存器规定了地址空间的大小。

由于需要4Kb的地址空间,所以LAS0范围寄存器的值为0XFFFFF000;基地址必须是地址空间的整数倍,末尾为局部空间使能为,所以局部基址寄存器设为0X00000001;LAS0局部总线区域描述符设为0X00000102;片选0基址寄存器设为0X00000081。

驱动程序框架的建立

1 开发环境的选择

驱动程序开发选用NuMega公司的DriverStudio,它包含VtoolsD、SoftICE和DriverWorks等开发工具,DriverWorks用于开发KMD和WDM驱动程序,它适用于Windows 98/Me/NT/2000/XP操作系统。DriverWorks,需要相应DDK的支持,把DDK用类的形式进行封装,使用起来非常方便。

开发环境的建立

首先要安装软件。必须按照下面的顺序安装:

安装Microsoft Visual Studio C++ 6.0。在安装过程中,必须选中“注册环境变量”选项。

安装操作系统对应的DDK(2000系统安装2000DDK,XP系统安装XPDDK)。

安装DriveStudio3.1(若为XP系统,必须安装3.2以上的版本)。

接下来,编译库文件。用VC打开库文件Program Files\Compuware\ DriverStudio\DriverWorks\source\ Vdw Libs.dsw,选择Build|Batch Build(编译|批构件),从中选择需要编译的配置(32位机选“select all i386”)。若编译无错误,就可以进行驱动程序的开发了。

3 生成驱动程序框架

从开始菜单启动Driver Wizards,选择DriverWorks Project,开始创建一个驱动程序框架。

● 填写驱动程序名称,单击next;

● 选择驱动程序类型,这里选择WDM Driver驱动程序,单击next;

● 选择WDM Function Driver,单击next;

● 选择总线类型,这里选择pci总线。填写pci Vendor ID和pci Device ID,一般可以从硬件的使用说明书中看到,没有的话可以用pciview软件得到。后两项pci Subsystem ID和pci Revision ID可以不填。单击next;

● 选择设备类的名称和文件类名称,默认即可,单击next;

● 选择需要的功能函数,本设计需要I/O读写,必须添加I/O通信函数。添加读函数PCI_DA_IOCTL_Read()和写函数PCI_DA_IOCTL_Write(),单击next;

● 选择队列方式,数据量大时选择排队,点击Next;

● 添加资源。资源分为i/o资源和内存资源。添加资源时必须对应硬件相应得基地址寄存器。选择Direct存取方式,单击next;

● 为i/o通信方式添加控制代码,若不需要i/o通信,可不添加,单击next;单击Finish,完成驱动程序框架,并自动启动vc。

4 添加代码完成应用程序和驱动程序的通信

在DriverWorks中,应用程序使用CDeviceInterfaceClass的实例去获得一个或更多的DeviceInterface实例。CDeviceInterface类抽象了一个单一设备接口,它的成员函数DevicePath( )返回一个路径名指针,它被发送到CreateFile去打开设备,即获取设备句柄。

打开设备以后,应用程序通过函数ReadFile(),WriteFile()和DeviceIoControl()函数调用访问设备。其中,DeviceIoControl()函数可以用不同的IOCTL命令实现不同的功能。要完成应用程序和驱动程序的通信,还必须添加硬件板卡访问命令。在驱动程序中,主要用inb(),outb()函数进行硬件访问,具体参数可参照vc的msdn。

在本系统中,主要用DeviceIoControl()来调用驱动程序。相应的通信函数和添加的读写代码如下:

NTSTATUS PCI_DADevice::PCI_DA_IOCTL_Read_Handler(KIrp I)

{

NTSTATUS status= STATUS_SUCCESS;

//得到IOCTL缓冲区指针

PUCHAR pOutBuffer=(PUCHAR) I.IoctlBuffer() ;

//输出缓冲区大小

ULONG ioOutSize=I.IoctlOutputBufferSize();

//读取偏移地址为n-1的数据,放入输出缓冲区,传递给应用程序

pOutBuffer[0]= m_MemoryRange1.inb(ioOutSize-1);

//读取一个字节数据

I.Information()=1;

return status;

}

NTSTATUS PCI_DADevice::PCI_DA_IOCTL_Write_Handler(KIrp I)

{

NTSTATUS status=STATUS_SUCCESS;

//得到IOCTL缓冲区指针

PUCHAR pInBuffer=(PUCHAR) I.IoctlBuffer ();

//输入缓冲区大小

ULONG ioInSize=I.IoctlInputBufferSize();

//将数据写入偏移地址为n-1的存储单元

m_MemoryRange1.outb

(ioInSize-1,pInBuffer[0]);

//写入大小为一个字节

I.Information()=1;

return status;

}

编译驱动程序,生成一个.inf文件和一个.sys文件,这就是需要安装的驱动程序文件。编译无错误,就可以安装调试驱动程序了。

5 安装调试驱动程序

插入自己设计的PCI板卡,重新启动计算机,出现安装新硬件向导。安装已经生成的.inf文件和.sys文件。安装后,查看pci设备的资源,若与自己硬件设置的资源空间相同,则设备驱动安装成功。

用Windows自带的命令提示符,打开驱动程序框架自带的test应用程序,测试通过驱动程序读写数据。若读取的和写入的数据一致,则驱动程序开发成功。

结束语

本文以一种基于PCI总线的D/A数据输出板卡为例,介绍了在Windows 2000/XP下用DriverStudio开发PCI总线WDM驱动程序的基本方法,详细叙述了应用程序和驱动程序之间的通信机制和硬件访问方法;针对板卡的硬件结构和功能用途,介绍了PCI9052总线控制器PCI配置寄存器和局部配置寄存器地址配置的具体方法;给出了利用安装新硬件向导安装驱动程序的方法,实现了上位机和数据输出板卡的通信。

责任编辑:gt

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

    关注

    68

    文章

    18275

    浏览量

    222141
  • 总线
    +关注

    关注

    10

    文章

    2706

    浏览量

    87206
  • 工业控制
    +关注

    关注

    36

    文章

    1274

    浏览量

    85454
收藏 人收藏

    评论

    相关推荐

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

    摘要:介绍了PCI总线控制芯片PCI2040的功能及内部结构,分析了基于PCI总线的双DSP通信的硬件结构及实现方法,并描述了利用Windows2000 DDK开发WDM设备
    发表于 09-24 22:18

    如何利用DriverWorks开发工具开发基于PXI总线数据采集卡的WDM驱动程序

    利用DriverWorks开发工具开发基于PXI总线数据采集卡的WDM驱动程序
    发表于 04-25 07:53

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

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

    IEEE 1394设备的WDM驱动程序设计

    文 中结合IEEE1 394总线规范及具体应用实例,开发了IEEE1394设备的WDM驱动程序,详细介绍了在Windows2 000/xp环境下利用DDK开发IEEE 1394设备驱动程序
    发表于 07-10 15:50 40次下载

    WDM设备驱动程序开发中的若干问题

             为实现仪器系统中全自动化的需要及解决数据采集卡中AD 和DA 的同步问题,采用WDM 设备
    发表于 09-09 08:53 21次下载

    基于PCI总线运动控制卡WDM驱动程序设计

    本文给出了一种使用 DriverStudio 设计WDM 驱动程序的方法,用以实现数控系统应用程序对运动控制卡的访问。文中以基于PCI 总线
    发表于 10-12 18:28 39次下载

    USB设备的WDM驱动程序设计

    本文介绍了WDM驱动模型,并且针对USB总线给出了USB设备的WDM驱动程序的设计方法
    发表于 10-13 15:48 0次下载

    I2C总线驱动程序实现

    I2C总线驱动程序实现 I2C 驱动程序的简介本驱动程序为标准的51 系列CPU 编写,让CPU 模拟成一个I2C
    发表于 09-26 17:25 5539次阅读
    I2C<b class='flag-5'>总线</b><b class='flag-5'>驱动程序</b>的<b class='flag-5'>实现</b>

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

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

    PCI设备的WDM驱动程序开发

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

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

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

    USB总线数据采集设备驱动程序的设计

    结合基于USB总线数据采集设备,介绍了WDM驱动程序的工作原理,设计原则和设计方法,并给出一个实现块传输的USB设备
    发表于 05-15 09:57 1647次阅读
    USB<b class='flag-5'>总线</b><b class='flag-5'>数据</b>采集设备<b class='flag-5'>驱动程序</b>的设计

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

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

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

    WDM(Windows Driver Mode)是微软公司为Windows的驱动程序设计的一种通用的驱动程序模型。相比以前的KDM和VXD来说,他的性能更高、系统之间移植更加方便。所以,随着系统
    的头像 发表于 09-19 15:54 2820次阅读
    基于<b class='flag-5'>WDM</b><b class='flag-5'>驱动程序</b>模型<b class='flag-5'>实现</b>过滤器<b class='flag-5'>驱动程序</b>的开发设计

    老式ISA设备的WDM驱动程序的开发与实现

    ISA设计在WINOWS新的驱动程序模型WDM(WINDOWS DRIVER MODEL)中没有获得很好的支持,使用WDM实现需要一些特殊处理。主要讨论老式ISA设备的
    的头像 发表于 10-04 17:03 2392次阅读
    老式ISA设备的<b class='flag-5'>WDM</b><b class='flag-5'>驱动程序</b>的开发与<b class='flag-5'>实现</b>