您的当前位置:首页正文

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

来源:九壹网
维普资讯 http://www.cqvip.com 第28卷 第l4期 VO1.28 No.14 计算机工程与设计 Computer Engineering and Design 2007年7月 July 2007 基于ARINC42 9总线接口板卡的驱动程序设计与实现 姬昕禹, 马捷中, 翟正军, 白瑞智 (西北工业大学计算机学院,陕西西安710072) 摘 要:在介绍ARINC429总线接口板卡体系结构的基础上,重点阐述了Windows2000下,该型板卡驱动程序的设计与实现。 驱动程序的应用程序接口开发采用WinDriver设备驱动程序工具包,详细介绍了板卡设备注册,存储器访问以及中断处理的 实现机制。板上程序则结合板卡的硬件设计,介绍自测试以及数据收发功能的实现。 关键词:驱动程序;总线规范;单片机;线程;中断 中图法分类号:TP3l1.11 文献标识码:A 文章编号:1000.7024(2007)14.3511-04 Design and implementation of device driver for ARINC一429 bus interface card JI Xin—yu,MA Jie—zhong, ZHAI Zheng ̄un, BAI Rui—zhi (College of Computer Science,Northwestern Polytechnical University,Xi’an 7 1 0072,China) Abstract:On the basis ofthe architecture ofARINC-429 bus interface card,the design and implementation ofdevice driver for he tcard in the context of Windows2000 is presented.WinDriver device ridver toolkit is adopted to develop the application interface.And card device registration,register access and mechanism to realize interrupt process is introduced in detail.The program on card is focused on its testing and implementing the function of receiving nd sendiang data. Key words:device driver;bus-regulation;monolithic computer;thread;interrupt O引 言 微型电子计算机技术的不断发展,促使功能相对独立的 级输出v+、v_与参考电压有关,而差分运算的结果是参考电 压的两倍。 DEll016芯片是由DVICE公司为实现ARINC429通讯而 航空电子系统更加紧密而有机的结合,发展成为航空电子综 合化系统。各个子系统通过总线快速、有效的信息传输,直接 关系到整个航空电子系统安全,高效的运行。而越来越多现 代航空电子设备采用了数字化技术,使得数字传输成为信息 传输的主要途径。它克服了模拟传输所导致的成本高、传输 线多、可靠性差的缺点,提高了信息传输精度。为此美国航空 无线电公司(ARINc)制定了相应的数字总线传输标准,即AR. INC429总线标准。该标准被广泛应用于波音系列飞机、欧洲 空中客车等机种。 专门开发的接口集成芯片,由控制寄存器,定时器电路和独立 工作的两个接收器、一个发送器构成。通常与BD429芯片配 合使用。 DEll016芯片自身提供100kb/s或12.5kb/s的信息传输速 率。发送器主要由8x32.BitFIFO寄存器和定时器构成,待发 送的8个32.Bit字以先进先出的顺序经过并.串转换,在时钟 脉冲的作用下发送出去,再经由BD429总线驱动,实现双极归 零调制。数据速率及字间间隔由定时器电路控制。接收器则 是将接收到的数据放置在寄存器中,可根据需要读取数据。控 l ARINC429总线规范及DEI1016芯片简介 429总线规范规定,总线数据以32.Bit字格式传送,其中 包含标号(第1.8位),源、目标识别码(第9.10位),数据区(第 制寄存器实现对DEI1016工作模式的控制。 2 ARINC429总线接口板卡体系结构 该型总线接口板是全长16.Bit的ISA总线插件板,它满 足AR1NC429总线标准。由ARINC429总线接口器件、存储 l1.28位),符号状态码(第29.31位),奇偶校验位(第31位)。一 个32.Bit字传输一个参数,每两个字之间有4个位的时间间 隔。429数据发送时经过二级差分驱动,前极v+、v.是TTL电 平,即逻辑1为5V,逻辑0为0V的正逻辑。经过驱动的第二 器、16-Bit单片机、PC机ISA接口控制逻辑等组成。 ARINC429总线接口器件是该型接口板卡的核心器件,采 用上述介绍的DEI1016和BD429芯片组,全面符合美军标准, 收稿日期:2006—07—19 E-mail:jxywyl@163.corn _作者简介:姬听禹(1980一),男(满族),山东烟台人,硕士研究生,研究方向为计算机应用技术; 马捷中(1967一),女,陕西西安人,硕士, 副教授,硕士生导师,研究方向为计算机应用技术: 翟正军(1965一),男,河南洛阳人,硕士,教授,硕士生导师,研究方向为计算机应用技 术: 白瑞智(1981一),男,河北衡水人,硕士研究生,研究方向为计算机应用技术。 一3511— 维普资讯 http://www.cqvip.com 每组芯片支持1发2收,板卡采用4组该芯片组,实现4发8 收。板上16.Bit单片机采用Intel80C196,地址线和数据线均为 16-Bit(复用),片内可实现看门狗,定时器功能,并具有外部中 了封装,生成动态链接库,这个动态链接库为用户程序提供必 需的应用程序接口,用户程序通过调用这些接口函数完成对 接口板卡的驱动功能。用户可以构架基于不同工作模式的应 断源。80C196的存储器和I/O地址空间复用,共为64Kbyte。 RAM为双口RAM IDT7025,容量为8Kx16,用于存放要发送 用程序。动态链接库的生成这里不再赘述,下面主要阐述 WinDriver的设备驱动实现机制。 在开发向导中配置好所需的内存及中断资源信息之后, Open (WinDriver生成了如下函数,BOOL ARINC429 AR ..的和接收到的总线数据以及PC机和单片机之间的通讯信息。 ROM为27128芯片,容量为16 Kx8x2,用于存放板内应用与 测试程序。控制逻辑主要完成ARINC429总线接口芯片与单 片机、双口存储器以及和PC机ISA总线的接口控制。控制逻 C429 HANDLE phARINC429),该函数实现设备句柄初始化工 作,参数类型AR/NC429 HANDLE被定义为指向ARINC429 STRUCT结构体类型变量的指针,该结构体有3个成员变 辑电路由基地址选择电路、译码电路、中断选择电路及其它辅 助电路组成。 板卡体系结构框图如图1所示。 量:QhWD,句柄;②Interruptl,用于存放有关中断的信息; ③cardReg,用于存放硬件板卡的I/O地址、内存映象地址和 中断信息等内容。该函数调用WD Open()打开一个能够访问 核心模块的句柄,记录存储空间及中断信息,并由WD Card. Register()实现硬件板卡信息向WinDriver Kernel的注册,完成 设备句柄初始化。 在资源注册过程中,cardReg.Card.Item[i].I.Mem.dwPhysicalA— ddr以及cardReg.Card.Item[i].I.Int.dwlnterrupt分别决定着向 WinDriver Kernel注册的存储器空间物理地址以及中断号,本 ISA地址数据线 ISA控制线 文程序中使用两个变量分别为其赋值,这样就可以使用户根 据客户机自身的资源分配状况,通过接口函数间接设定上述 两种资源。使得程序灵活易用。 本文的应用程序接口,主要实现存储器访问以及中断处 理功能。访问存储器可以使用函数WD TransferO实现,指定 设备存储器映象地址由该函数中的WD TRANSFER类型参数 设定,事实上,上述存储器访问机制,已经由WinDriver向导进 行了封装并以接口函数的形式提供给驱动程序开发人员。这 里不再赘述。 有了访存接口,下面要考虑的问题就是访存的时机问题 了,板卡接收到数据之后,将通过ISA总线向应用程序发送中 图1 ARINC429总线板卡体系结构 3驱动程序的设计与实现 3.1程序结构及资源分配 由于429接口板卡用于机间通讯,所以驱动程序的组成 必定涉及两个部分: (1)板卡内部测试以及应用程序,它将驻留在板上的ROM 中,上电复位后,由板上单片机执行以实现板卡自检及数据收 发功能; (2)PC机应用程序接口,它将被提供给用户程序,主要实 现以下功能:向429接口板卡传递工作模式参数及待发送数 据,获取从429接口板卡接收到的数据。为了暂存429总线数 据以及单片机与PC机之间的通讯信息,在硬件设计上采用双 口RAM作为缓冲区,而该缓冲区空间将映射到PC机指定的 地址空间上。 断,因此,应用程序接口还必须提供中断处理机制。下面主要 阐述WinDriver的中断处理机制。 WinDriver向导自动生成用来实现中断处理函数ARIN. C429 1nterruptlEnable 0,它有两个参数,分别为ARINC429 errupt1HANDLE和ARINC429Int_一 ANDLER类型,前者指定打开的设备,而后者则指定中 H以下是在驱动程序设计中对双口RAM的资源分配情况: 整个存储区为4个发送通道以及8个接收通道分别分配 断处理程序,由用户进行开发,以接收数据为例,中断处理在 应用程序中应有如下形式: ∥全局量,指定打开的设备 ARINC429 HANDLE hARINC429_512x16bit的空间作为存储区,其中为避免PC机和80C196对 同一缓冲区的操作,每个发送和接收通道均采用双缓冲结构, Major=NULL; 每个缓冲区空间为256x16bit,其余地址空间存放各个缓冲区 及中断和定时器状态标志。 ……∥设定基地址,中断号 ∥调用ARI∥完成设备初始化工作 NC429Open(&hARINC429 ..MaJor) .……3.2 PC机应用程序接口 本文的应用程序接口采用JUNGO公司出品的WinDri. ver设备驱动程序工具包进行开发,该工具包提供了功能全 面的API函数,使得基于ISA、EISA、PCI等不同总线的硬 ……ARINC429 Interrupt1Enable();//使能中断 其中,ARINC429Interrupt1HandlerRoutine1中断处理程序 _件设备驱动程序的开发周期大为缩短,并且具有良好的可 移植性。 指针作为参数被传入,该函数描述如下: void ARINC429_Interrupt1 HandlerRoutine1( 考虑到内存的使用效率以及驱动程序的升级需要,在本 文的设计中对WinDriver的API函数以及板卡功能函数进行 一ARINC429 HANDLE hAR工Nc429_Major’ARfNc429_ InterruptI_RESULT intResult) 3512一 维普资讯 http://www.cqvip.com {//该函数为用户定义的中断处理程序 HANDLE hThread=GetCurrentThread(); SetThreadPriority(hThread,THREAD_time的任何等级(这里指进程的优先等级,而调用Set— ThreadPriority0是执行基于以上进程优先级的微调操作,即设 __ PRIORITYTIME定相对优先级)的调整结果为15(线程优先级数,范围从O(最 低)至31(最高))仅低于基于realtime级别的线程优先级,这将 足以满足数据接收中断的优先级需要。 CRITICAL); receive();//由用户定义,通过调用访存接口,实现对板 卡的数据获取 3.3板上测试及应用程序 为了提高程序的效率,板上程序的开发采用MCS一96指令 系统实现。程序主干将顺次完成如下功能:板上器件自检、获 取429板卡工作模式字、开中断、初始化DEI1016、发送数据, ) 以上代码为中断处理在应用程序中的应用形式,现将其 具体实现机制阐述如下:为了完成中断使能,在函数ARIN— C429 Interrupt1Enable()中调用了  InterruptThreadEnable0 ,该函期间如果发生接收数据中断,则程序将转向外部中断服务程 序执行数据接收操作。 以上是板上程序总体功能描述,下面将以程序主要功能 数原型在头文件windrvr int thread.h中声明,它直接通过调用 WDIntEnable0i ̄i数注册一个中断服务程序,而在函数trhead_ _sta ̄O的调用中使用了函数_begintrheadex0,以此来创建一个线 程对象,调用形式为:ret=-(void )_beginthreadex(NULL,0xl000, thread_handler,(void )t,O,(unsigned hat )&GlobalDW).fl ̄begin— _trheadex() ̄lJ建的线程的主体就在参数trhead handler所设定的 线程函数,实际上,这个线程也就是中断处理的主体执行者。 而中断处理的具体实现则由线程中调用的函数interrupt thread handler()来完成,该函数的指针由参数t的成员变量func 传递给线程函数thread handler(),参数t的另一个成员data指 示指针pThread,其中包含一个重要的成员,即pThread一>func, 指示函数ARINC429 InterruptlHandler(),该函数将在中断到来 时被调用,记录中断信息并调用用户定制的中断处理函数。以 下是中断处理所调用的重要函数的原型: sattic void interrupt thread handler(void data){ INTTHREAD——DATA pThread=(INTTHREAD_— DATA )data; for(;;){ ∥无中断到来时该函数处于睡眠状态;中断到来时,将被 WinDriver核心唤醒。 WD_IntWait(pThread一>hWD,pThread一>pint); ∥若被父进程的WD IntDisable()函数唤醒,则跳出 循环体,停止等待中断的到来。 if(pThread一>pint->fStopped) break; pThread-->func(pThread-->pDaat); ) ) 如前述pThread->func指向函数ARINC429Inter 一rupt1Handle(rPVOIDpData),在该函数的内部通过由参数pData 传入的指针完成对函数ARINC429Interrupt1HandlerRoutinel0 的调用,这也恰恰是由用户定义的中断处理程序,板卡数据将 在这个函数调用中被获取。至此,应用程序接口中的中断处 理机制全部实现。值得注意的是,在线程创建过程中,由begin— _threadex 0所创建线程的默认优先级为THREADPRIORITY—— NORMAL,用户可在自定制中断处理程序中由GetCurrentTh— read()获得线程句柄,并调用SetThreadPriority()将其优先级设 定为THREAD PRIORITY TIME CRITICAL,该参数面对 ̄real— 模块为对象阐述程序设计与实现。 板卡自检是一项非常重要的功能,在进行正常的数据收 发工作之前,对板上重要功能器件进行检测,如果器件异常, 程序将返回相应的错误类型,用户可据此快速确定异常器件 并采取适当措施使板卡恢复正常工作。自检将针对双口RAM, 8259,DEI1016进行,由于在收发数据之前需要将双口RAM初 始化为0,若初始化失败,则程序给出错误类型,并重新开始自 检,8259则配合DEI1016进行测试,应用DEI1016自测试功能, 由程序发送指定数据,与自接收数据进行比对,不符,则给出 错误类型。重新进行自检。值得注意的是,自检过程中,第2 路数据与第1路数据反相。 自检模块的程序流程如图2所示。 给出错误类型 主 DEll016自测试模式设置 DL=#FFH设置循环等待计数器 发送测试数据 执 行 中 ! 断 服 务 程 序 读数据并与测试数据比较 \/ 茄 +Y 图2自检模块程序流程 板卡上的数据接收采用中断方式,在硬件设计上,将 DEI1016芯片上的/DR信号(接收器数据有效)反相引入8259 的中断请求寄存器,这样,4片DEI1016芯片8个/DR信号对应 IR0一IR7这8个中断请求信号,恰好满足接收缓冲区8个接收 通道的接收数据要求。 数据接收历经如下过程:DEI1016接收到数据使/DR有 一35】3一 维普资讯 http://www.cqvip.com 效,使得IRi(i为0—7)被置位,将产生的中断请求信号引入 80C196的外部中断管脚,触发外部中断,则程序转入外部中断 RPORT1: —……∥接收器1端口数据接收 服务程序,此时程序查询中断请求寄存器,将由DEI1016接收 到的数据读入接收数据缓冲区,并根据缓冲区数据存取情况 发送中断,通知PC机应用程序接收数据。程序的实现从外部 中断服务程序开始简述如下(以下是以通道中A缓冲区为主 体阐述接收数据的主干流程,关于双缓冲机制的处理这里略 去以便突出主题): ORG 200EH// ̄b部中断服务程序首地址 DW EXINT1 ISR1 历经上述程序过程,板卡即实现了完整的数据接收。 板上的数据发送过程较其接收过程而言要简单,它不涉 及中断的处理,在接收到PC机发送的数据后,相应的标志位 被置位,板上CPU将查询各个发送通道的标志位,将待发送 数据送入DEI1016并发送出去。程序的设计与实现这里不 再赘述。 在硬件板卡上,加入了软件复位设计,它可由PC机应用 程序接口进行设置,用户可以在应用程序中,对基本设置完成 后,调用指定接口函数,完成板卡复位,则板上程序跳转至物 理地址2080H处,即板上程序的起始地址开始执行,从而有序 的实现着数据的接收及发送任务。 EXINT1 ISR1: ……∥保护现场 LDB AL.#00001010B LD BX.撑OCW3 4结束语 板上应用程序由于采用了对应嵌入式CPU的汇编语言, 它的不足之处在于可读性较差,优点在于获得了良好的执行 效率;在PC机应用程序接口的开发过程中,使用了JUNGO公 司出品的WinDriver设备驱动程序工具包,其丰富的API函数 使驱动程序开发的复杂性大大降低,因而,极大的缩短了程序 的开发周期。在航电设备测试中该驱动程序表现出了良好的 稳定性和可靠性。 STB AL.[BX】 LDB IRR,[BXIH获取中断请求寄存器 CMPB IRR,#0H JE RECEIVEMODE RECEIVEMODE: ……∥读取接收模式 LJMP R POIU’8 RPORT8: —参考文献: [1】刘文波,卞巨伟.实现ARINC429数字信息传输的方案设计[J]、 电子技术应用,2000(6):48—49. [2】 姜运生,乔卫华,范秀峰,等、基于HS3282的ARINC 429航空 JBS IRR,7,R PORT8A//判断有无待收 LJMP R PORT7H数据,无则查询接收器7 RPORT8A: —LD BX,#RD7//接收器8读端口地址 LD CX,撑I BUFACCW8 通讯总线设计[J].世界电子元器件,2003(5):60—61. [33] 孙旭光.一种多功能ARINC429总线接口板设计[J].测控技术, 2003,22(6):40-41、 LD AX,撑R BUFAADDR8//接收起始地址 LD LD SHL ADD TEMPUSE,[CX】 DX,TEMPUSE DX,#2H AX.DX [4] 徐景硕,高扬.基于8位单片机的ARINC429总线接口[J].电子 技术,2001(8):29.31. [55] 杨淑云,刘强.基于WinDriver的设备驱动程序的设计开发[J]. 电子技术,2001(9):22—23. [6】 冯毅,梅海青,王霞.Windows2000下ISA卡驱动程序的开发[J]. 兵工自动化,2003,22(3):49—50. LD DX,[BX】+ ST DX,【Ax]+∥向接收缓冲区写数据 LD DX,[BX] [7】 李红梅.Win32下硬件中断接入和I/O访问[J].现代电子技术, 2002,11:82-83. ST ST DX,【Ax】∥向接收缓冲区写数据 TEMPUSE,[cxJ ————INCB TEMPUSEL [8】 景琦,殷永红,李鹏.利用WinDriver开发设备驱动[J].现代电子 技术,2005,19:68-69. [9】 姜术君,樊锐,陈五一,等.ISA板卡驱动程序的开发[J】_仪表技 术与传感器,2005(1):33.34. [10】候俊杰.深入浅出MFC[M】.2版.武汉:华中科技大学出版社, 2001:42.48. INCB RBUFFERTEMPNUM8A ∥下面判断已接收数据数量是否达到PACKROOM ∥即待接收的数据总量,若达到则发中断 CMPB RBUFFERTEMPNUM8A,PACKROOM __JE SENDINT】5 [11】王育坚.VisualC斗_卜面向对象编程教程[1vI】.北京:清华大学出版 社,2003:378—383. SENDINT15: ……[12】王克义,鲁守智,蔡建新.微机原理与接口技术教程[1vI】.北京:北 京大学出版社,2004:316—328. ∥设置接收标志并发送中断通知PC机 ∥接收器7端口数据接收 RPORT7: —[13】程军.Intel80C196单片机应用实践与C语言开发[M】.北京:北 京航空航天大学出版社,2000:13—23. ……一3514一 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top