推广 热搜: 电机  PLC  变频器  服务机器人  培训  变送器  危化品安全,爆炸  西门子PLC  触摸屏  阀门 

基于WinDriver的ARINC429总线接口板卡驱动程序设计

   日期:2013-03-23     来源:工控之家网    作者:工控之家    浏览:64    评论:0    
摘  要:WinDriver是一套功能强大的驱动程序开发包,使用WinDriver开发Windows下的驱动程序不需要熟悉DDK编程及驱动模式,可以简化开发设备驱动程序的过程,缩短开发周期。本文在介绍一种ARINC429 总线接口板卡体系结构的基础上阐述了利用WinDriver开发设备驱动的步骤和方法。

关键字:WinDriver; ARINC429; 设备驱动程序

Design of device driver for ARINC-429 bus interface card using WinDriver kit
Yi Xiaoqing,Wang Qian,Luan Chunxu

Abstracts: Design of device driver for ARINC-429 bus interface card using WinDriver kit WinDriver device driver toolkit has powerful function. Using WinDriver to develop the driver under Windows not to need to be familiar with the DDK programming and the actuation pattern . It can also predigest the process of developing of device driver and reduce the development cycle. This paper introduces the steps and methods of developing device drive with WinDriver on the basis of the architecture of ARINC-429 bus interface card.

Keywords: WinDriver; ARINC429; Device driver programming

0 引言

  在现代军、民用飞机上,系统间需要传输大量信息。随着数字技术的发展和微型电子计算机的出现,越来越多的航空电子设备已采用了数字化技术。美国航空无线电公司(ARINC)制定的ANINC429 数字信息传输规范成为在航空电子设备之间传输数字信息的航空运输工业标准。该标准克服了模拟传输所导致的成本高、传输线多、可靠性差的缺点,提高了信息传输精度。针对实现ARINC429数据传输的总线接口板研究已经有很多,但在设计完硬件电路后,直接面临的一个大问题便是开发其驱动程序。如何在涉及较少系统内核知识的前提下快速开发出高质量、高可靠性的驱动程序是是迫切要解决的问题。美国Jungo公司的WinDriver开发包因其简洁高效、不涉及操作系统底层编程且有很好的兼容性成为编写驱动程序的一种好工具,本文将给出基于WinDriver用户模式的ARINC429总线接口板卡驱动程序的设计方法。

1 ANINC429总线接口卡结构设计

  1.1 ARINC429规范概述

  ARINC429总线是美国航空无线电公司(ARINC)制定的民用航空数字总线传输标准,规定了使用该总线的航空电子设备的信息量流向ARINC429基本数据字的格式。ARINC429是一种单向广播式数据总线,传输介质由双绞屏蔽电缆组成。ARINC429 数字信息传输规范阐述了通过一对屏蔽双绞线(数字数据总线)从一个端口向其它系统和设备以串行方式传输数字数据信息的方法。信息传送的速率是:高速传输的位速率为100Kb/s±1%,低速传输的位速率为12. 0~14.5Kb/s±1%。ARINC429规定数据传输采用双极性归零码(如图1所示),即调制信号由“高”、“零”和“低”状态组成。双极性归零码的基本信号波形中携带了位同步信息,位同步是由零状态变至“高”或“低”状态的这一状态变化来识别。字同步是以传输周期间至少四位的时间间隔为基准,紧跟该字间隔后要发送的第一位起点即为新字的起点。图2所示为一个ARINC429数据字格式。


图1 ARINC429数字信息传输格式


图2 ARINC429数字字格式

  1.2ARINC429通信模块原理

  本ARINC429数据总线通信模块的主要功能有:完成两路ARINC429接收数据的串并转换和并串转换;支持中断方式、查询方式接收发送数据从ARINC429数据总线的通信协议出发,机载设备之间通信或与检测设备通信首先应通过一个发送器发送数据,把这些数据转换为符合ARINC429数据总线规范的数据在数据总线上传输,到了目标设备时又通过它的接收器把这些数据转化为设备能识别的数据格式。

  1.3 一种ARINC429总线接口卡结构设计

  本文介绍的插卡采用CPLD技术,可实现两路PXI总线与ARINC429总线的通讯,且基于可编程芯片的特点,还可扩展为多路接收与发送,电路简单、器件少、可靠性高。硬件电路总体分为了四个部分:(1) CPCI/PXI接口芯片;(2) CPLD芯片;(3) FIFO芯片;(4)电平转换电路。其基本框图如图3所示,该模块可完成两路ARINC429数据发送、接收,支持12.5K,25K,50K,100K四种传输速率,支持中断方式、查询方式接收、发送数据。

