基于PCI总线的实时测频卡WDM驱动程序设计

发布者:星光小狐狸最新更新时间:2011-05-26 关键字:PCI总线  WDM驱动程序 手机看文章 扫描二维码
随时随地手机看文章
  PCI总线是一种与CPU无关的32/64位地址数据复用总线,工作频率为33 MHz/66 MHz,它支持突发传输,具有即插即用、电源管理等功能。PCI总线以其优良性能和可适应性成为现代微机的主流总线。在开发PCI设备的过程中,需要为PCI设备写驱动程序。Windows驱动程序模型(WDM)是Microsoft公司力推的全新驱动程序模式,它支持PhP、电源管理和WMI等技术。在Windows操作平台上,WDM已成为主流的驱动模型。这里主要介绍根据工程背景开发的基于PCI总线的实时测频卡的WDM驱动程序设计。

  1实时测频卡硬件系统结构

  实时测频卡的主要功能是实时测定信号频率,实时识别信号调制方式。系统的电路框图如图1所示。外部待测信号通过SMA接口进入实时测频卡的ADC。ADC输出的数字信号在FPGA中缓存后进入DSP。在DSP内对信号进行粗估,然后通过EMIF接口把转化为频率和相位控制字的粗估结果发给DDC。DDC做出调整后,通过FPGA把移频和降采样后的信号输入给DSP。 DSP依据粗估结果和DDC的数据进行实时测频。测频完毕后,通过PCI总线向PC机发出中断信号。PC机响应中断,读取DSP内指定位置内存处的测频数据。为简化PCI接口电路设计,选用带有PCI接口电路的DSP芯片TMS320C6416。



  2 TMS320C6416的PCI接口介绍

  实时测频卡通过TMS320C6416的PCI接口和主机进行通信。该接口符合PCI 2.2规范,能提供33 MHz总线时钟,32 b数据宽度,可达到峰值132 MB/s的数据带宽。PCI接口包括配置寄存器、I/O寄存器和存储器映射寄存器。图2给出了部分PCI配置寄存器。配置寄存器的主要功能如下:

  (1)设备的识别、控制和状态指示。将供应商ID域、设备ID域、版本域、配置头类型域、分类代码域这五个域用于识别设备。所有的PCI设备必须设置这些域,配置软件可利用它们来确定系统中可用的PCI总线设备。对于TMS320C6416芯片而言,供应商ID为104CH;设备ID为A106H;其他三个域随不同的应用会有所改变。命令寄存器为发出和响应PCI总线命令提供粗略的控制。状态寄存器用于记录PCI总线有关操作的状态信息。


  (2)中断引脚寄存器的功能。01H~04H值对应于PCI中断请求引脚INTA#~INTD#。

  (3)基地址寄存器的功能。其功能是为PCI设备指定存储空间。PCI存储空间分为独立寻址的Memory空间和I/O空间两类。Memory空间适用于设备功能寄存器较多或数据流量较大的场合,I/O空间适用于设备功能寄存器较少或数据流量较小的场合。PCI接口拥有3个基地址寄存器BAR用于保存指向PCI存储空间的指针。图2为部分PCI配置寄存器。

  ①Base 0基地址寄存器(BAR0)。确定一个4 MB可预取的PC机内存地址空间。将DSP存储空间中不同的4 MB空间都映射到PC机内存相同的4 MB空间中。由DSP页寄存器(DSPP)设置该区域在。DSP存储空间中的映射位置;用BAR0访问DSP内部的RAM和外挂的通过EMIFA和EMIFB访问的存储器空间。访问时每次最多只能读取DSP存储空间的4 MB内容,并且需要定义DSPP寄存器,以指定访问空间的起始地址。访问支持数据突发传输模式。这种映射方式只适用于DSP处于从模式。

  ②Base 1基地址寄存器(BAR1):确定一个8 MB不可预取的访问区间。对DSP芯片而言,其访问地址固定在0180000H~0200000H的范围内。用BARl来访问DSP内部所有的操作命令控制寄存器。

  ③Base 2基地址寄存器(BAR2):定义一个16 B的PC机I/O空间,用于访问PCI的I/O寄存器。BAR2加偏移00H,访问主机状态寄存器HSR;BAR2加偏移04H,访问主机对DSP控制寄存器HDCR;BAR2加偏移08H,访问DSP页寄存器DSPP。

  3 WDM概述

  WDM(Windows Driver Model)是一种遵循即插即用协议的内核模式驱动程序,它是微软的全新驱动程序模式,旨在通过提供一种灵活的方式来简化驱动程序的开发,在实现对新硬件支持的基础上,减少并降低必须开发的驱动程序数量和复杂性。在WDM中,采用图3所示的分层驱动程序体系结构。


  在WDM模型中,每个硬件设备至少有两个驱动程序:总线驱动程序和功能驱动程序。总线驱动程序由操作系统实现,它在最底层直接与设备打交道,负责管理硬件与计算机的连接;负责发现总线上所有的设备,并检测设备何时添加到总线上或何时从总线上删除。设备功能驱动程序在上层通过与低层驱动程序打交道,进行硬件操作,以实现PCI设备的功能。中间还可以有类过滤驱动程序或设备过滤驱动程序用于修改和监视IRP(I/O请求包),实现数据的过滤或转换。一般在特殊的情况下才需要编写。在实际开发中,只需要开发一个设备功能驱动程序即可。

  WDM还引入了功能设备对象(Functional DeviceObject,FDO)与物理设备对象(Physical Device Object,PDO)来描述硬件。一个PDO对应一个真实的硬件,一个硬件只允许有一个PDO,却可以有多个FDO。在驱动程序中直接操作的不是硬件而是相应的PDO与FDO。当应用程序与WDM驱动程序进行通信时,系统为每一个用户请求打包,形成一个I/O请求包(IRP)结构,将其发送到驱动程序,并通过识别IRP中的PDO来区别是发送给哪一个设备。IRP从驱动程序堆栈栈顶进入,每层驱动再把I/O请求划分成更简单的请求,以传给更下层的驱动执行,最底层的驱动程序在收到IRP后,通过硬件抽象层HAL与硬件发生作用,从而完成I/O请求工作。内核通常通过发送IRP来运行驱动程序中的代码。

  4测频卡WDM驱动程序实现

  在微软公司DDK工具的支持下,Compuware Nu-Mega公司提供Driver Studio工具包中的DriverWorks将WDM驱动程序编写所需的对内核及对硬件的访问封装成类库,加上驱动程序代码生成向导DriverlWizard,极大地简化了驱动程序的开发难度。本文选择DriverWorks作为WDM驱动程序的开发工具。

  测频卡驱动程序的主要功能是为用户读取所测信号的频率参数,包括载频、调制方式、码元速率等。同时用户还能通过驱动程序发送命令对测频卡的工作方式进行控制。由此可知,驱动程序要重点处理好硬件访问和中断处理工作。

  4.1I/O访问

  类KIoRange封装了对I/O端口的操作。本卡中PCI配置寄存器中的Base 2基地址寄存器定义了I/O空间。在OnstartDevice例程中取得I/O资源,并初始化,其函数实现如下:



  完成初始化后,可以用成员函数inb,inw,ind从I/O端口读一个(多个)字节、字、双字的数据;outb,outw,outd向I/O端口写一个(多个)字节、字、双字的数据。

  4.2内存访问

  在Windows系统中,内存分为分页内存和非分页内存。在WDM驱动程序中,对于硬件的内存映射一般需要用非分页内存。因为在一些较高级别的例程中,使用分页内存会造成系统产生缺页中断,从而引起死锁。使用非分页内存无需太多的转换,非常安全,效率也高。类KMemoryRange封装了对PCI设备映射内存的操作。类KMemoryRange成员函数的读/写操作同类KIoRange。由PCI配置寄存器中的Base 0和Base 1基地址寄存器分别定义了两个内存空间。在OnstartDevice例程中取得内存资源并初始化,其函数实现如下:

  Status=m_MemoryRange0.Initialize(pResListTranslated,pResListRaw,PciConfig.BaseAddresslndexToOrdinal(0));

  Status=m_MemoryRangel.Initialize(pResListTranslated,pResListRaw,PeiConfig.BaseAddresslndexToOrdinal(1));

  4.3中断处理

  中断处理一般需要声明两种类实例:Klnterrupt和KDeferredCall。Kinterrupt类用于实现硬件中断处理;KDeferredCall类用于实现延时过程调用。首先创建一个Klnterrupt类实例m_Irq,将此实例作为设备类的成员变量,然后创建一个KDeferredCall类实例m_DpcFor_Irq。m_Irq对应的中断服务例程和m_DpcFor_Irq对应的延时过程调用例程也需要在实例中声明。这两个实例m_Irq和m_DpcFor_Irq都是在OnstartDevice例程中初始化的,代码如下:

  status=m_Irq.InifializeAndConnect(pResListTranslated,LinkTo(Isr_Irq),This);

  m_DpcFor_Irq.Setup(LinkTo(DpeFor_Irq),this);

  中断服务例程的处理时间应尽量短,对于一些耗时,但不需要立即处理的任务,中断服务程序会调用一个低于中断服务程序DIRQL级别的延迟过程调用程序DPC,在DISPATCH_LEVEL上完成处理,这个级别上的限制较少,函数调用也相对比较方便。在中断服务例程中,首先判断中断是否是自己设备产生的,若不是,返回FALSE;若是,进行必要的处理,请求一个DPC(延时过程调用),然后返回TRUE。关键代码如下:


  在延时过程调用例程DpcFor_Irq中,读取所测信号的频率参数:


  5驱动程序与应用程序之间的通信

  虽然驱动程序是为设备的硬件层编程服务的,但同样需要提供和应用程序进行通信的能力,从而最终达到应用程序控制设备的目的。应用程序与驱动程序之间的通信通过调用Win32 API来实现,应用程序用Creatfile函数通过已经定义的设备接口来获取驱动程序文件句柄,然后将文件句柄作为其他Win32 API函数的一个参数,对驱动程序的进行数据操作。调用DeviceloControl进行数据量较小的,如控制指令传输或端口、寄存器访问;调用ReadFile,WriteFile等函数进行数据量较大的传输,如内存读/写等。驱动程序与应用程序的通信有DeviceControl异步完成、共享Win32事件通知两种方式。Win32事件通知是由应用程序创建了一个事件后,设置事件的状态为Unsignal,然后直接将该事件句柄传递给驱动程序,等待驱动程序发送事件通知。驱动程序通过类Kevent获取这个事件的一个对象指针后,在IRQL≤DISPATCH_LEVEL级别的例程中设置事件信号状态为Signal来通知应用程序进行后续处理。

  6结语

  基于上述的硬件结构和驱动程序设计方法,成功开发了一款实时测频卡,在实际中得到了很好的应用,板卡工作正常,达到了预期效果。实践证明,DriverWorks是一款功能强大,使用方便的驱动程序开发工具,利用它可以方便快捷地构造PCI设备的驱动程序框架,大大加快了开发周期,提高了开发效率。

