0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于VxWorks嵌入式实现多串口驱动的开发与通信设计

牵手一起梦 来源:网络整理 作者:佚名 2020-01-16 09:37 次阅读

VxWorks操作系统是美国Wind River公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),良好的持续发展能力、高性能的内核以及友好的用户开发环境,使其在嵌入式实时操作系统领域居于领先地位,广泛应用于现代的各种嵌入式计算机系统中,比如军事指挥系统、武器控制系统工业控制系统中。而在这些系统中,往往不是单个计算机的控制,而是多个计算机以及其他设备组成通信网络共同完成控制作用,因此,对于每一个嵌入式计算机除了连接必需的外设之外,还需要考虑计算机之间的通信。计算机间常用的通信方式是利用串行口来实现的。本文在VxWorks多串口通信的实现过程中未采用常见的标准VxWorks虚拟设备ttyDrv驱动方式,而是在用户的驱动程序中直接对硬件进行初始化,以中断方式进行串口通信。

1、环境及配置

VxWorks嵌入式开发采用图1所示的主机一目标机方式。

基于VxWorks嵌入式实现多串口驱动的开发与通信设计

其他硬件与本文关系不大,这里主要介绍串口卡,该卡是DIAMOND SYSTEM公司生产的EMERALD-MM-8型8串口扩展卡(以下简称EMM8),是基于2片ST16C554芯片的8串口集成板卡,每一路串口均可单独配置成符合RS-232C/RS-422A/RS-485协议规范,最高速率可达115.2kb/s。通用异步收发器UART)ST16C554用来扩展4路串口通道。每路通道各有一组16B的收发FIFO和移位寄存器,用来缓冲数据和串并转换。每个通道有12个8b内部寄存器,用来存放收发数据以及配置该串口的工作模式,需要在初始化时对各寄存器进行设置。本文根据工程的要求,将卡上的硬件跳线设好,如:各串口使用RS-232C协议,按照datasheet进行硬件跳线。其中J9的配置较为重要,如图2所示。

基于VxWorks嵌入式实现多串口驱动的开发与通信设计

D、C、B、A 四位表示base address,从data sheet中查表可知其跳线情况,以本项目为例,base address为0x300,则D、C、B、A分别为out、out、in、in,为1100。

2、3、4…15为该卡可用的中断号,要使用哪个中断就必须将其跳为in。本项目由于中断资源不足,只能用一个中断号即7号中断,因此只将7设为in。

CK为频段范围跳线,对ST16C554来说必须为in。

另外,EMM8在系统启动时会从板上的EEPROM 中读取各个端口的基本配置信息,主要是端口映射地址及分配的中断号,这些信息可以在启动后编程修改,但一般是固定的,因此只要在EEPROM 中配置一次并保存即可。

2、多串口驱动开发

2.1 I/O系统与串口设备驱动层次结构

I/O系统与串口设备驱动层次如图3所示。

基于VxWorks嵌入式实现多串口驱动的开发与通信设计

图3中最底层就是要编写的驱动程序。在这里主要完成对具体硬件的各种操作,以及与上层的接口。硬件驱动层上面是ttyDrv和tyLib。这一层比较特殊,是Vxworks专门为串口设备准备的一个虚拟驱动库,它把跟具体硬件无关的操作集成在了这一层中。这样用户只编写与硬件有关的驱动和跟这一层的接口函数即可。从总的结构讲,这2层都属于设备驱动的范畴。再上一层是I/O系统层,Vxworks的I/O系统向上提供了7个基本的I/O接口,供应用程序调用;向下提供与各种设备驱动程序的接口。I/O系统把应用程序跟驱动程序有机地连接起来。最顶层就是用户根据应用需要编写的应用程序。ttyDrv是一个虚拟设备驱动,用于处理I/O系统与底层实际设备驱动程序(可以是用户设计的驱动程序)之间的通信。使用ttyDrv控制串口是比较常见的串口驱动实现方式,实际上,直接对硬件进行初始化,以中断方式进行串口通信也是可行的方式,且更加靠近底层,可以更自由、高效的控制串口。

2.2 EMM8驱动开发

首先是对各串口的初始化和中断配置,初始化包括设置波特率以及数据格式。

在实际的工程应用中,需要8个串口共同使用一个中断(中断资源不足),实现8串口的全双工同时收发。难点在于使用同一个中断且不能丢数据,对于驱动使用同中断问题,关键是接收数据的中断服务程序ISR。经过探索,不论是否使用单中断,读EMM8卡上I/O RegisterMap表中的一个中断状态寄存器(interrupt statusregister),可以指出当时是哪一个串口收到数据,读出该串口的数据即可。但是这种实现方法经过测试在接收时丢数据。后经研究发现,中断状态寄存器并不一定在某一个时刻只有一个端口位发生跳转。即CPU收到中断后,有可能是几个串口“同时”收到数据,这是因为中断控制器将同一个CPU中断分给了不同的串口。从CPU端看来只有一个中断,但从各串口来讲,这个中断有可能是几个串口“同时”产生的。因此要对中断状态寄存器进行轮询,由发生跳转的串口位接收该串口的数据。修改后,经过编写用例测试,可以稳定地使用单中断接收数据且不影响数据的发送。

2.3 驱动测试

首先是各串口的功能测试,使用“串口调试助手”软件工具通过PC机与各目标机串口通信,收发数据,然后通过屏幕显示得到的数据,对比规定的预期结果,检测数据收发是否正确。经多次验证,工作稳定,通信正确。

