通用异步串口扩展芯片GM8123/25的原理和应用
摘 要 本文介绍了一种新器件GM8123/25串口扩展芯片,利用该系列芯片实现的串口扩展方案具有成本低、速度快、控制简单等优点,可广泛应用于数据采集、工业控制等需要串口通讯的场合。
关键词 GM8123 GM8125 串口扩展
一.同类方案比较
目前比较通用的串口扩展方案有两种,一是用硬件实现,使用多串口单片机或专用串口扩展芯片,可供选择的串口扩展芯片有TI等公司开发的16C554系列串口扩展芯片,该系列芯片实现的功能是通过并行口扩展串行口,功能比较强大、通讯速度高,但控制复杂,同时价格较高,主要的应用场合是PC机串口扩展产品。在仅使用单片机控制且不需要太高波特率通讯的系统中,使用16C554系列芯片不仅成本高而且还造成了资源的浪费。而多串口单片机也同样存在价格高的缺点。另一种串口扩展方案就是用软件实现,软件模拟串口存在的缺点有:一是采样次数低,一般只能做到2次/BIT,这样数据的正确性就难以保证;二是不能实现高波特率通讯,软件模拟串口一般不能实现高于4800 bps的波特率。
成都国腾微电子有限公司推出的GM8123/25系列串口扩展芯片全硬件实现串口扩展,保证了芯片工作的稳定性,设计的最高波特率完全能满足一般系统需求,同时占用系统资源少,使用方法简单,通讯格式可设置,与标准串口通讯格式兼容,利用该系列芯片实现串口扩展是性价比较高的串口扩展方案。
二.GM8123/25介绍
2.1 产品特点
·采用写控制字的方式对芯片进行控制
·两种工作模式,用户可根据自己的系统需求灵活选择
·各子串口波特率可调(统一调节)
·数据帧长10位或11位可选
·子串口数:3个(GM8123)或5个(GM8125)
·数据采样率 16次/BIT,确保数据采样的准确可靠
·单通道模式下,最高波特率支持20Mbps;多通道模式下,子串口最高波特率38400bps
·与标准串口通讯格式兼容
·输出波特率误差小于0.2%,输入波特率误差要求小于2.8%
·宽工作电压:2.3~6.7V
·工作温度范围:-40℃~85℃
·工作稳定,抗干扰能力强,符合工业级标准
2.2 功能描述
GM8123可扩展3个标准串口,GM8125可扩展5个标准串口,芯片可以通过软件设置工作波特率和数据帧长。芯片通过外部引脚选择串口扩展模式:单通道工作模式和多通道工作模式。单通道模式下,子串口最高波特率支持20Mbps;多通道模式下,子串口最高波特率支持38400bps。
单通道模式下,无需设置芯片的通讯格式,子串口和母串口以相同的波特率工作,一个时刻只允许一组子串口和母串口通讯,工作子串口由地址线选择。单通道工作模式适用于所有从机不需要同时通讯并且通讯过程完全由主机控制的系统。
多通道模式下,允许所有子串口同时与母串口通讯,母串口以子串口波特率的4倍(GM8123)/6倍(GM8125)工作,发送时由地址线选择发送数据的子串口,接收时子串口能主动响应从机发送的数据,由母串口发送给主机,同时由地址线返回接收到数据的子串口地址,主机在接收到子串口送来的数据后可以根据地址线的状态判断数据是从哪一个从机送来的。多通道模式使每个从机的发送要求都能被及时地响应,即使所有从机同时有发送要求,数据也不会丢失,基本实现了主控单元和外设通讯的实时性。多通道模式适用于从机向主机发送数据的时间不可控并且有实时性要求的多机通讯系统。(详细情况查看成都国腾微电子有限公司发布的GM8123/25数据手册)
2.3 系统结构
图1为GM8123/25的系统结构框图:
三.应用说明
以以下一个系统为例,用GM8125说明该系列芯片实现串口扩展的方法:一个系统中有5个从机需要与主机进行串行通讯,5个从机通讯波特率均为19200bps,主机首先向所有从机发送一个字节数据作为对从机的控制命令,从机收到数据并进行处理后立即向主机返回相关数据。根据系统要求看出,从机发送数据的时间根据其处理时间而定,不受主机控制,所以GM8125要工作在多通道模式下,即允许所有子串口同时工作。图2是单片机与GM8125的接口框图,该系统利用GM8125为主机89C51扩展出5个串口。
图2 GM8125与单片机的硬件接口框图 GM8125引脚说明:RST:复位引脚,低电平有效。复位后默认子串口工作波特率为1200bps,数据长度为11位(带校验位); MS:模式选择引脚,控制芯片工作在多通道模式下还是单通道模式下。多通道模式下兼做读/写命令字选择引脚; SRADD0~2:接收子串口地址线; STADD0~2:发送子串口地址线; RXD0、TXD0:母串口收/发引脚; RXD1~5、TXD1~5:子串口1~5收/发引脚; 下面给出主机发送和接收的控制程序,以C51为例: #include <reg51.h> sbit MS=P3^6; //GM8125工作模式控制 sbit RESET=P3^7; //GM8125复位引脚控制 unsigned char SendBuff[5]={0xaa,0x45,0x67,0xbc,0xc9}; unsigned char ReceiveBuff0; 。。。。。。 unsigned char Contr_data; unsigned char ADD; unsigned char i=0; 。。。。。。 void main(void) { TMOD = 0x20; //指定定时器1工作在方式2 IE = 0x90; //开串行口中断 SCON=0xc0; //串行口工作在方式3 TH1 = 0xf8; //装入定时器1初值,设置主机工作波特率为7200bps TL1 = 0xf8; PCON=0x00; 。。。。。。 RESET=0; //对GM8125进行复位操作 Delay(); //延时子程序 RESET=1; Delay(); Contr_data=0xfc; //装入命令字初值 TR1=1; //启动定时器1 MS=0; //GM8125工作在写命令字模式下 P0=0x00; //置GM8125命令字地址 SBUF=Contr_data; //设置GM8125子串口波特率为19200bps,母串口波特率为115200bps while(TI==0); TI=0; Delay(); (可读取命令字的内容验证写入结果是否正确) TR1=0; //定时器1停止 TH1 = 0xff; //装入定时器1初值,设置主控MCU工作波特率为115200bps TL1 = 0xff; PCON=0x80; TR1=1; //启动定时器1 /*主控MCU发送/接收程序*/ ADD=0x1f; //子通道1发送地址 P1=ADD; //选择GM8125子通道1发送 SBUF=SendBuff[i]; while(TI==0); TI=0; i++; (以此方式分别向5个子串口发送数据) REN = 1; (等待接收处理) } void CommReceive(void) interrupt 4 { if(RI) { switch(P1&0x07) //判断SRADD0~2的状态确定接收数据来自哪一个子串口 { case 0: {ReceiveBuff0=SBUF; //读命令字存入ReceiveBuff0 } break; case 1: {ReceiveBuff1=SBUF; //子通道1接收的数据存入ReceiveBuff1 } break; 。。。。。。 default: break; } RI = 0; } } 该芯片的单通道模式适用于各从机不需要同时工作的系统,具体应用方法在此不做详述,请参考国腾微电子有限公司发布的《GM812X应用手册》。 |
- 基于C8051F020的通用串口适配器的设计(06-23)
- 高效FIFO串口双机通信在ARM7上的实现(06-20)
- 基于VxWorks的多路高速串口的通信方法设计(08-14)
- 嵌入式系统高效多串口中断源的实现(08-20)
- 基于单片机AT89C51SND1C的MP3方案设计(07-24)
- 基于ARM-Linux的Modbus串口服务器设计(11-08)