2 基于WinDriver的ARINC429总线接口卡驱动程序设计

  2.1WinDriver开发工具概述

  WinDriver是美国Jungo公司出品的、用于编写硬件驱动程序的一种工具软件,主要针对ISA插卡、PCI插卡和USB这些硬件的设备驱动程序进行开发。通过运行DriverWizard能为插卡产生基本的驱动程序框架,具备设备检测、配置寄存器读写、自定义寄存器读写、I/O和Memory空间访问等功能。使用自己熟悉的编译器和编程语言添加代码,便能得到满意的设备驱动。因为Windriver把所有繁杂的底层操作都封装在一个内核模块中,而提供给用户标准的Windriver API 函数来实现硬件访问。如此将驱动开发的繁杂工作变成了仅仅是调用硬件操作的标准API函数,大大简化了驱动开发者的工作,加快了开发周期。

  2.2基于WinDriver的ARINC429驱动程序设计

  WinDriver编程有两种模式,一种是用户模式,这种模式利用软件自身提供的驱动程序Windrvr.vxd和Windrvr.sys,用户所面对的是驱动程序给出的用高级语言封装好的相应功能接口,不需要对操作系统内核了解太多。另一种模式是核心插入用KernelPlugIn方式进行编程,是真正意义上的驱动程序,该模式适宜于用户对速度有特殊要求的情况。在本文中采用用户模式。

  以本文设计的ARINC429卡为例,利用WinDriver8.01版开发驱动样本包括以下步骤:

  1)安装、配置插卡到PC机;

  2)运行Driver Wizard,在设备列表中选择显示插卡名的一项,运行“Generate.INF file”选项为该设备命名为A429,则会产生A429.INF文件;

  3)继续运行Driver Wizard,选择VC编译环境产生驱动样本;

  4)用产生的.INF文件,按常规步骤安装硬件驱动,由Windriver提供的内核文件接管设备;

  5)在开发环境中,移植驱动样本中的API函数代码,编写具体的功能代码,建立用户模式的驱动程序;

  6)打包发布驱动程序。

  WinDriver的驱动样本产生两个重要文件:A429_lib.c和A429_diag.c。前者是设备的应用程序级API函数文件,用户可以直接调用这些标准API函数实现对硬件的操作和访问,属于用户模式的驱动程序。后者是利用上述API函数访问硬件的样本程序文件(控制台程序),通过对该文件的分析可以学到如何调用API函数编写简单的驱动程序。结合两个文件分析后得出如下几个函数非常重要:

  1) DeviceFindAndOpen () ,获得驱动程序(指Windrvr.vxd或Windrvr.sys)的句柄,在驱动程序开始时必须调用。

  2) DeviceClose () ,释放驱动程的句柄,在程序结束时调用。

  3) DiagIntHandler() ,中断处理函数,用户加代码实现当中断信号到来时,对硬件的控制处理。

  4) A429_IntEnable() ,中断使能,以DiagIntHandler作为参数调用该函数后才能进入到对中断进行处理的函数。

  5) A429_IntDisable() ,中断无效函数,屏蔽中断信号。

  6) WDC_WriteAddr32() ,按照参数中给的地址,往寄存器中写数。

  7) WDC_ReadAddr32() ,从寄存器中读数。

  本驱动软件为在Windows2000系统平台下基于WinDriver采用VC语言编制的驱动软件的DLL动态库,主要完成初始化和数据的收发功能,并检验数据的正确性。具体功能有输入端口选择、发送/接受FIFO复位、数据传输率设定与获得、奇偶校验设置与获得、发数据前判断发送FIFO是否空及收数据前判断接受FIFO中是否有数等。要实现这些功能需要导入文件A429_lib.c并结合硬件设计的定义适当调用上述7个函数并封装将能实现这些功能的函数作为导出函数供测试程序直接调用。下面是设计的函数与其功能的对应关系

  1) void*A429_Open(),对DeviceFindAndOpen()的封装,获得驱动程序的句柄。

  2) int A429_Close(void*hDev),以上面函数返回的句柄作为参数,退出驱动程序。

  3) void A429_SetCheck(BYTE chan, BYTE check),chan:通道号,根据chan的值设置对应端口的校验值保存在变量check中。

  4) void A429_SetSpeed(BYTE chan,BYTE boud),设置对应端口的数据发送速率,保存在变量boud中。

  5) void A429_ResetSendChan(BYTE chan),将chan对应的发送端口复位。实现代码即是调用WDC_WriteAddr32(),其地址参数值根据硬件设计的定义传递。

  6) void A429_ResetReceiChan(BYTE chan),复位与chan对应的接收端口。

  7) void A429_ResetAll(),对所有发送和接受端口复位。

  8) BYTE A429_SendChanIsBusy(BYTE chan),检查与参数值对应的发送端口是否忙,返回值为0代表空闲状态,为1则忙。

  9) byte A429_GetCheck(BYTE chan),获得用户设置的奇偶校验量。

  10) WORD A429_GetData(BYTE chan,WORD Maxlenth,DWORD *pdata),从接收通道获得数量长度不大于Maxlenth的ARINC429数据字,存入为chan对应通道分配的pdata所指缓存区中,返回取走数据个数