关键字:PCI总线  WDM驱动程序 引用地址:基于PCI总线的实时测频卡WDM驱动程序设计

上一篇:瑞萨电子称将加倍USB 3.0主控制器产能
下一篇:USB设备控制器端点缓冲区的优化设计

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

CIF50-PB总线板卡与力控组态软件的应用实例
一、 CIF 板卡简介  基于PC系统的现场总线集成     无论是主站或从站,现场总线在基于PC的自动化领域内获得了一致好评。十多年以来,Hilscher公司的CIF通讯卡,在众多领域里得到了成功的应用,并且成为市场上的一种标准。 各种形式的PC板卡     通过应用CIF通讯卡,用户可以对不同的现场总线,不同的硬件平台,使用统一的标准。我们的PC通讯卡可以使用标准型,紧凑型,或PC/104及PC/104+的ISA或PCI总线,也可以是PCMCIA卡,为主流现场总线服务。   图1 CIF现场总线PC板卡 二、特点 1、基于PC自动化领域的通讯解决方案简化了现场总线工作     作为主站的
[嵌入式]
基于CPCI总线架构的实时图像信号处理平台
  为了提高算法效率,实时处理图像信息,本处理系统是基于DSP+FPGA混用结构设计的。业务板以FPGA为处理核心,实现数字视频信号的实时图像处理,DSP实现了部分的图像处理算法和FPGA的控制逻辑,并响应中断,实现数据通信和存储实时信号。      首先,本系统要求DSP可以满足算法控制结构复杂、运算速度高、寻址灵活、通信能力强大的要求。所以,我们选择指令周期短、数据吞吐率高、通信能力强、指令集功能完备的DSP。同时也考虑了DSP功耗和开发支持环境等要素。      由于从探测仪传来的低层A/D信号,其差值预处理算法的数据量大,对处理速度的要求高,但运算结构简单,选用百万门级FPGA进行硬件实现。采用DSP+FP
