基于PCI总线的多串口扩展卡设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2009年第05期,第42卷 通 信 技 术 Vol.42,No.05,2009 总第209期Communications Technology No.209,Totally
基于PCI总线的多串口扩展卡设计
王 智, 杨瑞峰,杭 晔
(中北大学 仪器科学与动态测试教育部重点实验室,山西 太原 030051)
【摘 要】提供了一种4路串口转换PCI总线的设计方案。

运用Altera公司的FPGA芯片EP2C35和UART串口扩展芯片ST16C654实现多路串口和PCI总线接口转换,并重点介绍了FPGA和PCI总线的设计要点以及驱动程序的开发。

该扩展卡符合PCI 2.2规范,最高波特率可达921.6 KB/s,可广泛应用于各类测试设备、工厂自动化、有线通信等领域。

【关键词】PCI总线;串口扩展;UART;FIFO
【中图分类号】TP274 【文献标识码】A【文章编号】1002-0802(2009)05-0045-03
Design of Multi-serial Port Extending Card Based on PCI Bus
WANG Zhi, YANG Rui-feng, HANG Ye
(Key laboratory of Instrumentation Science and Dynamic Measurement, North University of China, Taiyuan Shanxi 030051, China)
【Abstract】A design on PCI bus of four-serial port switch is proposed in the paper. The multi-serial port interfaced to PCI bus is realized by using the FPGA chip EP2C35 of Altera company and UART serial expansion chip ST16C654. The main points of FPGA and PCI bus design and development of driver software are emphatically described. The extending card is up to PCI Rev.2.2 and the maximum baud rate can reach 921.6 KB/s. So it could be widely applied in such fields as test equipments, plant automation, wire communication, etc.
【Key words】PCI bus; serial ports expansion; UART; FIFO
0 引言
随着我国自动化技术的发展,越来越多的自动化或测试测量设备通过串口通信的方式接入上位机,实现数据的共享,集中处理和存储。

串口通信因为具有结构简单,传输距离远,成本低廉,标准统一等优点,已经被广泛应用于各种领域[1]。

PCI(Peripheral Component Interface,外围部件接口)总线是高性能外围设备接口总线,可同时支持多组外设,数据吞吐量大,32位33 MHz时峰值达132 MB/s。

因此,利用PCI接口实现数据交换是提高数据采集和处理性能的有效途径。

1 硬件设计
多串口扩展卡系统的硬件有两大部分组成:一是基于FPGA的PCI总线接口的模块,二是UART的扩展和通信模块。

系统总体硬件框图如图1所示。

图1 系统总体框
1.1 PCI总线接口模块
利用Lattice公司提供的PCI开源接口IP—PCI target32,并将其固化到FPGA中,完成对PCI总线的地址译码、空间配置、奇偶校验等操作[2]。

该IP工作在从(Slave)模式,满足PCI 2.2规范,工作频率为33 MHz,32位的数据总线可以充分利用CPU带宽,传送/接收更多数据,并提供两个基地址寄存器(I/O和存储地址),读写模式可分为单周期(Single)和突发(Brust)模式两种。

收稿日期:2008-09-25。

作者简介:王 智(1983-),男,硕士研究生,主要研究方向为嵌入式系统设计;杨瑞峰(1969-),男,教授,主要研究方向为测控技术及仪器;杭晔(1982-),男,工程师,主要研究方向为嵌入式系统设计。

45
顶层模块中以PCI_开头的引脚为PCI总线的前端接口部分,在PCI 2.2规范中有其所对应的唯一引脚,用来完成对PCI总线数据传输,接口逻辑控制,系统复位等功能,但PCI target32 IP核,并不支持报错功能,所以总线定义中的PERR#和SERR#引脚并未在顶层模块中定义,前端接口与总线相连接时,只需要与对应的PCI金手指引脚相连接起来即可。

后端引脚为逻辑控制部分,具体功能如表1所示。

在本设计中,后端引脚用来和UART串口扩展芯片以及FIFO相连,用来控制传输过程的逻辑和时序,保证数据的完整性和有效性。