综合测试:使用2台PC104分别安装STV2050CPU模块和EMM8多串口模块各1块,2台PC通过网口(交换机)连接2台PC104,2个EMM8通过8根RS-232双头串口线连接。2台PC通过网口使用tornado的shell工具下载启动程序。2台PC104分别称为1主机和2主机。测试方法是:1主机同时发送8串口的数据,2主机8串口接收并转发回1主机。1主机接收返回的数据,判断是否通信错误。经检验正确通信300000次无错,多次验证。完成对EMM8多串口通讯模块全双工收发的测试。

经过以上测试,表明本文所述的多串口卡通信实现方法有效,所开发模块稳定可靠。

3、结束语

本文介绍了VxWorks嵌入式系统中的多串口卡通信的实现过程,因篇幅有限,不能列出详尽代码。本文以EMM8为例,采用驱动直接访问硬件的方法,较为简洁、高效地解决了单中断多串口全双工通信的问题,满足了项目需求,并经过了测试和验收。为日后类似问题的解决提供了一些参考和经验。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4981

    文章

    18281

    浏览量

    288422
  • 操作系统
    +关注

    关注

    37

    文章

    6284

    浏览量

    121875
  • 串口
    +关注

    关注

    14

    文章

    1483

    浏览量

    74510
收藏 人收藏

    评论

    相关推荐

    嵌入式系统论文集锦

    的设计与实现.HTTP在嵌入式系统中的应用及扩展.Ipv6高级套接口的研究和实现.ISaGRAF在SUPMAX500组态软件中的应用.IXP1200中微引擎和StrongArm通信的技
    发表于 08-01 22:03

    Vxworks嵌入式软件

    Vxworks嵌入式软件
    发表于 08-20 08:32

    本人从事vxWorks bsp及驱动开发,狂爱嵌入式系统架构,望各...

    本人从事vxWorks bsp及驱动开发,狂爱嵌入式系统架构,望各路达人互相学习,共同进步
    发表于 12-28 15:02

    嵌入式软件专家-珠海

    嵌入式软件专家(工作地点:珠海)职位要求:1、七年以上使用嵌入式Linux和RTOS(掌握VxWorks/eCos/ucOS-II/T-Kernel中任何一种即可)开发
    发表于 03-06 15:13

    嵌入式VxWorks招聘

    本帖最后由 mcuris 于 2014-6-6 17:26 编辑 职位描述:基于PowerPC、ARM、X86等处理器平台的嵌入式操作系统VxWorks上的BSP、驱动程序和中间件开发
    发表于 06-06 14:00

    嵌入式通信

    与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面。标准化浏览器 Browser 等。  目前, 嵌入式操作系统的品种较多, 据统计, 仅用于信息 电器的
    发表于 07-05 10:01

    基于VxWorks和MPC860T的嵌入式串口通信服务器设计

    和应用的一个热点。论文以嵌入式实时操作系统VxWorks和高性能的嵌入式微处理器MPC860T为软硬件平台,提出了一个适合各种速率的串行设备接入IP网络的高性能通信服务器的解决方案,它
    发表于 07-19 07:07

    基于VxWorks和MPC860T的嵌入式串口通信服务器设计

    和应用的一个热点。论文以嵌入式实时操作系统VxWorks和高性能的嵌入式微处理器MPC860T为软硬件平台,提出了一个适合各种速率的串行设备接入IP网络的高性能通信服务器的解决方案,它
    发表于 07-25 08:05

    嵌入式操作系统VxWorks设备驱动程序该怎么设计?

    VxWorks是WindRiver公司开发的一种高性能的嵌入式实时操作系统(RTOS),以其优良的可靠性、开放性、实时性和易用性赢得了大量的客户。VxWorks是目前
    发表于 08-30 07:11

    如何去实现一种串口卡通信?求过程

    本文介绍了VxWorks嵌入式系统中的串口卡通信实现过程。
    发表于 06-03 07:08

    嵌入式实时操作系统VxWorks串口通信实现

    嵌入式实时操作系统VxWorks串口通信实现
    发表于 03-29 12:27 19次下载

    VxWorks 中基于RS485总线的串口通信协议及实现

    本文介绍了在嵌入式实时操作系统Vxworks下串行设备的驱动架构及实现,提出了一种基于RS-485总线的新型串口
    发表于 08-06 09:57 31次下载

    嵌入式VxWorks系统开发与应用_王学龙

    本书详细介绍了当今流行的嵌入式操作系统VxWorks,首先概括VxWorks操作系统的基本知识,如任务管理、任务间通信机制、内存管理以及定时管理等内容,说明了
    发表于 04-26 15:53 0次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>VxWorks</b>系统<b class='flag-5'>开发</b>与应用_王学龙

    嵌入式VxWorks实时操作系统中串口通信实现

    嵌入式VxWorks实时操作系统中串口通信实现
    发表于 08-31 16:03 7次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>VxWorks</b>实时操作系统中<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的<b class='flag-5'>实现</b>

    嵌入式VxWorks实时操作系统中串口通信实现

    嵌入式VxWorks实时操作系统中串口通信实现(通信网络基础课后答案第三章)-
    发表于 09-30 11:15 13次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>VxWorks</b>实时操作系统中<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的<b class='flag-5'>实现</b>