您的位置 首页 主动

根据WinDriver的多路串行设备驱动开发

摘要:工业控制计算机中广泛使用串行接口UART与外围设备进行通信,同时,Windows操作系统以其友好的UI界面被广泛采用。文中阐述了UART设备的工作原理,并利用Jungo公司的WinDriver软

摘要:工业操控核算机中广泛运用串行接口UART与外围设备进行通讯,一起,Windows操作体系以其友爱的UI界面被广泛选用。文中论述了UART设备的作业原理,并运用Jungo公司的WinDriver软件完结了Windows操作体系下一种PCI转多路UART设备的驱动开发。

0 导言

XR17D158是在工业操控核算机中被广泛运用的一种PCI转8路UART接口芯片。本文首要介绍Window操作体系驱动程序和开发东西Win Driv er软件,并经过该软件完结XR17D158在Windows体系下驱动程序的开发。并以此为根底,提出了一种运用WinDrive东西开发PCI总线设备驱动程序的软件架构。

1 Windows操作体系驱动开发

Windows操作体系以其友爱的用户图形界面和强壮的功用在工业操控核算机范畴广泛运用。可是Windows对体系底层操作进行了屏蔽,约束应用程序直接拜访硬件资源,应用程序需求调用设备的驱动程序拜访硬件资源,而开发Windows环境下的驱动程序,需求对操作体系内核的运行机制有深化的了解。

美国Jungo公司的WinDriver驱动程序东西包使程序规划人员不需求把握Windows操作体系内核的相关内容,只需求调用WinDriver供给的接口函数就能够直接拜访体系硬件资源,减轻了规划人员的开发难度。WinDriver一起支撑PCI/CardBus/ISA/ISAPnP/EISA/CompactPCI和USB等多种总线结构。

WinDriver驱动程序的体系结构如图1所示。

依据WinDriver的多路串行设备驱动开发

运用WinDriver开发驱动,能够运用内核刺进形式和用户形式。内核刺进形式功率高,但编写杂乱,需求编写者对操作体系内核和微软供给的DDK(Device Driver Kits)都有深化的了解。用户形式下,开发人员经过WinDriver Wizard图形化界面的引导:首要,生成所要开发设备的.inf文件,其次,生成设备驱动程序源代码模板。该模板由三部分组成:1)WinDriver供给给用户的设备拜访库函数WDC Lib;2)Win Driv er所发生的设备操作例程,用以查看设备的硬件功用是否正常;3)用户开发环境,包括:Visual Studio、Delphi等。

2 XR17D158作业原理

2.1 XR17D158简介

XR17D158是EXAR公司出产的一款PCI总线UART芯片,契合PCI2,3标准。XR17D158具有8路独立的UART接口,每路UART接口兼容16C550的装备寄存器和64字节的发送/接纳FIFO。XR17D158每路UART接口的数据传输速率可进行设置,最高速率可达921.6kbps。

XR17D158内部的寄存器用来完结PCI设备的装备、芯片本身的状况监控和串行数据的接纳和发送。X86体系结构下,体系上电后,BIOS将读取XR17D158的PCI信息,依据体系的硬件架构为XR17D158分配存储地址、端口地址和中止号等信息。并将信息写入PCI装备寄存器中,例如体系会将XR17D158的UART装备寄存器基地址写入BAR0(10H)中。

2.2 XR17D158芯片装备

2.2.1 波特率设置

XR17D158的8路UART接口能够装备不同的波特率,波特率核算公式为:

依据WinDriver的多路串行设备驱动开发

式(1)中,MCR[7]代表域分频系数,分频系数由每路UART接口的DLM和DLL寄存器操控,对一路UART接口的波特率装备进程如下:

(1)LCR[7]置1,使能DLM、DLL寄存器;

(2)EFR[4]置1,使能MCR[7:5];

(3)设置MCR[7],MCR[7]=0,预分频系数为1,MCR[7]=1,预分频系数为4;

(4)设定分频系数,依据所要设定的波特率,运用式(1)核算分频系数,并将分频系数写入DLM、DLL寄存器中;

(5)EFR[4]清0,锁存MCR[7]。

2.2.2 UART接口数据接纳

UART接口的数据接纳部分由接纳移位寄存器(RSR)和接纳坚持寄存器(RHR)组成,RSR检测接纳到的每一位数据的有用性,当检测到中止位时,标明一个字符接纳结束,RSR将数据装入RHR中。数据准备好中止(ISR[2]=1)会在数据装入RHR,或许在接纳FIFO使能而且接纳数据到达设定的FIFO触发条件时发生。处理器能够运用查询方法和中止方法读取XR17D158接纳FIFO的数据。两种方法完结的进程为:

