www.fosvos.com GM8123 & GM8125 应用驱动 C 函数包 上海福跃电子科技有限公司提供芯片销售及技术方案技术支持 来自:www.fosvos.com 1 概述 GM812X 系列串口扩展芯片可为用户提供最简单和高性能的通用串口扩展方案,该系列芯片 子串口最高波特率达38400bps。该芯片提供两种工作模式,用户可根据需要灵活选择。该芯 片母串口和子串口的工作波特率可由软件调节,而不需要修改外部电路和晶振频率。GM812X 系列芯片的外部控制少,应用灵活,编程使用简单,适合于大多数需要多串口扩展的应用场 合。 2 应用说明 2.1 硬件接口 GM812X 系列的典型应用如图1 所示: 图1 典型硬件接口电路 1 中选用89C51 作为系统的主机,通过GM8125 扩展了5 个子串口,5 个子串口可以与5 个 从机相接。如果用户只需要扩展3 个串口,则可采用GM8123,硬件连接方法和GM8125相同。 2.2 程序示例 2.2.1 单通道工作模式程序示例 此程序应用的环境是5 个从机分别以1200、2400、4800、9600、19200bps 的波特率工作, 并且主机与5 个从机的数据通讯采用分时的方式,即每次只对一个从机发送和接收数据。程 序以C51 为例: /*CPU:AT89C51 */ /*晶体频率:22.1184MHz */ /*机器周期:0.54uS */ www.fosvos.com /*语言:C51 */ /*TEL:021-58998693/58994470 */ /* www.fosvos.com */ /* MSN:smu_liven@hotmail.com */ /**************************************************************/ #include <reg51.h> #define DELAY_TIME 60000 //Delay time /**********************I/O 定义***********************/ sbit MS=P3^6; //GM8125 工作模式控制 sbit RESET=P3^7; //GM8125 复位引脚控制 sbit STADD0=P1^4; //GM8125 发送地址线0 sbit STADD1=P1^5; //GM8125 发送地址线1 sbit STADD2=P1^6; //GM8125 发送地址线2 /******************数据变量定义*****************/ unsigned char SendBuff[5]={0xaa,0x45,0x67,0xbc,0xc9}; unsigned char ReceiveBuff[5]={0x00,0x00,0x00,0x00,0x00}; unsigned char i=0 ,j=0 ,k=1,c=0; /*********************************************/ /*函数名称:delay.C */ /*函数功能: 延时程序*/ /*********************************************/ void delay(unsigned int m) { unsigned int n; n=0; while(n < m) {n++;} return; } /******************************************************/ /*函数名称: MAIN.C */ /*函数功能: 主机主程序*/ /*********************************************/ void main(void) { TMOD = 0x20; //指定定时器1 工作在方式2 IE = 0x90; //开串行口中断 SCON=0xc0; //串行口工作在方式3 for(c=0;c<5;c++) //选择5 个子串口以5 种不同波特率工作 { switch(c) { case 0:{ TH1=0xd0; //装入定时器1 初值,设置工作波特率为1200bps www.fosvos.com TL1=0xd0; PCON=0x00; P1=0x11; //选择8125 子通道1 工作 break; } case 1:{ TH1 = 0xe8; //装入定时器1 初值,设置工作波特率为2400bps TL1 = 0xe8; PCON=0x00; P1=0x22; //选择8125 子通道2 工作 break; } case 2:{ TH1 = 0xf4; //装入定时器1 初值,设置工作波特率为4800bps TL1 = 0xf4; PCON=0x00; P1=0x33; //选择8125 子通道3 工作 break; } case 3:{ TH1 = 0xfa; //装入定时器1 初值,设置工作波特率为9600bps TL1 = 0xfa; PCON=0x00; P1=0x44; //选择8125 子通道4 工作 break; } case 4:{ TH1 = 0xfd; //装入定时器1 初值,设置工作波特率为19200bps TL1 = 0xfd; PCON=0x00; P1=0x55; //选择8125 子通道5 工作 break; } default: break; } TR1=1; //启动定时器1 MS=1; //GM8125 工作在单通道工作模式下 /*主控MCU 发送/接收程序*/ SBUF=SendBuff[i]; while(TI==0); TI=0; i++; REN = 1; www.fosvos.com while(j!= k); //等待接收完成 REN = 0; //停止接收 k++; TR1=0; //T1 停止 } } void CommReceive(void) interrupt 4 { if(RI) { ReceiveBuff[j] = SBUF; RI = 0; j++; } } 2.2.2 多通道工作模式程序示例 此程序应用的环境是5 个从机均以19200bps 的波特率工作,要求主机对5 个从机分别发送 完数据后要等待从机向主机返回一个数据。程序以C51 为例: /**************************************************************/ /*CPU:AT89C51 */ /*晶体频率:22.1184M */ /*机器周期:0.54us */ /*语言:C51 */ /*TEL:021-58998693/58994470 */ /* www.fosvos.com */ /* MSN:smu_liven@hotmail.com */ /**************************************************************/ #include <reg51.h> #define DELAY_TIME 60000 //Delay time #define DELAY_TIME1 1 /**********************I/O 定义***********************/ sbit MS=P3^6; //GM8125 工作模式控制 sbit RESET=P3^7; //GM8125 复位引脚控制 sbit STADD0=P1^4; //GM8125 发送地址线0 sbit STADD1=P1^5; //GM8125 发送地址线1 sbit STADD2=P1^6; //GM8125 发送地址线2 /******************数据变量定义*****************/ unsigned char SendBuff[5]={0xaa,0x45,0x67,0xbc,0xc9}; unsigned char ReceiveBuff0; unsigned char ReceiveBuff1; unsigned char ReceiveBuff2; unsigned char ReceiveBuff3; unsigned char ReceiveBuff4; www.fosvos.com unsigned char ReceiveBuff5; unsigned char Contr_data; unsigned char ADD; unsigned char i=0 ,j1=0 ,j2=0 ,j3=0 ,j4=0 ,j5=0 ,c=0; /*********************************************/ /*函数名称:delay.C */ /*函数功能: 延时程序*/ /*********************************************/ void delay(unsigned int m) { unsigned int n; n=0; while(n < m) {n++;} return; } /******************************************************/ /*函数名称: MAIN.C */ /*函数功能: 主机主程序*/ /*********************************************/ void main(void) { TMOD = 0x20; //指定定时器1 工作在方式2 IE = 0x90; //开串行口中断 SCON=0xc0; //串行口工作在方式3 TH1 = 0xf8; //装入定时器1 初值,设置主机工作波特率为7200bps TL1 = 0xf8; PCON=0x00; RESET=0; //对GM8125 进行复位操作 RESET=1; delay(DELAY_TIME); Contr_data=0xfc; //装入命令字初值 TR1=1; //启动定时器1 MS=0; //GM8125 工作在写命令字模式下 P1=0x00; //置GM8125 命令字地址 SBUF=Contr_data; //设置GM8125 子串口波特率为19200bps,母串口波特率为115200bps while(TI==0); TI=0; delay(DELAY_TIME); REN=1; MS=1; //读命令字 delay(DELAY_TIME); while (ReceiveBuff0!=Contr_data) //验证写入的命令字是否正确,不正确则重新写 { www.fosvos.com MS=0; //GM8125 工作在写命令字工作模式下 SBUF=Contr_data; while(TI==0); TI=0; delay(DELAY_TIME); REN=1; MS=1; //读命令字 delay(DELAY_TIME); } REN=0; MS=0; //设置GM8125 工作在多通道工作模式下 TR1=0; //定时器1 停止 TH1 = 0xff; //装入定时器1 初值,设置主控MCU 工作波特率为115200bps TL1 = 0xff; PCON=0x80; TR1=1; //启动定时器1 /*主控MCU 发送/接收程序*/ ADD=0x1f; //子通道1 发送地址 P1=ADD; //选择GM8125 子通道1 发送 delay(DELAY_TIME1); //GM8125 命令字设置更新时间 SBUF=SendBuff[i]; while(TI==0); TI=0; i++; ADD=0x2f; //子通道2 发送地址 P1=ADD; //选择GM8125 子通道2 发送 SBUF=SendBuff[i]; while(TI==0); TI=0; i++; ADD=0x3f; //子通道3 发送地址 P1=ADD; //选择GM8125 子通道3 发送 SBUF=SendBuff[i]; while(TI==0); TI=0; i++; ADD=0x4f; //子通道4 发送地址 P1=ADD; //选择GM8125 子通道4 发送 SBUF=SendBuff[i]; while(TI==0); TI=0; i++; ADD=0x5f; //子通道5 发送地址 P1=ADD; //选择GM8125 子通道5 发送 www.fosvos.com SBUF=SendBuff[i]; while(TI==0); TI=0; i++; REN = 1; while(j1!= 1); //等待接收完成 while(j2!= 1); //等待接收完成 while(j3!= 1); //等待接收完成 while(j4!= 1); //等待接收完成 while(j5!= 1); //等待接收完成 REN = 0; //停止接收 } void CommReceive(void) interrupt 4 { if(RI) { switch(P1&0x07) { case 0: {ReceiveBuff0=SBUF; //读命令字存入ReceiveBuff0 break; } case 1: {ReceiveBuff1=SBUF; //子通道1 接收的数据存入ReceiveBuff1 j1++; break; } case 2: {ReceiveBuff2=SBUF; //子通道2 接收的数据存入ReceiveBuff2 j2++; break; } case 3: {ReceiveBuff3=SBUF; //子通道3 接收的数据存入ReceiveBuff3 j3++; break; } case 4: {ReceiveBuff4=SBUF; //子通道4 接收的数据存入ReceiveBuff4 j4++; break; } case 5: {ReceiveBuff5=SBUF; //子通道5 接收的数据存入ReceiveBuff5 j5++; www.fosvos.com break; } default: break; } RI = 0; } } 2.3 应用说明 1、GM8123 的应用程序可参考GM8125; 2、以上程序仅作为用户使用的参考程序,不作为GM812X 系列芯片的固定使用程序; 3、用户在使用GM812X 系列芯片时请注意遵照数据手册中的使用说明进行操作; 4、根据实际测试经验,用户若使用51 单片机控制,需要在写入命令字后立即读取命令字, 由于51 单片机串口工作时序是发送停止位的同时将TI 置1,如果此时立即将MS 置1 读取命 令字,将导致芯片还未接收到命令字字节的停止位,芯片就转入读命令字模式,使写入操作 无法完成,所以编程时要注意在TI 置1 后至少延时1bit 的时间才能将MS 置1,以保证芯片 有足够的时间完成写命令字操作; 5、GM812X 从母串口完成数据接收到将此数据发送到子串口有一个子口位的延时,所以主机 发完停止位到子口发完停止位的时间为:一个子口位的时间+ 一个子口帧的时间,计算公式 为:(1+dn)/br,其中br 为当前设置的子串口波特率,dn 为当前设置的子串口一帧的位 数(10 或11)。用户采用485 通讯时需要遵照此时间进行控制; 6、多通道模式下,根据数据手册上的描述“完成命令字的设置之后,必须将STADD 置为非 全0 的值后,设置才生效”,由于从STADD 置为非全0 值到设置更新还有一定的延时,如果 用户程序是在写完命令字后STADD 的全0 状态一直保持到需要发送数据时才将地址线修改, 修改地址线状态后立即向芯片发送数据,将有可能出现第一个字节错误的情况,建议在设置 完地址线后给予几十微秒的延时,以保证芯片有足够的时间完成设置更新操作。或者用户可 以在设置完命令字后立即修改STADD 为非全0 状态,使新设置在芯片通讯之前完成生效; 7、为保证芯片工作的稳定性,建议在GM812X的电源输入引脚上加去耦电容,以保证输入电 源的稳定。 www.fosvos.com 上海福跃电子科技有限公司是一家提供专业嵌入式技术解决方案 的高科技企业,福跃电子拥有一支由专业、高效、进取的精英组成的团 队。并拥有丰富的资源,包括产品技术方案解决工程师、现场销售工程 师、现场应用工程师,技术销售专家和客户代表,以我们专业服务的技 术水准和强大的技术实力,勤奋敬业、向善向上的奋斗精神,诚实有信 的商业原则,来赢得用户及社会的支持及信任! 福跃电子致力于为国内外广大客户提供嵌入式技术解决方案以及 电子元器件的供应。目前主要设计开发电子衡器、金融 POS 机系统解决 方案、视频编解码处理解决方案及镍氢电池快速充电器芯片解决方案; 产品应用领域已广泛覆盖民用计量、消防楼宇、消费电子、无线通讯、 仪器仪表、节能电子、小家电和汽车电子等行业。公司已与多家大中型 电子企业及国际性 OEM、EMS 公司建立战略性的技术及商务合作伙伴 关系,提供“一站式采购”解决方案,成为中国广大电子企业客户最满意 的合作伙伴之一。 福跃电子本着"为客户提供完整的供应保证系统及深具行业水准的 市场化产品以体现、创造、赢得价值”。从完整的售前售中售后的技术 支持到整个供应链环节的整体保障,从个体化零散式的技术服务到完整 配套技术设计方案到系列设计指导丛书,每一个环节,我们都体现以客户 需求为本的、切实为客户解决实际问题的服务精神,引导客户走向更可 www.fosvos.com 靠更稳定的产品质量之路,帮助客户成功以此来促成公司的发展; 以深 具行业引导性的超值先进产品并使其能被普遍运用以推动这个行业的 快速进步,从这二方面来体现创造赢得我们的价值。 福跃电子经营理念:诚信踏实、创新特色、卓越服务、共同发展放 眼未来,我们将以更高的起点、更灵活的合作方式,用优良真诚的服务 和守信开放的态度,诚邀天下贤士,广交四海商贾,开创美好未来! 联系我们: 上海福跃电子科技有限公司 FOSVOS ELECTRONIC SHANGHAI CO.,LTD 地址:上海市浦东新区金高路 1296 弄 103 号 1~3F 201206 ADDRESS:1-3F,No.103,Alley 1296,Jingao Rd Pudong Shanghai China 电话: +86-21-58998693 58994470 传真: +86-21-58994470-18 E-mail: Tech@fosvos.com URL: www.fosvos.com 开户名:上海福跃电子科技有限公司 开户行:021431-工行浦兴路支行 帐 号:1001 1431 0900 6948 372 税 号:310 1156 7459 7341 www.fosvos.com 福跃电子 IC 设计 ASIC 设计服务综述 福跃电子的 ASIC 范围涉及通讯、电源、消费电子、数字音频/视频等方面,公司可为客户提供全面解 决方案,也可根据用户需求,与用户共同商定技术要求,为用户设计、研制、测试,并按期向用户提供样品, 并向客户长期供应芯片。 我们的技术优势: ・熟悉整机开发的设计工程师开发的产品能够达到方便整机设计工程师开发的目的 ; ・版图设计具有 0.25μm、0.35μm、0.5μm、0.8μm、1.0μm、1.2μm、3μm 的工艺 ・具有大规模数字、模拟芯片方面的设计能力; ・掌握了数字芯片、模拟芯片以及模拟、数字混合芯片等方面的技术 ; ・拥有丰富且成熟的 IP 库; ・芯片规模: 数字:百万门以上 模拟:0.5 微米--3 微米的数模混合 ・拥有先进的逻辑设计、综合、仿真、设计验证等 EDA 软件和先进的硬件设计工具。 业务流程: