基于LocalBus总线的多路RS422串口通信方法与流程

文档序号:11864623阅读:2457来源:国知局
基于Local Bus总线的多路RS422串口通信方法与流程

本发明涉及实时嵌入式通信技术领域,特别是一种串口通信方法。



背景技术:

串口通信具有传输距离远、传输稳定、简单实用等特点,已被广泛应用于工业控制、数据采集、网络通信等领域。在这些应用领域中,有的系统往往需要实现多路串口通信来实现不同的控制和信息采集等不同的需求,例如将某一路串口用于采集数据,而另外一路串口用于发送控制命令等。另外,在基于串口的通信设备研发过程中,经常需要监视通信双方的数据收发交互情况,特别是在军用控制系统中,对于数据收发的准确性和实时性有着严格的要求,因此对于嵌入式实时系统还需要知道通信双方收发数据的准确时间,往往需要精确到毫秒甚至微秒级别。

在目前的嵌入式系统开发中,考虑到成本等各方面的因素,CPU本身提供了对于串口通信端口的支持,一般是支持一到二路串口的支持。因此,在需要多于两路串口的应用中,必须要在硬件中增加相关通信芯片来扩展串口。在CPU与扩展芯片之间的连接方式有基于GPIO的连接方式以及基于PCI或PCIe总线连接方式;其中,通过基于GPIO的连接方式去实现CPU与扩展芯片之间连接不仅存在软件工作量很大,而且在实时性方面要实现起来有难度;基于PCI或PCIe总线连接方式,则需要消耗PCI或PCIe总线资源。



技术实现要素:

本发明需要解决的技术问题是提供一种多路串口通信方法,能够便捷地实现实时嵌入式系统中的多路串口通信任务,在降低总线资源消耗的基础上,提高系统开发与调试效率。

为解决上述技术问题,本发明所采取的技术方案如下。

基于Local Bus总线的多路RS422串口通信方法, 该方法基于多路RS422串口通信装置以及实时操作系统VxWorks实现,多路RS422串口通信装置包括CPU最小系统、UART芯片、晶振电路以及N个RS422转换芯片,所述UART芯片与CPU最小系统之间通过Local Bus总线连接,UART芯片与RS422转换芯片之间通过差分信号线连接;晶振电路与UART芯片连接;

所述方法具体包括以下步骤:

A.CPU最小系统调用操作系统所规定的标准用户接口层API函数与上层应用相互通信;

B.设置UART芯片与CPU最小系统之间的Local Bus总线;

C.设置多路RS422驱动程序;

D.采用中断服务触发相应通道的RS422转换芯片进行数据通信。

上述基于Local Bus总线的多路RS422串口通信方法,步骤B中的Local Bus总线包括控制总线、地址总线和数据总线,控制总线包括LCS片选信号线、INT中断控制线、ER/W读写使能信号以及RST复位信号线。

上述基于Local Bus总线的多路RS422串口通信方法,步骤C具体包括以下步骤:

C1.初始化UART芯片参数;

C2.设置每个通道设备的中断连接;

C3.RS422驱动函数注册;

C4.在VxWorks操作系统中为每个通道创建相应设备并与相应的RS422转换芯片关联。

上述基于Local Bus总线的多路RS422串口通信方法,步骤C1中所述的UART芯片参数包括通信模式、中断号、波特率以及晶振参数。

上述基于Local Bus总线的多路RS422串口通信方法,步骤C3中所述的RS422驱动函数包括Open,Close,Read,Write和Ioctrl函数。

上述基于Local Bus总线的多路RS422串口通信方法,步骤C4具体包括以下步骤:

C41.为每个通道设置不同的中断号;

C42.关联中断号与中断函数;

C43.调用RS422驱动函数注册到操作系统中;

C44.与相应的RS422转换芯片关联。

上述基于Local Bus总线的多路RS422串口通信方法,步骤D所述中断服务具体包括以下步骤:

D1.获取引发中断的通道号i;

D2.关闭i通道中断;

D3.读取UART芯片i通道的IIS状态寄存器,获取UART芯片中的中断类型;

D4.根据中断类型进行相应数据处理;

D5.数据处理完成后,打开i通道中断。

上述基于Local Bus总线的多路RS422串口通信方法,步骤D4包括以下内容:

D41.判断中断信号是否异常,如中断信号异常,进行异常处理;如中断信号正常,则进行步骤D42;

D42.CPU最小系统指令判断是否接收有效中断,如是,进行数据接收;如否,则进行步骤D43;

D43. CPU最小系统指令判断是否发送有效中断,如是,进行数据发送;如否,打开i通道中断。

由于采用了以上技术方案,本发明所取得技术进步如下。

本发明能够便捷地实现实时嵌入式系统中的多路串口通信任务,具有易于扩展、实时性强、软件开发工作量大幅减少的优点,能够满足系统多层次需求。另外,本发明的应用,能够在降低总线资源消耗的基础上,提高系统的开发与调试效率。

附图说明

图1为本发明的整体流程图;

图2为本发明所述多路RS422驱动设置的流程图;

图3为本发明所述中断服务程序的流程图。

具体实施方式

下面将结合附图和具体实施例对本发明进行进一步详细说明。

一种基于Local Bus总线的多路RS422串口通信方法, 该方法基于多路RS422串口通信装置以及实时操作系统VxWorks实现。

本发明中的多路RS422串口通信装置包括CPU最小系统、UART芯片、晶振电路以及N个RS422转换芯片, UART芯片与CPU最小系统之间通过Local Bus总线连接,UART芯片与RS422转换芯片之间通过差分信号线连接;晶振电路与UART芯片连接。

CPU最小系统即Local Bus控制器,用于控制Local Bus总线;本实施例中优选CS51单片机。UART 芯片完成数据收发的串、并转换。RS422转换芯片选择全双工高速RS422 通信接口转换芯片,具有输出短路保护功能以及接收失效保护功能,通过减少由长线引起的内部信号干扰来增加可靠通信的距离与速度。晶振电路用于为UART 芯片提供数据传送的时钟,

Local Bus总线也称为CPU总线, 根据高低位地址线序的差异,又可分为Motorola CPU总线和Intel CPU总线。由于Local Bus总线是直接从60X总线上通过桥片分出来的,所以它和60X总线是同步同频的,进行数据数据读写时与60X总线共享带宽,不需要内核提供额外的处理。

Local Bus总线包括三部分控制总线、地址总线和数据总线。

控制总线,包括LCS片选信号线、INT中断控制线、ER/W读写使能信号以及RST复位信号线。LCS片选信号线用于选择相应的UART芯片;由于多路RS422串口通信装置设置了N个 RS-422通道,则需要有N条不同的LCS片选信号线来连接CPU最小系统和UART芯片,因此每一条LCS片选信号线对应一个RS-422通道的选择;当关联某通道的片选信号为低电平时表示该通道被选中,即CPU最小系统可以对其进行读写操作。INT中断信号线用于在UART芯片中某通道的接收数据缓冲器接收到有效数据或者发送缓冲器满或其它异常事件产生时产生中断事件,告知CPU最小系统,然后由CPU最小系统产生中断响应;由于N个RS-422通道也需要有N条不同的中断信号线,不同的中断信号表示不同的UART芯片通道产生中断事件。ER/W读写使能信号,低电平有效,读写使能信号为低电平时,表示在进行读或者写操作,在异步传输模式下,它与片选信号线配合对读或者写数据进行采样。RST复位信号线实现UART芯片的复位。

地址总线用于选择UART芯片中的寄存器。由于UART芯片访问空间很小,只有8个寄存器地址,因此可以使用三根地址总线来连接CPU最小系统和UART芯片,当某通道片选信号变为低电平,即某通道被选定后,通过LA0~LA2来实现该通道中不同寄存器的访问,从而实现RS-422串口数据收发或其它工作。

数据总线用于实现CPU最小系统与UART芯片的数据传输,为双向数据传输。根据UART芯片模式,数据总线的数据位宽有8位或16位之分,根据数据位宽的多少,数据总线信号线也相应改变。当发送数据时,将CPU最小系统写入UART芯片发送FIFO 中的并行数据转换成串行数据,并通过RS422转换芯片发送出去;当接收数据时, 将RS422转换芯片接收到的外部串行数据转换成并行数据存入UART 芯片的接收FIFO 中, 供CPU读取。

多路RS422串口通信方法的整体流程如图1所示,具体包括以下步骤。

A.CPU最小系统调用操作系统所规定的标准用户接口层API函数与上层应用相互通信,为上层应用提供服务。