(1)查询方法:1)设置UART通道的波特率;2)中止使能寄存器[IER]清0,制止一切中止;3)读取线路状况寄存器(LSR);4)假如LSR[0]=0,表明RHR或许接纳FIFO中没有数据,等候必定时刻后,重复第3)步;5)假如LSR[0]=1,表明RHR或许接纳FIFO中现已保存有接纳到的数据,此刻读取RHR中的数据,并重复第3)步。

(2)中止方法:1)设置UART通道的波特率;2)IER[0]置1,使能RHR中止;3)当PCI总线上发生中止时,读取INT0寄存器,确认发生中止的通道号;4)读取INT1、INT2、INT3寄存器,确认发生中止的UART接口序号和中止源;5)读取RHR中的数据。

2.2.3 UART通道数据发送

发送数据进程,有用数据由主机写入UART接口中的发送FIFO寄存器,当发送坚持寄存器(THR)清空标志位ISR[1]=1,表明发送FIFO中的数据削减到满意设定的触发中止条件而引起中止,在输出移位寄存器(TSR)中,由发送操控逻辑在待发送数据加上开始位、奇偶校验位和停止位,并按设定的时钟频率逐位移出数据。

3 开发实例

运用WinDriver用户形式开发的驱动程序,实则是为上层的应用程序供给一组拜访设备的接口函数,完结应用程序对设备的初始化、读操作、写操作和设置等。

XR17D158的驱动程包括:UART接口打开函数XR17D158_Open()、UART接口读函数XR17D158_Read()、UART写函数XR17D158 Write()和UART接口封闭函数XR17D158 Close()。为了进步驱动功率,能够在内存平分别拓荒一个接纳缓冲区和一个发送缓冲区,XR17D158 Read()和XR17 D158 Write()不直接拜访硬件设备,而是经过对内存缓_区的读写,完结对XR17D158的读操作和写操作。本文提出的驱动程序架构如图2所示。

依据WinDriver的多路串行设备驱动开发

图2中,XR17D158 Open()中注册的中止服务程序XR17D158 Handle()完结XR17158的数据接纳与发送;XR17D158 Read()和XR17D158 Write()为应用层供给读/写接口,经过内存缓_区接纳XR17D158_Handle()的数据或向XR17D158_Handle()发送数据。

XR17D158_Open()运用WDC_PciReadCfg()和WDC_PciWriteCfg()完结对XR17D158PCI装备空间的拜访,运用WDC_ReadAddr8()和WDC_Write Addr80完结对XR17D158中设备装备寄存器和UART装备寄存器的操作,如UART接口波特率的装备:

依据WinDriver的多路串行设备驱动开发

UAR了接口数据的读取能够运用查询方法或许接口方法,可是查询方法要求处理器周期地对XR17D158的状况进行检测,处理器的功率较低。因而本文运用中止的方法完结UART接口数据的接纳和发送。中止服务程序XR17D158 Handle()的作业进程进程如下:

依据WinDriver的多路串行设备驱动开发
依据WinDriver的多路串行设备驱动开发

XR17D158_Handle()完结UART接口和内存缓冲区之间的数据交换,从内存缓冲区中读取XR17D158_Write()写入的数据完结数据的发送,向内存缓冲区中写入UART接口接纳的数据,再由XR17D158_Read()读取完结数据的接纳。在XR17D158_Open()运用WDC_XR17D158_IntEnable()注册XR17D158_Handle()。

4 成果验证

运用外部设备向XR17D158子卡发送RS232数据,发送数据波特率为9600 bps,发送周期为1 Hz,经过示波器调查XR17D158的接纳数据波形。

依据WinDriver的多路串行设备驱动开发

图3(a)为XR17D158接纳到RS232数据的波形,图3(b)为XR17D158所发生的中止信号波形,中止信号为低电平时,驱动程序处理XR17D158所接纳到的数据。实验中,RS232数据为周期发送,每帧数据为90字节,图3中能够看出驱动程序处理每帧数据的时刻约为0.1ms,假如8路UART接口一起接纳数据,且波特率为921.6kbps,此刻驱动程序处理数据的时刻约为100ms,不会呈现丢数现象。

5 结束语

文中简略地介绍了WinDriver软件东西的特色和驱动发生的进程,并针对一种PCI转UART设备XR17D158,提出了运用WinDriver开发PCI设备驱动的软件架构。此刻Windows驱动设备的开发更像是Windows应用程序的开发,仅在一个驱动函数中运用WinDriVer供给的接口函数,而无需触及Windows内核。此外该驱动架构不只适用于XR17D158设备,还可应用于其它PCⅡ设备,如PCI9056等。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/284681.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部