嵌入式实时操作系统VxWorks中PCI串口扩展卡的通信实现
秦涛
生成PDF 清样下载 引用

复制成功

导出题录

参考文献( GB/T 7714-2015 ) 复制

秦涛,. 嵌入式实时操作系统VxWorks中PCI串口扩展卡的通信实现[J]. 无线电研究,2022.7. DOI:10.12721/ccn.2022.157064.
摘要:
本文介绍了嵌入式实时操作系统VxWorks的性能特点,以及其开发工具Tornado的组成和串口通信的基本原理。并针对VxWorks嵌入式系统设备对多串口通信的需求,通过PCI串口扩展卡PMSP-8的通信实现过程,包括硬件搭建和驱动软件开发,并给出了部分驱动程序的示例代码,经过系统测试和结果分析表明,扩展后的多串口通讯系统具有良好的可靠性和实时性。
关键词: VxWorks嵌入式实时操作系统串口扩展多串口通信
DOI:10.12721/ccn.2022.157064
基金资助:

1 引言

在当今信息化时代背景下,多个设备互连的实时信息控制系统已十分常见,一般涉及主控系统与多个设备之间的信息通讯。其通讯方式一般有网络通讯、并口通讯、串口通讯、Can总线通讯、1553B总线通讯等。这些通讯方式各有其优缺点,应用场合也有着不同,其中串口通讯方式以可靠性高、抗干扰性强,且开发难度较低等特点,被广泛地应用于设备间的信息通讯中。嵌入式实时操作系统VxWorks以其高可靠性,微内核,可裁减性以及高效的实时任务调度、中断管理等优点,在航空、航天、军事、医疗、通信等领域已占据半壁江山,成为首屈一指的实时嵌入式操作系统。本文设计了一种基于VxWorks的多个PCI型串口通讯系统,讲述了其硬件配置,并针对PCI多串口驱动程序进行修改和设计,最后通过测试验证了系统的可靠性和实时性。

2 VxWorks系统及开发工具Tornado简介

VxWorks是由美国风河公司(Wind River Systems,Inc.)开发的一套具有微内核、高性能、可根据用户需要而进行裁剪和组合的实时操作系统,其开放式的结构和广泛的标准支持,使用户根据自身的要求就可以简单的设计出符合需要的操作系统。Tornado是VxWorks系统的开发工具,由三个高度集成的部分组成: Tornado工具,一整套强有力的交叉开发工具;VxWorks运行系统,是运行在目标机上的高性能、可裁剪的实时操作系统;连接目标机和宿主机的通信选项,包含以太网、串行线路、在线仿真等。另外Tornado 能够支持 Windows、Unix等流行的工作平台和PowerPC、X86、ARM等几乎所有的目标处理器,所提供的工具几乎可用于所有目标机。

3 串口通信基本原理

串口在嵌入式系统当中是一类非常典型和重要的数据通信接口, 其本质功能是作为 CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位;在接收数据时,串行的位被转换为字节数据。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。

在VxWorks中,对串口通信软件的设计时, 当串口初始化完成后, 在使用之前利用open() 打开相应串口, 然后进行配置。配置完成后, 依据串口打开时的读写标志, 调用函数write()、read()对串口进行只读操作、只写操作或同时进行读写操作。为提高数据接收的实时性,可采用中断方式,利用 VxWorks 提供的select函数的事件触发机制,将读串口的任务阻塞使其一直等待数据,当有数据来到的时候该任务会立刻自动响应,提高系统的实时性。

4 环境配置

4.1 硬件搭建

VxWorks系统的开发采用主机-目标机模式,如图 1 所示。在本案例的开发环境中,主机是一套Pentium(R)的台式机,目标机是盛博科技公司基于PC104 Plus总线的核心模块PMP,该核心模块采用超低功耗Intel Pentium M处理器,板上自带2个串口、网络接口以及其它接口。串口扩展卡也是盛博科技公司基于PC104 Plus 总线的串口卡PMSP-8,该串口卡具有8个PCI扩展串口,串口工作方式可在RS-232/RS-422/RS-485/TTL进行选择。开发调试过程中,主机与目标机通过网络进行通信。主机运行VxWorks的开发软件Tornado2.2 ,目标机运行VxWorks5.5,目标机的启动方式设定为从CF 卡启动。

1.png

图1  开发环境示意图

4.2 驱动程序设计

本案例的驱动程序是基于X86架构下pcPentium系列的BSP包为基础,结合16550串口驱动对其中sysSerial.c、pc.h、configNum.h等文件进行修改,在保留原本默认配置2个串口的前提下,对新扩展的8个PCI型串口进行申明、赋值和初始化,使10个串口均能够正常进行通信。

5 程序示例

5.1 修改BSP中的sysSerial.c文件

修改BSP中的sysSerial.c文件的头文件调用,使其包含以下头文件。

#include <vxWorks.h>

#include "iv.h"

#include <intLib.h>

#include <config.h>

#include < sysLib.h>

#include <drv/sio/ns16552Sio.h>

#include <drv/pci/pciConfigLib.h>

5.2 修改BSP里pc.h文件中串口通道宏定义

原文件中只提供了板载串口com1和com2这2个通道,扩展的PMSP-8串口卡提供8个PCI扩展串口后,加上原有的2个主板板载串口,因此串口总数目应为10。因为新扩展的8个串口用到的是PCI资源,串口地址和中断会随着系统中PCI设备数量的变化而改变,只能在系统运行中实时读取并赋值。但在此处为了保持数组完整性,保证sysSerial.c中的devParas数组顺利编译通过,临时对新增8个串口的地址和中断进行定义。

#define N UART CHANNELS  10

#define com3_BASE_ADR   0xd000