本发明的通信方法是基于实时操作系统VxWorks实现的,故以字符设备的形式向VxWorks操作系统的 I/O层注册读写和控制函数。其对上层应用注册的读写和控制函数如下:RS422Open:RS422设备打开函数,对应应用层接口函数open;RS422Close:RS422设备关闭函数,对应应用层接口函数close;RS422Read,:RS422设备字符读取函数,对应应用层接口函数read;RS422Write:RS422设备字符发送函数,对应应用层接口函数write;RS422Ioctrl:RS422设备控制函数,对应应用层接口函数ioctl函数。

如果是写操作,在I/O层调用write函数写设备时,RS422Write函数要主动调用底层RS422驱动程序的相关函数来发送字符数据。如果是读操作,RS422Read函数则直接在缓冲区中读取字符;当缓冲区为空时,如果是阻塞方式需要等待,如果是非阻塞方式则立即返回错误;该缓冲区的填充是由底层RS422驱动程序通过中断方式进行,当底层驱动接受到一个字符时,产生中断,然后提供回调函数将字符写入缓冲区中以供上层应用读取。

B.设置UART芯片与CPU最小系统之间的Local Bus总线。

C.设置多路RS422驱动程序。

C1.初始化UART芯片参数;UART芯片参数包括通信模式、中断号、波特率以及晶振参数。

C2.设置每个通道设备的中断连接。

C3.RS422驱动函数注册;RS422驱动函数包括Open,Close,Read,Write和Ioctrl函数。

C4.在VxWorks操作系统中为每个通道创建相应设备,并与相应的RS422转换芯片关联。

步骤C的流程如图2所示,具体包括以下操作。

C41.为每个通道设置不同的中断号。

C42.关联中断号与中断函数。

C43.调用RS422驱动函数注册到操作系统中。

C44.与相应的RS422转换芯片关联。

D.采用中断服务触发相应通道的RS422转换芯片进行数据通信。主要包括向上层提供回调函数注册功能,例如启动发送数据函数;完成不同通道的通信设置,主要是设置地址空间映射,通过访问不同地址区间实现对不同通道的访问;控制通道进行字符接收和发送及其他硬件配置工作。本发明通过中断方式迸行数据的接收和发送,当然也可采用轮询方式进行数据接收和发送。

为实现回调函数的注册,定义数据结构为RS422DRV_FUNCS结构体,该结构体中所有成员都是函数指针,RS422转换芯片的设置对应函数完成相应功能,并将这些函数地址对RS422DRV_FUNCS结构体进行初始化,然后通知给UART芯片。

地址空间映射是指将Local Bus总线设备的访问转换到CPU最小系统的内存空间中。Local Bus内部事务地址只能为32位,所以所有片选必须落在4G窗口之内。当一个内存事务被指派到LBC上时,内部事务地址就跟每个BANK的地址信息相比较,相应的芯片就跟该BANK关联起来,直到事务结束。对应每个BANK的寄存器主要有两个,一个是Base Register(缩称BR),BR寄存器包含BANK所对应的基地址和类型;另外一个是Option Register(缩称OR),OR寄存器主要设置BANK的大小和访问属性。通过对Local Bus寄存器进行设置后,便能通过访问特定地址空间实现挂在总线上设备的片选和其它操作。

其中,步骤D中的中断服务流程如图3所示,具体包括以下操作。

D1.获取引发中断的通道号i;

D2.关闭i通道中断;

D3.读取UART芯片i通道的IIS状态寄存器,获取UART芯片中的中断类型;

D4.根据中断类型进行相应数据处理;

D41.判断中断信号是否异常,如中断信号异常,进行异常处理并恢复中断状态;如中断信号正常,则进行步骤D42;

D42. CPU最小系统指令判断是否接收有效中断,如是,进行数据接收,将UART芯片FIFO中的数据读入到系统中,然后再调用回调函数将数据放到CPU最小系统相应的缓存中;如否,则进行步骤D43;

D43. CPU最小系统指令判断是否发送有效中断,如是,进行数据发送UART芯片的发送寄存器发送数据;如否,打开i通道中断。

D5.数据处理完成后,打开i通道中断,继续等待下一个中断信号。

本发明应用过程中,只需重复步骤D即可,即当有读/写操作请求时,采用中断服务触发相应通道的RS422转换芯片进行数据通信即可。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1