王心鹏,门雅彬,顾季源,李永军
(国家海洋技术中心,天津 300112)
串口扩展芯片XR16L784在水文监测系统中的应用
王心鹏,门雅彬,顾季源,李永军
(国家海洋技术中心,天津 300112)
为了解决系统设计中单片机串口数量较少不能同时满足多路串行通信的问题,通过对现有串口扩展技术进行对比分析,并针对水文监测系统的应用需求,提出了基于芯片XR16L784完成串口扩展的设计方案;介绍了串口扩展芯片XR16L784的硬件设计和软件编程的具体实现方法,并在水文监测系统上进行了实验验证;结果表明:串口扩展芯片XR16L784可有效实现多个串口扩充,扩充后的串口通道能够在不同波特率下稳定、可靠实现数据双向传输;串口扩展方案解决了在多路串行通信系统中系统主控单元串口数量有限的问题,在水文监测系统中体现出很好的实用价值。
串口扩展;水文监测;RS232;XR16L784
海洋的水体温度、电导率、深度是研究海洋不同水层水文信息的3个基本物理量,根据以上参数可计算出海水密度、声速等其它各种物理参数,这些数据可用于研究海水的物理化学性质、水层结构和水团运动状况,对研究海洋水文信息具有重要意义,因此对其监测十分重要[1]。水文监测系统,可完成对海水温度、电导率、深度的实时监测,其工作原理如下:系统通过温度和电导率传感器对水文数据进行实时采集,使用GPS模块获取位置信息,将采集的数据与时间、经纬度信息打包成数据帧,在一定周期内按照设定的工作模式通过数传电台或铱星通信方式向外发送。系统可设定为近岸或离岸模式,近岸模式下用户可通过数传电台接收数据并可向系统发送控制指令,离岸模式下用户可使用铱星通信方式通过Email接收数据[2-3],其工作原理如图1所示。该系统以C8051F020单片机为主控芯片,在系统平台上集成了温度及电导率传感器、铱星通信模块、GPS模块、数传电台和PC通讯等异步串行通信设备,其中PC通讯用于系统使用前的外部自检。由图1可知,系统共需要6个串口。由于单片机自身只有2个UART接口,远不能满足系统设计需求,因此需要对串口进行扩展。
图1 水文监测系统原理框图
图2 串口扩展芯片连接框图
串口扩展是根据系统设计的需要,将原有串口扩展为多个同类型或不同类型(RS232、RS422、RS485)的串口,以便与不同接口的计算机或设备进行串行通信。常用的串口扩展方法有软件模拟法[4]和硬件法[5-6],软件模拟法可根据串行通讯的传送格式,利用定时器和主机的I/O口来模拟串行通讯时序,达到扩展串口的目的。但其具有一定局限性:1)不能实现高波特率通讯时的可靠数据传输;2)串口扩展在数量上难以保证。硬件法通常指在电路设计时使用专用扩展芯片,该方法通过对芯片进行编程实现多路串口扩展,具有工作稳定、实时性好、可靠性高等特点。这里选用EXAR公司生产的XR16L784芯片,通过合理搭建外围电路并编写配置程序,实现多路串口扩展的功能,该电路可移植性高、串口扩展能力强、便于配置。
1.1 芯片简介
XR16L784芯片是一款四通道通用异步收发器,能够满足通信系统中的高带宽需求。它具有的全局中断源寄存器为4个通道提供了完备的中断状态指示,每个UART通道都具有与16C550兼容的配置寄存器组、64字节发送和接收FIFO、可编程发送和接收FIFO级触发器和计数器,RTS/ CTS或DTR/ DSR与可编程迟滞自动硬件流控制、自动软件(XON / XOFF)流控制、红外数据编码器/解码器以及一个16位通用定时器/计数器。该芯片具有软件或硬件复位、UART通道选择、同步向所有通道写数据、中断输出、晶振设置、可编程波特率生成器、自动485半双工流控制、红外模式、带有唤醒指示的休眠模式等功能,能够满足硬件设计的各种需求[7]。
1.2 芯片寄存器介绍
XR16L784芯片集成了四通道增强型16550UART,一个通知16位定时器/计数器和片上振荡器。芯片的配置寄存器组包括4个连续的中断源寄存器,可提供4个UARTS的中断状态。每个UART通道具有用于自身的运行控制、状态报告、数据传输的配置寄存器,这些寄存器被映射到具有256字节的数据存储器地址空间,可由数据总线直接访问。表1给出了一些常用寄存器的介绍。
表1 常用寄存器功能介绍
由于系统需要较强的控制和数据处理能力,因此需要选用性能稳定且软件开发过程中难度低的MCU,经对比选型最终选用Silicon Laboratories公司的高性能微控制器C8051F020作为主控芯片。它具有与8051兼容的CIP-51微控制器内核,是完整的混合信号片上系统SoC芯片[8]。使用两片MAXIM公司生产的MAX3232芯片完成四路收发数据的TTL电平与RS232电平转换,并将其与4个数据接口相连接,其硬件框图如图2所示。
C8051F020单片机具有丰富的IO资源和处理能力,选择P6和P7端口作为XR16L784芯片的数据和地址总线,为XR16L784的数据读写和寻址所用。将XR16L784芯片的INT引脚与单片机的中断引脚P1.0相连,当单片机检测到中断信号时能够进入相应的中断服务程序,将RST引脚与一个IO口相连以满足芯片的复位需要,将IOR和IOW与单片机的P4.6和P4.7(RD和WR)引脚相连以控制芯片实时读写状态,片选引脚CS在使用时由单片机进行控制。由于本设计中不会使用芯片的红外模式,因此将ENIR引脚接低电平。将18/68引脚连接高电平使芯片工作在INTEL接口模式下。选用频率为1.843 2 MHz的晶振作为芯片外部时钟输入,其电路连接如图3所示。
图3 串口扩展芯片外围电路
为了能充分利用芯片的4个UART通道,保证可靠稳定的数据传输,需要对单片机编程[9-10]以完成对串口扩展芯片的配置。
3.1 芯片初始化
1) 通过在RST引脚上加一个超过100 ms的低脉冲信号来实现XR16L784芯片的硬件可靠复位,此时其内部各寄存器均恢复至缺省状态;
2)选择外部时钟作为芯片的时钟源,设置数据传输波特率;
3)对LCR寄存器配置设置收发的字节长度为8位且无校验位;
4)配置FCTR寄存器选择触发表,通过RXTRG和TXTRG寄存器设置触发级,这里将其设为16个字节;
6)设置FCR寄存器使能发送和接收FIFO,配置IER寄存器使能发送空中断和接收中断;
7)配置TIMERMSB和TIMERLSB寄存器以设定定时器初始值,通过TIMERCNTL寄存器实现定时器的开启和关断。在实际应用中,利用定时器可对每个UART通道是否正常收发数据做出判断。
3.2 中断服务程序
XR16L784芯片INT引脚上的电平状态如表2所示,单片机通过其外部中断引脚响应该信号,从而进入图4所示的XR16L784中断服务程序。
表2 XR16L784芯片INT引脚电平状态表
程序的执行过程如下:
1)通过XR16L784芯片内部的INT0、INT1、INT2寄存器状态判断本次中断的类型; UART中断或定时器中断;
2)若为UART中断,则判断中断的UART通道编号和类型,即接收或发送中断;
3)接收中断的处理流程:首先读取LSR寄存器清除该中断,然后读取RXCNT寄存器以获得接收FIFO中字节数,最后将RHR中的每字节数据依次存入接收缓冲区中;
4)发送中断的处理流程:首先读取ISR寄存器清除该中断,然后将待发送缓冲区中的数据依次写入该通道的THR寄存器,当数据量超过FIFO中的设定值时停止写入;
5)当确认4个UART通道均没有发送或接收中断时,跳出UART中断循环。若本次中断为定时器中断,则程序完成相应的定时计数操作。
6)待确认没有中断信号后,本次中断服务程序结束并返回主程序。
图4 中断服务程序软件流程图
3.3 中断服务程序软件代码
void XR16L784_isr(void)
{
uchar temp_reg, int0_reg,int1_reg,int2_reg;
//读取INT0、INT1、INT2寄存器的状态
int0_reg=XR16L784_INT0; int1_reg=XR16L784_INT1; int2_reg=XR16L784_INT2;
EX0=0;//关闭单片机外部中断
while(int0_reg) //UART中断
{
if(int0_reg&0x01) { // UART0通道中断
switch(int1_reg&0x07) { //判断中断类型
case 1: case 2: //接收中断
LSR_PORT(0);//读ISR清除中断,其中0表示UART通道编号
temp_reg=RXCNT_PORT(0);//读取FIFO中的数据数量
while(temp_reg) {//将FIFO中的数据依次存入接收缓冲区
temp_reg--; buffer_rx0[rx0_start]=RHR_PORT(0);
rx0_start++; rx0_start%=RX0_SIZE; } break;
case 3: //发送中断
ISR_PORT(0); //读ISR清除TXRDY中断
temp_reg=0;
while(tx0_start!=tx0_end) {
THR_PORT(0)=buffer_tx0[tx0_end];//发送缓冲区数据写入THR
tx0_end++; tx0_end%=TX0_SIZE; temp_reg++;
if(temp_reg>16) break; } //数据量超过FIFO中设定值时停止写入
break;
default: break;}
}
// UART1、UART2、UART3收发数据代码与UART0形式一致
int0_reg=XR16L784_INT0; int1_reg=XR16L784_INT1; int2_reg=XR16L784_INT2; }
if((int1_reg&0x07)==0x07) { //定时器中断
XR16L784_TIME_CTRL; //清除定时器中断
//完成相应的定时计数操作
if(uart0_counter != 0) uart0_counter--; if(uart1_counter != 0) uart1_counter--;
if(uart2_counter != 0) uart2_counter--; if(uart3_counter != 0) uart3_counter--; }
EX0=1; //打开单片机外部中断
}
在水文监测系统设计中,将温度和电导率传感器与单片机自身的两个UART通道相连,将铱星通信模块、GPS模块、数传电台、PC通讯分别与硬件设计中的接口1至4相连,通过芯片的UART0至UART3通道实现与MCU的双向数据传输。数据帧格式由测试系统标号、帧标号、温度数据、电导率数据、纬度、经度、时间信息七部分组成,发送周期依工作模式而定。将相应UART通道的计时时间设定为2分钟,若在该时间内未收到数据传输则认为通道故障,需对串口扩展芯片重新复位。
在自检模式下PC会向系统的MCU发送特定指令,系统收到该指令后回传应答数据以表示其工作状态;在近岸工作模式下,系统将采集的数据通过数传电台直接传输至岸边接收设备,接收设备也可通过发送指令对系统采集发送实测数据的周期进行调整;在离岸模式下,系统将采集的数据通过铱星模块以小时为周期发送给铱星,铱星转发数据后通过电子邮件方式传输给用户。系统在各种工作状态下的数据收发情况如表3所示,实验结果表明:系统在离岸模式下铱星通信数据接收完整,数据帧无丢失。系统在近岸模式下可通过数传电台与近岸控制端进行双向通信,完成数据接收及系统远程设定,但其偶有数据丢失的现象,经合理分析原因为无线通信链路上的电磁环境变化所致。由此可见,通过使用增加硬件专用芯片来实现串口扩展的方式,系统工作正常稳定,在不同波特率下均能正常完成数据双向传输、效果较好。
表3 水文监测系统工作情况
由于使用了专用串口扩展芯片,并采用中断方式设计该部分电路,系统单片机在处理多路UART数据时并没有耗费过多的内部资源,从而保证了设备工作运行的实时性与可靠性,水文监测系统在实际应用中能够高效稳定的完成测量功能。由于应用的要求,本文只给出了RS-232通信的实例,通过对寄存器进行相应设置,并且使用RS-232转RS-422 /RS485的转换芯片也可实现RS-422 /RS485通信。本文中论述的采用XR16L784扩展串口的硬件及软件设计方法为串口需求量大、可靠性要求高的系统设计提供了良好的解决方案和参考设计。
[1] 李 真, 艾 波, 陶华学. 基于GIS的海洋水文信息系统的设计与实现[J]. 海洋地质动态, 2007, 23(8): 35-38.
[2] 刘解华, 杨东凯, 邢兆栋, 等. 基于PC104工控机/GPS/铱星通信的海洋监测系统[J]. 计算机测量与控制, 2005, 13(11): 1161-1163.
[3] 琚汝强, 刘敬彪, 于海滨. 基于铱星的浮标远程监测与数据传输系统[J]. 电子技术应用, 2010, 36(12): 36-38.
[4] 郑志雄, 胡爱兰. LPC1768的全双工UART的软件模拟实现[J]. 单片机与嵌入式系统应用, 2013, 13(6): 25-28.
[5] 张 伟, 李文魁, 陈永冰. 基于GM814X的单片机串口扩展及其应用[J]. 电子技术应用, 2012, 38(9): 96-99.
[6] 范开喜, 王 庆, 于先文. 嵌入式组合导航系统中多路异步串口系统的设计[J]. 测控技术, 2010, 29(8): 39-42.
[7] XR16L784. Datasheet[Z]. Exar Corporation, 2005: 1-49.
[8] C8051F020. Datasheet[Z]. Silicon Laboratories Corporation, 2012: 161-248.
[9] 尹德淳. C函数速查手册[M]. 北京:人民邮电出版社, 2009.
[10] Brian Kernighen, Dennis M Ritch. The C programming language(2nd edition)[M]. New Jersey: Prentice Hall, 1988: 100-370.
Application of Serial-Port Expansion Chip XR16L784 in Hydrology Monitoring System
Wang Xinpeng, Men Yabin, Gu Jiyuan, Li Yongjun
(National Ocean Technology Center, Tianjin 300112,China)
In order to solve the problem that the small number of serial-ports of single-chip can not meet multiple serial communication simultaneously in system design, by comparative analysis of the existing serial-port expansion technology and to meet the needs of hydrology monitoring system, the design scheme of serial-port expansion based on chip XR16L784 is put forward. The specific implementation method of hardware design and software programming of serial-port expansion chip XR16L784 is introduced, and it is verified in hydrology monitoring system experimentally. The result shows that multiple serial-ports expansion can be implemented by chip XR16L784 effectively, data can be transmitted and received stably and reliably at different baud rates in expanded serial-port channel. The issue of confined serial-port number within micro control unit is solved by the scheme of serial-port expansion in the multi-channel serial communication system, reflecting great practical value in the hydrology monitoring system.
serial-port expansion; hydrology monitoring; RS232; XR16L784
2015-08-27;
2015-11-04。
天津市青年基金项目(12JCQNJC02400)。
王心鹏(1983-),男,天津人,工学硕士,助理工程师,主要从事嵌入式系统,电路设计,无线通信方向的研究。
1671-4598(2016)03-0014-04
10.16526/j.cnki.11-4762/tp.2016.03.005
TP334
A