#define com4_BASE_ADR   0xd008

#define com5_BASE_ADR   0xd010

#define com6_BASE_ADR   0xd018

#define com7_BASE_ADR   0xd200

#define com8_BASE_ADR   0xd208

#define com9_BASE_ADR   0xd210

#define com10_BASE_ADR  0xd218

#define com1_INT_LVL   0x04

#define com2_INT_LVL   0x03

#define com3_INT_LVL   0xb0

#define com4_INT_LVL   0xb0

#define com5_INT_LVL   0xb0

#define com6_INT_LVL   0xb0

#define com7_INT_LVL   0x05

#define com8_INT_LVL   0x05

#define com9_INT_LVL   0x05

#define com10_INT_LVL  0x05

5.3 修改sysSerialHwInit函数

原文件中已默认设置了2个串口,其地址和中断都是固定的。但新添加的8个串口,由于使用的是PCI资源,所以不能像com1和com2的方式来设置地址和中断。需将原函数中的循环for (i = 0; i < N_UART_CHANNELS; i++)去掉,按照16550驱动的格式逐个通道进行初始化。以COM2串口为例,具体代码如下:

sysIntDisablePIC (devParas[1].intLevel);

ns16550Chan[1].regs = (UINT8 *)devParas[1].baseAdrs;

ns16550Chan[1].level = devParas[1].vector;

ns16550Chan[1].ier = 0;

ns16550Chan[1].lcr = 0;

ns16550Chan[1].pad1 = 0;

ns16550Chan[1].channelMode = 0;

ns16550Chan[1].regDelta = devParas[1].regSpace;

ns16550Chan[1].baudRate = 9600;

ns16550Chan[1].xtal = 1843200;

ns16550DevInit (&ns16550Chan[1]);

/* setup modem control lines */

*(UCHAR *)UART_REG(MCR,1) = 0x8;

5.4 修改configNum.h文件

在configNum.h文件中添加PCI串口的中断向量宏定义,具体代码如下:

#define INT_NUM_COM1  (INT_NUM_IRQ0 + COM1_INT_LVL)

#define INT_NUM_COM2  (INT_NUM_IRQ0 + COM2_INT_LVL)

#define INT_NUM_COM3  (INT_NUM_IRQ0 + COM3_INT_LVL)

#define INT_NUM_COM4  (INT_NUM_IRQ0 + COM4_INT_LVL)

#define INT_NUM_COM5  (INT_NUM_IRQ0 + COM5_INT_LVL)

#define INT_NUM_COM6  (INT_NUM_IRQ0 + COM6_INT_LVL)

#define INT_NUM_COM7  (INT_NUM_IRQ0 + COM7_INT_LVL)

#define INT_NUM_COM8  (INT_NUM_IRQ0 + COM8_INT_LVL)

#define INT_NUM_COM9  (INT_NUM_IRQ0 + COM9_INT_LVL)

#define INT_NUM_COM10  (INT_NUM_IRQ0 + COM10_INT_LVL)

5.5 修改Makefile文件

修改makefile文件,使其编译时调用ns16550Sio.o,代码如下:

MACH_EXTRA = ns16550Sio.o

6 通信测试

将目标机上的串口逐一与主机串口进行连接,主机在Windows下运行 “串口调试助手”,并设置好相应的参数;目标机在VxWorks系统下运行“串口收发测试程序”,然后对目标机上的串口进行通信检查。即通过主机和目标机之间收发数据的方式,将收到的数据与发送数据进行比较,检测数据收发是否正确。本案例经多次验证,串口工作稳定,数据传输正确,通信正常,表明本文所述的PCI多串口卡通信实现方法有效,所开发的多串口系统稳定可靠。

7 结束语

本文设计了VxWorks嵌入式系统中扩展多个PCI串口通信的实现过程,在驱动程序设计中列出了部分关键代码,因篇幅限制,不能详尽的列出所有代码。以PMSP-8多串口扩展卡为例,采用驱动直接访问硬件的方法,较为简洁和高效地解决了串口数量有限的问题,满足了项目中对多串口数量需求,最终经过了测试和验证,为日后类似问题的解决提供了一些参考和经验。

参 考 文 献

[1] SysCentreModuleTM/PMP技术手册 V2. 3[Z]. 盛博科技,2012.

[2] SysExpanModuleTM/PMSP-8技术手册V1.0[Z]. 盛博科技,2012.

[3]王洋.VxWorks嵌入式实时操作系统设备驱动与BSP开发设计[M].北京:航空航天大学出版社,2012.4-12,47-58.

[4]陈智育,温彦军,陈琪. VxWorks程序开发实践[M]. 北京:人民邮电出版社,2004.169-176.

》在线投稿系统

*文章题目:
*作者姓名:
*电子邮箱:
*通讯地址:
*联系方式:

  备      注:

*上传稿件:

支持上传.doc,.docx,.pdf,.txt,.wps文件

投稿须知:

1、审稿结果将于1~7个工作日以邮件告知,请注意查收(包含录用通知书、审稿意见、知网CNKI查重报告)。

2、提交投稿后,若7个工作日之内未接到录用通知,则说明该文章未被录用,请另投他刊。

3、凡投寄本刊稿件,如在内容上有侵权行为或不妥之处,均应文责自负。本刊有权对来稿进行文字编辑、加工和修改,如不同意,请附说明,以便妥善处理。

4、多作者文稿署名时须征得其他作者同意,排好先后次序,通知用稿后不再改动。

5、凡投往本刊稿件一经录用发表,其版权归本刊所有。

6、本刊已全文录入中国知网、万方、维普等数据库,如作者不同意被收录,请提前申明,未申明者,本刊一律视为同意被收录。

7、请勿一稿多投。