[嵌入式]
基于PCI总线的MPEG-1压缩卡软硬件设计及实现
摘要:随着计算机技术、多媒体和数据通信技术的发展,计算机视频的应用越来越广。但视频通常由于数据量巨大,应用受到不少限制。为解决视频数据的存储和传输,唯一途径就是对视频数据进行压缩。结合目前实际需求,给出了一种基于PCI总线的MPEG-I压缩卡的软件、硬件实现方案。 关键词:PCI总线 WDM驱动 MPEG-1压缩卡 随着计算机技术、多媒体和数据通信技术的高速发展,人们生活水平的提高,对计算机视频的需求和应用越来越多,如视频监控、视频会议、计算机视觉等。计算机视频提供给人的信息很多,但是视频的数据量很大,不利于传输和存储,使其应用受到不少限制。为解决视频数据的存储和传输,唯一途径就是对视频数据进行压缩。 目前常见的视频压缩方法
[应用]
基于PCI总线的数据采集卡设计
0 引言 随着计算机软硬件技术和控制、测量技术的不断发展,许多工程技术人员都将PC机作为控制、测量开发的首选平台。而PCI(Peripheral Component Interconnect,即外围部件互连)总线作为一种高性能、通用的局部总线,是目前计算机插卡式外设总线的事实标准。PCI总线具有32/64位总线宽度。地址线和数据线复用,支持猝发传输,传输速率高达132MB/s;系统占用率低,具有较好的兼容性;有完备的即插即用(PnP)管理体制,可同时支持多组外围设备。虽然PCI总线也经历了从PCI、PCI-X到PCI Express的发展,但PCI总线由于存在时间长,开发工具、开发资料众多,在对数据吞吐量要求不是很高的工业控制、
[测试测量]
基于<font color='red'>PCI总线</font>的数据采集卡设计
PCI总线的热插拔技术及实现
    摘要: 具有热插拔PCI槽现已成为许多需要长时间不间断工作和能够在线维修的计算机系统的必备功能。文中介绍了热插拔的基本技术问题,给出了利用Linear Technology公司的热插拔电源控制芯片LTC1421来实现PCI总线热插拔的具体电路以及工作过程。     关键词: PCI总线 热插拔 LTC1421 PCI总线已经广泛使用在高性能个人计算机和单板计算机中,由于具有32/64位的数据宽度和最高达133Mbps的带宽,因而PCI可满足绝大多数I/O设置的要求。但是原始的PCI规范并没有热插拔功能,这样当外设插入或拔出时必须关闭系统电源。 在PCI总线应用到服务器、生命监护系统、工业
