微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于WinDriver的PCI总线设备驱动开发

基于WinDriver的PCI总线设备驱动开发

时间:08-04 来源:互联网 点击:

件而引起中断,在输出移位寄存器(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等。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top