PCI总线数据输出板驱动程序的开发

发布者:chunxing最新更新时间:2011-10-11 关键字:PCI总线  数据输出板 手机看文章 扫描二维码
随时随地手机看文章
       PCI(Perip heral Component Interconnect )是一种先进的高性能32/64位局部总线,支持线性突发传输,数据最大传输率可达132MB/s。

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

        随着工业控制pci设备的增多,需要开发大量专用WDM驱动程序。鉴于直接用ddk开发驱动程序难度大,周期长,本文介绍了用DriverStudio套件开发WDM驱动程序的方法以及基于9052总线控制器的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 FilesCompuware DriverStudioDriverWorkssource 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配置寄存器和局部配置寄存器地址配置的具体方法;给出了利用安装新硬件向导安装驱动程序的方法,实现了上位机和数据输出板卡的通信。

关键字:PCI总线  数据输出板 引用地址:PCI总线数据输出板驱动程序的开发

上一篇:触控面板市场竞争火爆 恐面临降价危机
下一篇:基于ARM嵌入式系统的PC/104总线设计

推荐阅读最新更新时间:2024-05-02 21:38

基于PCI总线CAN卡设计与实现
现场总线CAN(Controller Area Network控制器局域网络)以其高性能、高可靠性及独特的设计,越来越受到人们的重视和青睐,不但在汽车行业中应用广泛,而且在工业控制、机器人、医疗器械、传感器等领域发展迅速。为了扩展CAN总线的功能,与计算机相连,可设计具有CAN接口和PC接口的CAN适配卡,用来收集CAN总线上各个节点的信息,转发给PC机,并可将PC机的命令和数据转发给各个节点以及完成对CAN总线上的用户系统的部分监控和管理工作。 PCI总线是Intel公司推出的一种先进的高性能32/64位局部总线,可同时支持多组外围设备,不受制于处理器,数据吞吐量大 (33MHz总线频率、32位传输时峰值可高达132MB/s)。
[嵌入式]
工控机Compact PCI总线
  Compact PCI总线     Compact PCI总线简称CPCI,中文又称紧凑型PCI,是国际PICMG协会于1994年提出来的一种总线接口标准。它的出现解决了多年来电信系统工程师与设各制造商面临的棘手问题,将VME密集坚固的封装和大型设备的极佳冷却效果以及PC廉价、易采用最新处理能力的芯片结合在一起,保证了99.999%的高可靠度,极大降低了硬件和软件开发成本。目前PCI总线已成为了事实上计算机的标准总线。     早在1995年,香港塞德公司将具有优质、高效、低耗等优势的最新总线类产品Compact PCI推向中国市场,同时也把美国PICMG协会的发展情况介绍到中国。我国工控界权威人士即达成共识:要跟踪高科技,保持
