文献标识码: A
文章编号: 0258-7998(2012)09-0096-04
在嵌入式系统中,串行接口设备凭借其控制灵活、接口简单、占用系统资源少等优点而得到广泛应用。以单片机为核心的嵌入式系统,单片机常需要连接多个串行外设,如上位计算机、串口LCD、外部传感器等。通常单片机只提供一到两个异步串行通信接口(UART)。因此,为了实现多串口通信,必须对其串行口进行扩展。
常见的串口扩展方法有软件模拟法和硬件扩展法。软件模拟法通过两个通用I/O引脚、两个定时器和一个外部中断用软件模拟UART的发送/接收功能,成本低,易于实现,但占用资源多, 误码率高, 不适用于高速传输[1]。硬件扩展法主要有三种方式: (1)基于普通I/O口的串口扩展,如采用16C554芯片,其占用资源多,价格较贵; (2)基于USB的多串口扩展,如专用USB/串口转换器,可扩展最多16路串口,性能可靠,但体积大,且价格随串口数增加显著提高;(3)基于SPI口的串口扩展。
本文采用GM814X串口扩展接口芯片通过单片机的增强型串行外设接口(SPI)实现多串口扩展。GM814X控制芯片在有限的资源下,可以增加扩展串口的数量并且性价比较高,运行可靠稳定,便于嵌入式系统使用。该方法成功应用于某RS-485通信终端开发。此通信终端与实际设备对接,工作稳定,设置灵活,满足RS-485总线高速通信要求。
1 基于GM814X的串口扩展
GM814X是专用低功耗串行口扩展芯片,该芯片主要是为了解决单片机等MCU自身的UART串口有限、不能与多个基于UART通信的外围智能模块及器件通信等问题而推出的。它可将现有单片机的单串口或双串口扩展成2个(GM8141)或4个(GM8142)标准的UART,并具备两种工作模式:串口扩展模式和广播模式。串口扩展模式下,各子串口可独立设置波特率、帧长和校验方式,并同时与SPI接口进行数据收发[2]。
1.1 SPI接口及时序
增强型串行外设接口(SPI)提供访问一个全双工同步串行总线的能力,可以使用3线或4线方式,并可在同一总线上支持多个主器件和从器件[3]。GM814X芯片是基于SPI接口实现的,因此SPI的时序对串口功能的使用尤为重要,时序图如图1所示。由于SPI时序较为简单,利用GM8141扩展串口时MCU选择比较灵活,可选用带SPI口的MCU(如C8051F340)实现,也可用通用I/O口通过软件模拟SPI实现。
SPI 上的数据为16位,其中高8位为子串口地址及附加命令和状态信息,低8位为实际收发数据。数据接收以时钟上升沿为采样标志,数据发送以时钟下降沿为移位标志。16 bit的数据收发从CS为低时有效,当CS拉高后,结束数据的收发,并对数据进行判断和有效性分析。
1.2 GM814X芯片
GM814X是一款兼容SPI总线的UART扩展芯片,其工作模式、各子串口的波特率、数据帧长等参数可通过向功能设置寄存器写入控制字进行灵活设置,I/O口占用率低。通过写功能设置寄存器的波特率分频标志位,各子串口可在母串口波特率基础上分频同时工作。其主要指标为:晶振频率为3.686 4 MHz 时, 波特率范围为600 b/s~230.4 kb/s,输出波特率误差小于0.1%,输入波特率误差允许小于3.4%。以GM8141芯片为例,其引脚功能如图2所示。
SHDN为软件shutdown控制标志位,0为正常工作模式,1为低功耗掉电模式。掉电模式下,GM814X自动清除中断寄存器的内容,但保留功能寄存器内的数据。当多个GM814X芯片挂在SPI总线上时,外部MCU可通过CS引脚选择与其中某个GM814X通信时的控制,以此实现芯片的并联工作。
2 应用设计
2.1 RS-485通信终端
RS-485串行接口采用差分传输方式,半双工方式通信,抗共模干扰能力强,并可联网构成分布式系统,在要求精度高的实际工业仪器中应用广泛[4]。
本文设计的RS-485通信终端作为一个独立的多路RS-485总线接口设备,具有多路RS-485信号的数据采集、发送及数据处理功能。通过外接LCD显示屏及矩阵键盘提供独立的人际交互手段。此外,该终端还可与PC机构成上、下位机系统,实现更为复杂的功能。其硬件组成如图3所示。
根据设备配置,该通信终端需要4个串口:C8051F340自带的UART0用于与串口LCD屏通信,与矩阵键盘配合,实现参数显示和人机交互;自带的UART1用于上位机进行RS-232通信,用于接收其指令或数据信息;扩展的两个串口用于与RS-485外设进行RS-485总线通信。
2.2 电路设计
选用C8051F340作为主控MCU,C8051F340具有丰富的数字外设如UART、SPI、SMBus/I2C、USB等资源,在工程中得到广泛应用。通过GM8141实现串口扩展,一片MAX232实现两路单片机TTL电平与RS-232C电平的双向转换,两片MAX485实现GM8141的TTL电平与RS-485电平的双向转换。电路图见图4。
GM8141与单片机采用SPI口的3线单主方式和3线单从方式连接,SPI时钟为250 kHz。IRQ引脚外接30 k?赘上拉电阻。当FIFO 接收到数据后置位R,并产生IRQ 中断,该IRQ 中断连接C8051340的P0.3管脚,当单片机响应,且对GM814X 进行了收(发)数据操作后,该中断即被清除;若接收FIFO 内还有数据,则继续重复产生新的IRQ中断和置位R,直到FIFO 内的数据被读取完;片选信号CS连接单片机的P1.6管脚,控制SPI时钟的有效性。
MAX485的发送/接收转换器由使能端RE和DE控制。当RE和DE都为0时, MAX485处于接收状态;RE和DE都为1时,MAX485处于发送状态。用于远距离传输时,应在A+和B-输出端并接匹配电阻。
2.3 软件设计
单片机采用C51语言编程,在Keil uVision3集成开发环境下调试。
使用GM8141进行扩展串口通信之前,首先进行初始化。SPI的初始化需设置工作方式和时钟频率。GM8141的初始化需要设置工作模式,字串口的波特率和数据帧长等,通过向配置寄存器中写入相应的控制字实现。
终端对于RS-485外设的通信主要是接收和发送数据程序,应严格按照图3中的SPI接口时序图进行设计。
以下为部分程序代码,串口扩展通信时仅给出RS-485通道1的发送接收程序,通道2类似,多串口通信初始化程序流程如图5所示。
(1)初始化:
void SPI0_Init()
功能:对SPI进行初始化
{
SPI0CFG=0x40; //设置工作方式、3线模式
SPI0CN=0x01; //使能SPI
SPI0CKR=23; //SPI0时钟为250 kHz
}
void Init_System()
功能:对GM8141进行初始化
{
uint temp=0;
while(cnt0<240); //等待LCD初始化
W_8141Config(1,1,11);
//串口1、发送中断屏蔽、波特率57 600
temp=Read8141Config(1); //读取配置返回结果
EX0=1;
//开外部中断(允许接收485信号)
}
调用函数说明:
①void W_8141Config(uchar n, uchar high, uchar low)
功能:配置GM8141指定串口、波特率,屏蔽设置等
参数:n为串口号;high为配置寄存器的高位字节(低三位有效),low为低位字节。
②uint Read8141Config(uchar n)
功能:读GM8141配置后的状态
(2) GM8141发送函数:
uint WR_8141(uchar W_com, uchar W_dat)
参数:W_com是对要发送的数据配置、W_dat是发送数据,W_dat与W_com的发送程序一样
{
uint R_state,R_dat; uint Receive;
CS=0; //GM8141有效
Delay(20);
//SPI时序要求时间:CS低电平到第一次
SCLK的延迟时间Tcss SPI0DAT=W_com;
//向SPI0数据寄存器中写入配置信息
while(!SPIF); //等待SPI发送数据结束
SPIF=0; //清SPI数据结束中断标志位
Delay(80); //SPI时序要求延迟时间
R_state=SPI0DAT; //读取GM8141接收值
……
}
(3) GM8141接收函数:
uint ReadFIFOData(void)
{
uint Receive;
Receive=WR_8141(0x00,0x00);
//GM8141单独数据接收模式
return Receive; //读出接收FIFO数据
}
C8051F340需要处理多种外设信息,应合理安排单片机的中断优先级。本电路中,优先考虑RS-485外设的高速通信,设置为高优先级,并采用外部中断0方式接收RS-485数据。当GM8141接收数据时,接收中断中应首先接收完整数据,然后判断子串口的数据地址信息;发送数据时所发送的数据帧应该包含其到达的子串口地址,这样才能实现正确接收。
在实验室条件下进行前期调试开发时,通过RS-232与RS-485转换器实现PC机模拟实际装备的RS-485信号进行通信,各串口测试运行良好;后期实装对接时,与RS-485外设通信稳定可靠,可实现多路RS-485信号的通信,实时性和可靠性均能达到要求。实践表明,通过GM814X扩展串口可以很好地解决串行通信系统的串口局限问题。随着单片机的广泛应用,此类扩展串口方法在解决同类问题中具有一定的使用参考价值。
参考文献
[1] 张毅坤.单片微型计算机原理及应用[M].西安:西安电子科技大学出版社,2006.
[2] 成都国腾微电子. GM8141/2数据手册[M]. 2006.
[3] 潘琢金.C8051Fxxx高速SOC单片机原理及[M]. 北京:北京航空航天大学出版社,2002.
[4] 刘小芳.单片机的多串口扩展技术的设计[J]. 计算机测量与控制,2004,12(11):1088-1090.