图3 ARINC429总线接口卡的基本结构


图4主程序流程图

  上述函数能实现简单的一次发送和接受数据,是提供给用户的导出函数。导出变量有读写缓存区地址 ,为了能不间断的测试发送接收数据的正取性,本文设计三个线程,分别为往发送FIFO写数的写线程、从接受FIFO取数存入缓存区的的读线程和通知测试程序缓冲区有数请取出的通知线程,并为该三线程建立一个互斥对象,以防止对同一数据进行操作时发生错误。在写线程中根据测试程序输入数的多少循环调用WDC_WriteAddr32(),发送的数据存入发送缓存区。读线程将接收FIFO中的数读出与发送数据比较,若正确则存入接收缓存区并删除发送数据为接下来的发送数据腾出内存空间。测试程序接收到通知,调用用户设计的处理函数依次取走接收缓存区数据转存,验证板卡能否正确收发数据。图4是整个程序流程图,限于篇幅,详细的代码就不一一介绍,初始化中包括中断使能,中断服务程序即是在中断处理函数DiagIntHandler()中调用读线程。

3 结论

  本驱动程序在NI公司PXI-1000机箱,PXI-8156控制器,CPU:X86 Fimily 5 Model 4,

  内存 81,460kB,操作系统 :Microsoft Windows 2000 professional的条件下,进行了连续的仅一个通道收发、两通道同时收发数据测试,结果表明本文设计的驱动程序能成功高效运行,有较高的实用价值,对后续的利用WinDriver开发驱动程序相关研究有一定参考价值。也再次说明了硬件开发人员利用WinDriver开发驱动程序,不必了解繁琐的内核驱动知识,也能快速开发出性能指标令人满意的设备驱动程序,是设计硬件驱动的高效率的工具。

参考文献

  1杨淑云,刘强.基于WinDriver的设备驱动程序的设计开发[J] .电子技术. 2001 (9): 21- 23

  2黄讯,孙政顺.利用WinDriver开发PCI设备驱动程序[J].电子技术应用.2001(3):15-16

  作者简介:易小青(1984-),女,硕士研究生,从事计算机在电力调度自动化应用研究。王倩(1962-),女,教授,从事计算机技术在电力系统的应用研究。

 
打赏
 
更多>同类环保知识
0相关评论

推荐图文
推荐环保知识
点击排行
网站首页  |  免责声明  |  联系我们  |  关于我们  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  RSS订阅  |  违规举报  |  鲁ICP备12015736号-1
Powered By DESTOON