表1 顶层引脚说明
引脚名称 信号方向 引脚定义
BKEND_AD OUT 20位地址总线
BKEND_DAT Bi-Dir 32为数据总线
BE_L OUT 字节允许,BE3,BE0
分别表示最高,最低
字节 BASE_REGION0_L OUT 基地址使能,由基地
址寄存器1编码决定BASE_REGION1_L OUT 基地址使能,由基地
址寄存器0编码决定R_W_L OUT 读/写预状态信号 DATA_WRITE_L OUT 写使能信号
DATA_READ_L OUT 读使能信号 READY_L INPUT 数据准备好信号 DATA_STOP_L INPUT 数据停止信号
BKEND_INT_L INPUT 中断信号
BKEND_ABORT_L INPUT 终止信号
1.2 UART扩展模块
在本系统中UART扩展是比较重要的一部分,设计中选取了EXAR公司的专用串口扩展芯片ST16C654,该芯片可以完成4通道串口转并口功能,符合16550规范,兼容3.3 V和5 V电平,从而使设计更加简化,不必要在FPGA中再添加对数据的串并转换,并且每个通道内置了64字节的输入/输出FIFO和单独的波特率发生器BRG。

在外部晶振为14.7456 MHz 时,通过对寄存器MCR[7]的操作,来完成对根据波特率发生器的预分频的设置。

当MCR[7]=0时,预分频值为1;当MCR[7]=1时,预分频值为4。

根据计算公式求得波特率= (14.7456 MHz/预分频系数)/(串行数据速率×16),可算出最大波特率为912.6 KB/s,从而保证了与串口RS422/485通信时,高传输率的要求。

串口扩展模块在工作时,数据通过中断的方式与外设进行通信,当主机需要发送数据时,只需要将数据先写入发送FIFO,然后通过中断方式通知外设,当下位机确定接受数据时,主机便将数据发送到UART。

同理,下位机数据通过串口传输到ST16C654时,首先送入读FIFO中,然后产生中断请求,向主机指示该数据已可使用,上位机通过程序进行判断,如果其他串口并未占用总线,就可以通过并口的形式读入8位数据。

MAX490与ST16C654硬件连接如图2所示,本文只给出了一路UART和主芯片接口,其他几路类似。

1.3 FIFO模块
在实践检验过程中,发现串口扩展芯片自带的读取/写入FIFO在很多时候,并不能满足实际需要,会出现丢码和误码的现象。

所以需要在FPGA中添加用VERILOG语言描述的FIFO模块,用来补充缓冲字深不足的缺陷。

本扩展卡需要在FPGA内添加8个异步带复位端的FIFO实例(inst),分别为每个通道提供两路输入/输出缓冲器,字深为512words,位数为8,满足8位串口数据的并行输入输出。

读请求信号rdreq 与写请求信号wrreq分别与PCI接口IP中的DATA_READ_L、DATA_WRITE_L取反相连,并通过判断满标志(full)和空标志(empty)引脚来确定是否需要对FIFO清零或报警。

以读取FIFO为例,当full标志位产生时,产生中断信号使BKEND_INT_L信号有效,同时将wrreq引脚置低,进行FIFO的读保护,并读取数据,待有效数据读取完毕后,FIFO通过aclr
置高,异步清零。

图2 ST16C654与MAX490接口原理
2 软件设计
通常开发PCI设备驱动程序有多种模式,在windows2000/XP环境下,主要采用WDM模式。

本设计采用NuMega Lab公司开发的DriveStudio驱动程序开发平台,编写了符合WDM模式的驱动程序 [3]。

通过驱动程序的编写,达到控制设备以端口读写操作的方式完成各种数据的传输,并在驱动程序中实现设备的即插即用(PnP)功能。

利用DriveStudio中的工具DriveWorks V2.7生成PCI驱动程序向导的过程中,特别需要注意以下两点:
(1)中选中PCI设备时,在VendorID和DeviceID中分别输入厂商号和设备号,还需要填入PCI SubsystemID和PCI Revision ID。

这些数据在PCI接口IP中,由专门的配制寄存器Reg00h来写入,其中Reg00h[31-16]位为DeviceID值,用户需要自行定义,而Reg[15-0]为VendorID,默认值为1022h (AMD公司)。

(2)在定义空间类型的过程中,首先要在Resources中添加资源,在name中输入变量名,并在PCI Base Address中添0~5的序列号,其值与BAR0~BAR5一一对应。

在设置中断
46
的对话框中,在name中写入中断服务程序的名称选中创建中断服务程序(ISR),使之成为设备类的中断成员函数。

其次选中Buffer以选取读写方式,用来描述与I/O相关的数据缓冲区。