[嵌入式]
基于PCI总线的CAN卡的设计与实现
摘要:介绍了PCI桥接口芯片PCI9052和CAN接口芯片SJA1000,给出了基于PCI总线的CAN总线适配卡软硬件的设计思路、过程及实现方法。 关键词:PCI总线 PCI9052 CAN总线 SJA1000 现场总线CAN(Controller Area Network控制器局域网络)以其高性能、高可靠性及独特的设计,越来越受到人们的重视和青睐,不但在汽车行业中应用广泛,而且在工业控制、机器人、医疗器械、传感器等领域发展迅速。为了扩展CAN总线的功能,与计算机相连,可设计具有CAN接口和PC接口的CAN适配卡,用来收集CAN总线上各个节点的信息,转发给PC机,并可将PC机的命令和数据转发给各个节点以及完成对CAN总线上的
[应用]
嵌入式系统中PCI总线仲裁器的设计与实现
PCI(Peripheral Component Interconnect)总线是现今最为流行的工业控制总线之一。它广泛地应用在计算机中,并且由于众多厂商对PCI的良好支持,使得目标嵌入式设备中的很多解决方案都包含了PCI总线。在多主设备的PCI系统应用中,必须对各个主设备提供仲裁授权信号。很多厂家有针对性地发布了PCI仲裁逻辑的专用芯片或者集成了PCI重载逻辑的专用芯片,但使用不够灵活,为了使PCI设备能够更方便地应用在嵌入式系统中,本文介绍了一种基于CPLD(复杂可编程逻辑器件)的PCI总线仲裁器的设计方法,此方法可以为系统量身定制适合于系统本身的PCI总线仲裁器。而不必局限于特定的芯片要求,在体积、功能、成本等诸多方面都有很
[嵌入式]
种基于PCD656的高速PCI总线接口的设计与实现
     现代雷达信号处理具有数据量大、实时性高等特点,而总线传输的效率决定了系统的性能,目前普遍使用标准化的PCI总线技术,以便升级更新。为加快产品开发和降低设计难度,一般有两种解决方法:采用通用的PCI芯片或IP核。目前常用的PCI芯片如PCD054、PCD052等虽然性能稳定、使用方便,但它们只适用33 MHz、32位总线接口,受时序设计和应用程序效率等影响,总线传输速度约稳定在70 MB·s-1;使用IP核虽可以兼容66 Hz、64位总线且节省板卡面积,但其价格昂贵不利于高校及中小企业推广使用。而PCI9656适用于66 MHz、64位的PCI总线,因此逐渐成为总线开发的主流元器件,使得总线传输速度达到了150 MB·s-
[嵌入式]
TMS320VC5402 HPI接口与PCI总线接口设计
  数字信号处理器DSP(Digital Signal Processor)是一种特别适合于进行数字信号处理的微处理器,凭借其运算速度快、功能强等特点,在各个领域的应用越来越广泛。但在很多场合下需要将DSP的各种外围设备同计算机连接,以实现数据传输。通常情况下可利用DSP的串口或I/O口来实现,但无论是接串口还是接I/O口都要占用DSP的硬件资源,同时数据的传输速度有时也不能满足系统的要求。为了解决这一问题,将DSP的HPI口通过PCl2040芯片桥接到PCI总线。本文以TMS320VC5402(简称VC5402)为例,介绍DSP的HPI口及其与PCl2040的接口设计。   1 HPI接口功能及特点   主机接口HPI(Hos
[嵌入式]
基于PCI总线的雷达视频高速数据采集接口设计
引 言 PCI总线(Peripheral Component Interconnect)是Intel公司推出的一种高性能32/64位局部总线,最大数据传输速率为132~264MB/s,是目前使用较为广泛的一种总线。在高速信号的实时处理中,利用PCI总线将采集数据直接传送到微机系统内存,可有效解决数据的实时传输和存储,为信号的实时处理提供方便。利用PCI总线进行高速数据采集,可以简化电路设计,而且这种高速数据采集接口模块可以在多次设计中重复使用,缩短产品的研发周期。在此通过对专用接口芯片PCI9054的性能分析,特别是对单周期读、写和存储器映射传输操作的时序进行了分析,提出了一种新的包括PCI9054单周期读、写和存储器映射传输
[工业控制]
基于<font color='red'>PCI总线</font>的雷达视频高速<font color='red'>数据</font>采集接口设计
基于PCI总线的无线电高度表测试系统
   0引言   为了适应高科技条件下的现代战争,不仅要不断地提高战斗机的性能,而且对相应检测设备也提出了更高要求。先进测试技术的应用是战斗机维护修理的发展方向,是减少维修时间、提高装备完好率的重要手段。本文所设计的检测设备的技术高低对高度表的日常维护、检测起了决定性的作用。   本文对高度表的组成和工作原理进行分析,确定被测试项目。重点对被测参数进行分析,采用并行的开发模式。选择适合的工控机,设计相应的调理电路。软件用LabWindows/CVI语言,完成编辑、编译、连接、调试、仿真等开发。    1 高度表概述   本文所研究的无线电高度表(以下简称高度表)作为某型导弹纵向弹道控制的关键部件,其性能的好坏将直接
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved