当前位置:首页 > 智能硬件 > 智能硬件
[导读]摘要:工业控制计算机中广泛使用串行接口UART与外围设备进行通信,同时,Windows操作系统以其友好的UI界面被广泛采用。文中阐述了UART设备的工作原理,并利用Jungo公司的WinDriver软件实现了Windows操作系统下一种PC

摘要:工业控制计算机中广泛使用串行接口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开发驱动,可以使用内核插入模式和用户模式。内核插入模式效率高,但编写复杂,需要编写者对操作系统内核和微软提供的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接口可以配置不同的波特率,波特率计算公式为:

式(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所示。

图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接口波特率的配置:

UAR了接口数据的读取可以使用查询方式或者接口方式,但是查询方式要求处理器周期地对XR17D158的状态进行检测,处理器的效率较低。因此本文使用中断的方式完成UART接口数据的接收和发送。中断服务程序XR17D158 Handle()的工作过程过程如下:

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

4 结果验证

使用外部设备向XR17D158子卡发送RS232数据,发送数据波特率为9600 bps,发送周期为1 Hz,通过示波器观察XR17D158的接收数据波形。

图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等。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

USB摄像头是一种采用USB接口的视频采集设备,其优点在于即插即用、操作简便,无需额外驱动程序,支持笔记本电脑,并且成本较低,可以支持远程网络观看。

关键字: usb摄像头 驱动程序

与两相双极步进电机的驱动电路相比,两相单极步进电机的驱动电路在输入段配置、内部逻辑及控制电路和驱动电路使用双通道方面基本相同,但是输出段的配置不同。

关键字: 四相步进电机 驱动程序 程序电路

本文介绍了如何实现嵌入式MICREL网卡的驱动程序开发和设计。首先,我们介绍了MICREL网卡的概述和工作原理。然后,详细探讨了驱动程序的开发流程,包括硬件和软件的配置以及驱动程序的编写和测试。最后,总结了几点注意事项和...

关键字: 嵌入式 MICREL网卡 驱动程序

在这篇文章中,小编将对OLED的相关内容和情况加以介绍以帮助大家增进对它的了解程度,和小编一起来阅读以下内容吧。

关键字: OLED 驱动程序 无源驱动

近日,英特尔发布了锐炫显卡的新版驱动更新。本次驱动更新涵盖了锐炫A770、A750、A380以及移动端的锐炫GPU,这使得英特尔锐炫整个家族的DX9性能都实现了显著提升。

关键字: 英特尔 显卡 驱动程序

史胜辉,在MTK工作了11年,一直在基带芯片的USB驱动领域做开发和验证。从最开始做USB2.0/3.0 IP验证和驱动开发到后面带领团队做上层协议驱动开发,以及跟硬件设计部门合作开发全新的USB硬件加速器。

关键字: 基带芯片 驱动领域 驱动开发

摘 要:从硬件与软件方面介绍了基于PXI技术的1553B总线通讯模块的设计,并对PXI总线接口设计、驱动程序的开发、 SDRAM存储器的控制和1553B总线通信协议实现等关键技术进行了详细的阐述,为航空领域测控系统开发P...

关键字: PXI技术 驱动程序 SDRAM存储器 1553B总线

PnP全称Plug-and-Play,译文为即插即用。PnP的作用是自动配置低层计算机中的板卡和其他设备,然后告诉对应设备都做了什么。PnP的任务是把物理设备和软件设备驱动程序相配合,并操作设备,在每个设备和它的驱动程序...

关键字: PnP 驱动程序 操作设备

作 者:道哥,10年嵌入式开发老兵,专注于:C/C、嵌入式、Linux。关注下方公众号,回复【书籍】,获取Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章(PDF格式)。目录kill命令和信号使用kill...

关键字: 信号 应用程序 驱动程序

驱动程序本质上是软件代码,主要作用是计算机系统与硬件设备之间完成数据传送的功能,只有借助驱动程序,两者才能通信并完成特定的功能。

关键字: 驱动程序 硬件设备 UNIX
关闭
关闭