本设计需要大量快速的数据传输,所以选取Direct I/O方式。

DriverWorks中的KpciConfiguration类集成访问PCI设备配置空间的所有操作,以下代码是部分初始化该类的实例。

KpciConfiguration Pcic(m_configur.TopOfStack());/* m_configur.TopOfStack()表示返回当前设备堆栈顶部的设备对象*/
初始化完成后可以直接调用成员函数ReadHeader()或者WriteHeader()来访问所有的配制寄存器。

在编写串口驱动方面,其工作流程如下:首先设置好串口参数,再打开串口监测工作线程,监测工作线程监测到串口接收到的数据、流控制事件或其他串口事件后,就以消息的方式通知主程序,激发消息处理函数来进行数据处理,这是对接收数据而言;发送数据可直接向串口发送[4]。

以下介绍几个用到的串口驱动函数:
BOOL InitPort(CWnd* pPortOwner,UINT portnr,UINT baud,char parity,UINT databits)
这个函数是用来初始化串口的,即设置串口通信参数,需要打开的串口号、波特率、奇偶校验方式、数据位,这里还可以用来进行事件的设定。

如果串口初始化成功,就返回TRUE,若串口被其他设备占用、不存在或存在其他故障就返回FALSE,编程者可以在这儿提示串口操作是否成功。

BOOL StartMonitoring()
{……
If(!(m_Thread=AfxBeginThread
(CommThread,this)))
Return FALSE;
TRACE(“Thread started\n”);
Return TRUE;
}
调用StartMonitoring()来启动串口监视线程。

线程启动成功,返回TRUE。

参考文献
[1] 徐志春. 基于PCI总线的多串口通信适配卡设计[J]. 微计算机信
息,2007(23):294-296.
[2] 夏宇闻. Verilog 数字系统设计教程[M]. 北京: 北京航空航天大
学出版社,2003:56-59.
[3] 杜欣. PCI传输卡的WDM驱动程序设计[J]. 计算机应用,2003(12):
22-24.
[4] 龚建伟,熊光明. Visual C++/Turbo C 串口通信编程实践[M]. 北
京: 电子工业出版社,2004:17-19.
(上接第41页)
3 软件设计
系统的软件是整个系统的灵魂,软件性能的好坏直接影响着系统的性能。

在系统设计时宜采用软硬件协同规划设计,以提高系统整体性能的完整性和可靠性。

系统软件设计与调试的过程就是整个系统真正实现的过程,在车载智能天线跟踪系统的设计中,由于天线及控制器使用环境较为恶劣,各种干扰较多,在编写程序代码中尤其要注意软件的可靠性、稳定性和实时性设计,以增强系统的鲁棒性。

在增强软件抗干扰措施中,如增加数字滤波;使用“看门狗”;增加软件冗余,增设软件陷阱等等。

除此之外,在保证软件编写的规范性基础上,本系统软件增强了软件在结构、功能和数据上的完整性设计。

系统软件流程图如图3所示。

图3 系统软件流程 4 结语
将车载智能天线跟踪系统装在三维运动模拟器上进行试验,横滚系统的跟踪角度误差控制在±0.5º以内,俯仰系统的跟踪角度误差控制在±0.6º以内,方位系统的跟踪角度误差能控制在±1.4º以内。

由此可见横滚和俯仰都能满足性能指标,而方位的实际的误差值比理论值±0.6º相比存在一定差异,其原因是传感器受周围环境与温度的影响造成的。

试验结果表明系统基本达到了预期的指标,验证了基于LPC 2129的车载智能天线跟踪系统的可行性和有效性。

参考文献
[1] llcev St D. Airborne Satellite Antenna Mount and Tracking
Systems[J]. IEEE Africon, 2004, 2(7):289-295.
[2] 贾可亮. 车载式卫星天线控制器跟踪控制方法的研究[D].济南:山
东师范大学,2001.
[3] 罗致. 基于ARM处理器的车载GPS定位终端[D]. 武汉:华中科技大
学,2006.
[4] 韩文泽,董旭峰. 卫星地面站天线的最优跟踪技术[J]. 天线技术,
2006,35(5):41-42.
[5] 生力松,余达太,李果,等. 车载天线跟踪系统的智能控制[J]. 计
算机测量与控制, 2006,14(2): 212-216.
47。

相关文档
最新文档