[应用]
PCI总线概述
各种PCI总线产品  经过几年的发展,PCI总线以其优越的电性能获得了业界的一致认可。同时利用PCI总线的电性能,结合不同的机械结构,产生了各种各样的总线。在此做一简要介绍: CPCI总线:将PCI总线与欧规卡的机械结构相结合,具有抗振性能好、高可用性等优点,而且可以支持热插拔(Hot Swap)、后走线(Rear IO),目前在电信、军工、交通等领域正在得到广泛的应用。 PXI总线:在CPCI基础上加入同步时钟、触发等量测专用总线,在测量、控制领域正得到越来越多的应用。 PC104 Plus总线:将PCI总线与PC104板的机械结构相结合,具有效率高、维护量少、体积小型等特点,在各种嵌入式应用中很受欢迎。 另外还有笔记本电脑常用的
[嵌入式]
基于PCI总线技术的NO.7信令采集卡研制
由于目前NGN网络是一个以软交换为核心并由PSTN网络和VoIP网络融合在一起的复杂网络,多种 接口 、多种协议、多媒体并存,PSTN与VoIP设备的兼容性、VoIP网络内部不同设备提供商的设备兼容性、网络设计性能与实际部署性能的差异性、语音质量的差异性等挑战都严峻地摆在运营商面前。于是就要求NGN网络运营商能够对其网络性能进行测试和分析,NGN网络测试仪能够解决这样的问题。 本NO.7信令采集卡是基于PCI总线技术设计的,主要完成的功能为物理层的数据采集和HDLC链路 控制 。本卡根据协议的选择主要完成NO.7信令的采集,并把数据送到NGN网络测试仪的上层软件进行分析。 NO.7信令采集卡的总体设计方案及硬件实现 NO.7信
[模拟电子]
基于<font color='red'>PCI总线</font>技术的NO.7信令采集卡研制
基于CPCI总线的通用FPGA信号处理板的设计
  随着雷达信号处理技术的不断发展以及现代国防对雷达技术的需求,系统对雷达信号处理的要求也越来越高,需要实时处理更加庞大的数据。先进的雷达信号处理设备不仅要求性能高、功能多样化,而且要求信号处理设备的研制、装备周期短,能保持与国际先进水平同步发展。因此有必要发展一种可重构、可扩展的通用信号处理系统,能将雷达信号处理模块化、标准化、通用化。这样,一方面可以通过硬件扩展来适应信号处理规模的变化,另一方面可以通过灵活的软件编程来实现各种信号方式和各种复杂算法。FPGA在雷达信号处理中比DSP更具有优势,主要体现在以下几点:(1)专用设计的硬件电路实现数字信号处理算法可以最大限度地利用其并行性,可以达到比采用DSP处理器串行运算高得多的运
[嵌入式]
基于C<font color='red'>PCI总线</font>的通用FPGA信号处理板的设计
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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