《基于NI_VISA的PCI卡驱动程序设计.pdf》由会员分享,可在线阅读,更多相关《基于NI_VISA的PCI卡驱动程序设计.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微?处?理?机M I CROPROCESSORS基于 NI-VISA的 PCI卡驱动程序设计*吕?笛,范红旗,卢再奇(国防科学技术大学 ATR实验室,长沙 410073)?摘?要:基于 VIS A(Virtual Instrument SoftwareArchitecture)开发驱动程序,开发过程简单,界面友好,程序可移植性强,是一种开发驱动程序的理想方案。以一种 PCI数据传输卡的驱动程序开发为例,介绍了基于 VISA的驱动程序设计过程。关键词:仪器驱动;驱动程序开发;数据传输卡中图分类号:TP316?文献标识码:B?文章编号:1002-2279(2009)05-0112-04Develo
2、ping a VISA-based D river for a PC ICardLV D,i FAN Hong-q,i LU Zai-qi(ATR Lab of NUDT,Changsha 410073,China)?Abstract:The developing of visa-based driver is introduced in this paper.It is a ideal scheme fordriver developing,because of the easiness and convenience of the developing process and transp
3、lantable ofthe developed driver.Key words:Instru m ent driver;Driver developing;Data transfer card1?引?言信息处理系统通常由信息采集、存储、传输、处理和显示等单元构成,高质量的传输系统对于整个信息处理系统来讲至关重要。在雷达、声纳等应用中,高质量的传输系统主要体现在大带宽情况下,能够实时、准确无误的将信息传递到宿主机中,其中硬件和驱动程序是保证传输系统功能正常发挥的两个重要因素。PCI总线是 PC机广泛采用的外设总线架构,具有 132 MB/S的高带宽,在构建基于 PC的信息处理系统时,常常被选
4、择作为数据传输的通道。传统开发 PCI驱动的步骤是,先用 W indowsDDK(设备驱动程序开发包)或第三方开发工具(如 DriverStudio)开发 PCI驱动程序,然后用 Visual C+编写 DLL(动态连接库),最后再调用 DLL来开发应用程序。这就要求编程人员熟悉操作系统内核才能开发出高质量的驱动,常常需要专业人士。这里介绍一种简单、快速开发 PCI接口应用程序的方法。它能直接在 LabVIEW 环境下通过 N I-VISA开发驱动程序,完全避开了以前开发 PCI驱动程序的复杂性,大大缩短了开发周期。2?基于 VISA的驱动程序2.2?VISA概述VISA是一种用来与各种仪器总
5、线进行通讯的高级应用编程接口(API)。它不受平台、总线和环境的限制。也就是说,与设备进行通讯的程序,无论是在运行 W indows 2000的机器上用 LabVIEW 开发出来的,还是在运行 M ac OS X的机器上用 C语言编写的,都可以使用同一个 API。VISA支持多种接口,NI基于 VISA的虚拟仪器实现称作 NI-VISA。NI-VISA除了支持传统的基于消息的仪器接口外,如 GPIB、RS232/422等,也支持基于寄存器操作的 CompactPCI和 PXI接口,通过NI-VISA可以操作端口寄存器,中断以及直接存储器访问(DMA)。本文传输卡的驱动就是基于 NI-VISA,
6、使用 LABVIE W 编程工具来完成的。2.2?基于 VISA的驱动与一般的设备驱动的比较?驱动程序 通常是指安装于操作系统上,供应用程序调用以操作硬件的一组函数。驱动程序提供面向应用程序的 API接口函数,把应用程序对 API第 5期2009年 10月?No.5O ct.,2009*基金项目:?十一五 国防重点基金项目?作者简介:吕笛(1983-),男,浙江奉化人,硕士研究生,主研方向:雷达信号处理、雷达系统软件设计、高速数字系统设计。?收稿日期:2008-05-08吕?笛等:基于 N I-VISA的 PCI卡驱动程序设计函数的调用翻译成硬件可以理解的底层寄存器操作。驱动程序封装了具体的硬
7、件操作,使复杂的硬件操作对于软件开发者透明化,这样,软件开发者不必了解具体的硬件操作细节就能开发基于硬件的应用程序。大多数操作系统下的设备驱动程序可以分成用户层的?用户驱动 和内核层的?设备驱动,它们之间通过操作系统提供的 API接口函数进行交互。?设备驱动 运行于操作系统的内核层,执行设备的添加与删除、资源申请与释放以及具体的硬件操作,如中断响应、直接存储器访问(DMA)等,通常这些操作不能在用户层进行,而?用户驱动 则进一步对设备的功能抽象化,为应用程序开发者提供尽可能透明的接口 API函数。W I NDOW S操作系统下的W I NDOWS驱动模型(WDM)就是这种结构。通常所讲的驱动开
8、发主要是指运行于内核层的?设备驱动 程序开发。基于 VISA的驱动又称为?仪器驱动 ,这是由于 VISA广泛应用于虚拟仪器开发的缘故。VISA提供了一套标准的 VISA API函数集,封装了驱动设计的底层细节,使得建立在 VISA 基础上的?仪器驱动 完全运行于操作系统的用户层,它通过调用VISA API函数来实现对硬件的操作。图 1描述了基于 VISA的仪器驱动与一般设备驱动的架构。图 1?基于 VISA的仪器驱动与一般设备驱动架构比较?正是由于 VISA封装了驱动设计的细节,使得基于 VISA的驱动与一般设备驱动相比有以下优点:(1)程序开发更容易,由于不需要对内核层编程,无需了解太多的操
9、作系统知识,因此,程序开发过程简单,周期短;(2)与操作系统无关,由于摆脱了操作系统函数的调用,使用 LABVIE W 开发的基于 VISA的驱动与操作系统不相关,只要安装 LABVIEW 运行环境即可;(3)集成性强,VISA 支持多种通信接口,可以很方便地与多类硬件交互工作;(4)开发工具功能强大,界面友好,LABVIEW提供了强大的数据采集、显示与分析功能,使用LABVIEW 开发的基于 VISA 的驱动能很好的配合基于 LABVI EW 的应用程序。需要注意的是,由于基于 VISA 的驱动程序不直接与硬件通讯,所以不宜基于 V ISA来设计核心的驱动程序。2.3?I NF文件创建在编写
10、驱动程序之前,首先利用 NI-VISADrive DevelopmentW izard工具来创建 PCI卡的 I NF文件。使用该向导配置 I NF文件,开发者只需要按照提示填入对应的参数,如设备 I D、厂商 ID等。由于数据传输卡使用了中断,还需要配置中断检测以及确认的流程,这样该向导生成的 INF中便包含了VISA的中断检测及确认的配置信息。当系统启动时,VISA将使用这些配置信息初始化其内核驱动部分的中断检测与确认机制。数据传输卡的中断检测及确认流程如图 2所示。图 2?VISA中断检测与确认流程3?数据传输卡硬件介绍3.1?结构这里的数据传输卡用于脉冲多普勒雷达中频信号采集系统与 P
11、C机之间的数据传输,数据传输卡与 PC机间的接口为 PCI总线,接口芯片为 AMCCS5933。其结构框图如图 3示。!113!?5期微?处?理?机图 3?PCI卡硬件结构3.2?工作机制整个系统的工作机制如下:数据采集系统将数据写入传输卡上的数据缓冲区;#传输卡在复位后处于空闲(idle)状态,若 PCI控制芯片 S5933的PCI-TO-ADDON FIFO非空,表示主机发起读数申请,系统则转入传输准备状态(prepare);进入传输准备状态后,ADDON控制逻辑在清除 PCI-TO-ADDON FIFO后,若数据缓冲区有准备好的完整的一帧数据,则进入数据传输状态(transfer),否则
12、,等待数据缓冲区的数据准备好之后进入数据传输状态;%进入传输状态后,ADDON控制逻辑将缓冲区的数据写入 ADDON-TO-PCI FIFO,一帧数据传输结束之后,自动转入空闲状态。下一部分将根据上面介绍的数据传输卡的工作机制,设计基于 VISA的设备驱动程序。4?传输卡驱动程序设计驱动程序设计采用基于 VISA 的 LABVIEW 开发环境。因为基于 VISA 来编写驱动,开发者只需要关心相应寄存器的操作,而有关设备添加、删除等即插即用功能、IRP的队列处理等功能则无需考虑。AMCC S5933 PCI控制芯片的 PCI端共有 16个 32位的端口寄存器,位于 PCI的 BAR0空间。与传输
13、卡有关的寄存器只有 fifo端口、写地址寄存器、写计数寄存器、中断寄存器和控制状态寄存器。驱动程序设计的关键是如何按照正确的方式操作这些寄存器。本节将讲述驱动程序 API函数设计和核心函数实现。4.1?API函数设计好的驱动程序应该使硬件操作对于应用程序开发者尽可能的透明化,为应用程序开发者提供高层的便于使用的 API函数。根据传输卡的工作机制,驱动程序的 API接口设计如表 1所示。4.2?核心函数实现传输卡驱动 API函数的核心是 resetcard.vi、start?trans.vi和 read.vi。本节介绍这三个函数的实现。表 1?传输卡 API函数表函数(V I)名称?功能open
14、card.vi直接调用 V ISA OPEN打开传输卡,并返回设备句柄resetcard.vi复位传输卡硬件starttrans.vi启动传输read.vi等待中断事件,事件发生后将数据读到输出缓冲区write.vi等待中断事件,事件发生后将数据写入寄存器closecard.vi释放分配资源后,调用 V ISA CLOSE关闭传输卡?resetcard.vi复位传输卡,用以复位 S5933FIFO标志,配置 F I FO管理方案,同时产生 ADDON 复位信号,复位传输卡硬件。图 4是该 VI程序框图。图 4?resetcard.vi程序框图?starttrans.vi用于发起一次 DMA 传
15、输过程,首先,申请 DMA数据缓冲区,初始化 S5933写传输地址寄存器(24h)和写传输计数寄存器(28h),然后使能VISA PXI中断事件,并且将 S5933中断控制寄存器I NTCSR(38h)写传输使能位置 1,使能 S5933写传输完成中断,接着向 S5933 FIFO端口(20h)写入数据申请命令,然后将 S5933控制状态寄存器 MCSR(3ch)对应位置 1来启动 DMA 传输。read.vi用于等待!114!2009年?吕?笛等:基于 N I-VISA的 PCI卡驱动程序设计PXI中断事件,在事件发生后将数据从 VISA存储空间输出到输出缓冲区。图 5是对应的程序框图。图
16、5?starttrans.vi和 read.vi程序框图5?结 论基于 VISA的 PCI数据传输卡驱动程序设计方法是一种快速简便的驱动程序开发途径。在实际应用中,可以使用 LABVI EW 编程环境开发 LABVIEW下的驱动,也可以使用 LAB W INDOWS开发 C语言的驱动,比较灵活。采用 LABVIEW 开发驱动,流程图式的 G语言编程更适合硬件工程师,硬件工程师们可以充分利用他们对于硬件的熟悉快速地开发出板卡的驱动程序。同时,LABVIEW提供了强大的分析、显示、数据采集以及文件 I/O等功能,大大地减轻了应用程序开发人员的负担,可以缩短开发周期。另外,由于 VISA 支持多种接
17、口和平台,使得基于VISA的程序适应性和可移植性强。总之,基于 VISA开发硬件板卡驱动是一种可供选择的理想方案。作者开发的基于 VISA的驱动已经成功应用于一种脉冲多普勒雷达数据采集系统中。参考文献:1?National Instruments.Developing a LabVIEW Real-T i meDriver for a PX I or Co mpact PCI Device EB/OL.M ar.2005.http:/zone.n.i co m/devzone.2?National Instruments.NI-V ISA Programmer ReferenceM anual
18、EB/OL.M ar.2003.http:/digita.l n.i com/ma?nuls.ns.f 3?National Instruments.U sing theV ISA D riverDevelopmentW izard and N I-VISA to Register-Level Program aPXI/PCI Device under W indows EB/OL.M ar.2007.http:/zone.n.i co m/devzone.4?AMCC.PCIProducts DataBook,Section3:5933 EB/OL.M ar.2003.http:/www.a
19、 mcc.co m/mya mcc.5?侯国屏,王坤,叶齐鑫.LabVIEW7.1编程与虚拟仪器设计 M.北京:清华大学出版社.2005.(上接第 111页)图 5?上位机程序流程主程序一旦进入运行状态,为保证随时监控系统状态,数据采集程序随即启动。报警信号、真空泵和压力泵开关状态、电磁阀开关状态和气压信号、各点温度随即处于实时监控状态。直至运行结束,上下腔卸压完成,数据采集程序才停止运行。5?结 束 语经过调试检验,采用这种硬件结构和软件设计的计算机控制系统能够使调压铸造系统的上下压腔压力曲线按照设定的理想工艺曲线运行。整个控制系统表现出了工艺适应性好,可靠性高,人机界面友好,便于操作的优点。目前这种系统已经调试完毕,即将用于工业化生产。参考文献:1?邢小军,刘歌群,闫建国,等.基于 labview的分布式调压铸造计算机控制系统设计 J.制造业自动化,2004(3):42-43.2?周雪琴.计算机控制系统 M.西安:西北工业大学出版社,1998-01.3?董秀琦.低压及压差铸造理论实践 M.北京:兵器工业出版社,1995.4?史新福.32位微型计算机原理接口技术及其应用M.西安:西北工业大学出版社,2000-01.!115!?5期
限制150内