一转多串口芯片GM8125的初始化程序
基于嵌入式技术的多串口数据传输系统研究
基于嵌入式技术的多串口数据传输系统研究摘要:串口数据传输技术已经成为工业测控领域的设备范围内有效性最高的一种数据传输形式,然而其本身仍具有一定的局限性,从而限制了数据传输系统的实行速率。
使用lpc2210型号的32位微型控制处理器、gm8125型号的串口通信扩展芯片与μc/os-ii移植性的实时操作系统,把嵌入式技术作为串行终端通信设备和以太网两个部分之间实现数据双向传输的基础条件,设计一种综合程度较高的多串口数据传输系统。
关键词:嵌入式系统以太网多串口数据传输中图分类号:tn 文献标识码:a 文章编号:1007-0745(2013)06-0268-021引言由于串行通信的数据传输速度慢、间隔小与可靠性弱等方面的不足,串行通信设备和控制主机之间存在着数据通信传输与操作管理问题,从而会对自动化执行与工业控制等方面的上升发展产生阻碍作用。
以性价比与实践角度作为实际考虑点,构建了以32位微型控制处理器lpc2210和实时操作系统μc/os-ii为基础的嵌入式技术多串口数据传输系统。
这系统能够充分地解决三个方面的问题。
其一为经过gm8125串口通信扩展芯片改善单串口模式数据传输系统的限制影响,可以达到多串口数据传输的目标功能;其二为rtl8019as型号网卡控制芯片和微型处理器lpc2210的功能性结合,有利于优化微型处理器的资源消耗率;其三为能够有效地提升数据传输效率,达到硬件通信设备的联网实现。
2系统的功能架构嵌入式系统是连接串行数据通信终端设备和以太网两部分而实现数据传输的基础条件,由串口能够接收到从串行数据通信终端设备传来的数据,而且可以对数据实现tcp/ip协议的转变功能,最后进入到intenet中传送至相应的上位机软件。
在实际数据传输系统的执行过程当中,不但需要进行串行通信终端设备的数据采集功能,而且可以实现数据通信的自由控制。
数据通信的转换和传输技术作为系统的关键环节,进行串行通信终端设备数据和通信网络数据格式的判断与转变操作,实现数据双向传输的直接目的。
AVR串口通信初始化设置及例程0
AVR串口通信初始化设置及例程0Atmega128 串口详解 0000Atmega128有两个串口:USART0与USART1以USART0为例串口的初始化包括:传输模式的选择:同步还是异步,默认为异步模式,可通过选择USART控制和状态寄存器UCSR0C中的UMSEL位来选择,UMSEL为0,是异步模式.波特率的设置:通信的双方都必须有相同的波特率,波特率可以通过设置波特率发生寄存器UBRR0来确定,UBRR0为两字节16位的寄存器,可分为UBRR0H和UBRR0L.同时起作用的还有UCSR0A中的波特率加倍位UX2,当UX2为1时设置的波特率加倍.传输帧格式的设置:默认是8位数据位,一位停止位发送接受的使能与中断:通过设置UCSR0B来根据需要选择接收或发送的使能和是否使用中断,对使用中断的USART操作,初始化前要关闭中断USART0的控制和状态寄存器有:UCSR0A,UCSR0B,UCSR0C,波特率寄存器有UBRR0,即UBRR0H和UBRR0L,数据寄存器为UDR01、初始化:设置波特率前,要关闭USART0的所有使用,包括使能和中断:UCSR0B=0B00000000; //关闭USART02、设置UCSR0A:UCSR0A能写的有Bit0,Bit1,Bit6,其他5位为状态位.我们一般使用的有Bit1-U2X0,当这一位为1时,波特率的分频因子从16降到8,能够有效的将异步通信模式的传输速率加倍,但是这一位仅对异步操作有影响,使用同步操作时应将此位清零.UCSR0A=0B00000000; //不使用倍速发送3、设置UCSR0C:Bit6-UMSEL0:USART0的模式选择,0为异步模式,1为同步模式Bit5:4-UPM01:0:奇偶校验模式,00禁止,01,保留,10偶校验,11,奇校验Bit3-USBS0:停止位的选择,0停止位为1bit,1停止位为2-bitsBit2:1-UCSZ01:0:字符长度,当UCSZ02为0时,00表示5位,01表示6位,10表示7位,11表示8位.当UCSZ02为1时,11表示9位.(UCSZ02为UCSR0B里的一位寄存器)eg:UCSR0C=0B00000110 //异步模式,禁止奇偶校验,停止位为1位,数据位为8位4、设置UBRR:UBRR的设置和这些参数有关:U2X0,CPU频率,波特率当U2X0为0时,即异步正常模式下,UBRR的计算公式:1、U2X=0时的公式计算UBRR0L= (F_CPU/BAUDRATE/16-1)%256;UBRR0H= (F_CPU/BAUDRATE/16-1)/256;2、U2X=1时的公式计算UBRRL= (F_CPU/BAUDRATE/8-1)%256;UBRRH= (F_CPU/BAUDRATE/8-1)/256;//也可根据数据手册的[波特率设置的例子]查得//UBRRL = 0x2F; //set baud rate lo//UBRRH = 0x00; //set baud rate hi设置一般会有误差,误差计算方法为:Error[%]=(BaudRate_ture/BaudRate-1)*100%;5、然后就是设置UCSR0B:Bit7-RXCIE0为接收结束中断使能,Bit6-TXCIE0为发送结束中断使能,Bit4-RXEN0为接收使能,Bit3-TXEN0为发送使能.一般情况下,接收使用中断方式,所以使用接收结束中断使能.UCSR0B=0B10011000 //发送接收使能,接收结束使能还一种写法是UCSR0B|=(1<< RXEN0)|(1<< TXEN0)|(RXCIE0);如果更熟练,可以直接以10进制活16进制来设置这些寄存器:UCSR0B=0x98;或者UCSR0B=152;串口的初始化函数:void uart_init(void) //串口0初始化{UCSR0B=0x00; //disable while setting baud rateUCSR0A=0B00000000; //Bit1为1则倍速发送 U2X=0UCSR0C=0x06; //B00000110 //奇偶模式无,八位数据位,一位停止位UBRR0L=103; //B00011001波特率:9600 BpsUBRR0H=0x00; //误差率:0.156%UCSR0B=0x98;}初始化之后就是对USART0进行读写了.UCSR0A的Bit5-UDRE0标志指出发送缓冲器UDR0是否准备好接收新数据,UDRE0为1说明缓冲器为空,可以接收新数据,UDRE0标志也可用来产生寄存器空中断.复位后的UDRE0置位,表明发送器已经就绪:当UDRE0为1时!(UCSR0A&(1<< UDRE0))为0void putchar(uchar c) //串口0发送字符{while(!(UCSR0A&(1<< UDRE0))); //while(!(UCSR0A&32)); 表明发送器已经就绪。
GM8125应用
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 *//*语言:C51 *//**************************************************************/#include <reg51.h>#define DELAY_TIME 60000 //Delay time/**********************I/O定义***********************/sbit MS=P3^6; //GM8125工作模式控制sbit RESET=P3^7; //GM8125复位引脚控制/******************数据变量定义*****************/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工作在方式2IE = 0x90; //开串行口中断SCON=0xc0; //串行口工作在方式3for(c=0;c<5;c++) //选择5个子串口以5种不同波特率工作{switch(c){case 0:{TH1=0xd0; //装入定时器1初值,设置工作波特率为1200bps TL1=0xd0;PCON=0x00;P1=0x11; //选择8125子通道1工作break;}case 1:{TH1 = 0xe8; //装入定时器1初值,设置工作波特率为2400bpsTL1 = 0xe8;PCON=0x00;P1=0x22; //选择8125子通道2工作break;}case 2:{TH1 = 0xf4; //装入定时器1初值,设置工作波特率为4800bpsTL1 = 0xf4;PCON=0x00;P1=0x33; //选择8125子通道3工作break;}case 3:{TH1 = 0xfa; //装入定时器1初值,设置工作波特率为9600bpsTL1 = 0xfa;PCON=0x00;P1=0x44; //选择8125子通道4工作break;}case 4:{TH1 = 0xfd; //装入定时器1初值,设置工作波特率为19200bpsTL1 = 0xfd;PCON=0x00;P1=0x55; //选择8125子通道5工作break;}default:break;}TR1=1; //启动定时器1MS=1; //GM8125工作在单通道工作模式下/*主控MCU发送/接收程序*/SBUF=SendBuff[i];while(TI==0);TI=0;i++;REN = 1;while(j!= k); //等待接收完成REN = 0; //停止接收k++;TR1=0; //T1停止}}void CommReceive(void) interrupt 4{if(RI){SBUF;ReceiveBuff[j]=RI = 0;j++;}}2.2.2 多通道工作模式程序示例此程序应用的环境是5个从机均以19200bps的波特率工作,要求主机对5个从机分别发送完数据后要等待从机向主机返回一个数据。
基于单片机和GM8125的多路串口收发器设计
基于单片机和GM8125的多路串口收发器设计作者:张成瑞,李见为,王刚来源:《电脑知识与技术》2011年第10期摘要:介绍了串口扩展芯片GM8125的特性,设计了基于该芯片和8051单片机的多路串口收发器,程序算法及硬件电路实现了多达4台子设备(电子天平)到主设备(打印机)数据标号传输,并有效地解决了GM8125芯片多路并行工作时的出现的乱码和数据混乱的问题。
系统使用方便,实时性好,扩展方便,取得了良好的实际应用效果。
关键词:8051单片机;GM8125;串口扩展;并行多路收发中图分类号:TP23文献标识码:A文章编号:1009-3044(2011)10-2422-03Design of Multi-channel Serial Transceiver Based on SCM and GM8125ZHANG Cheng-rui1, LI Jian-wei1, WANG Gang2(1.Key Lab. of Opto-Electronic Technology & System of the Education Ministry, Chongqing University, Chongqing 400044, China; 2.Chongqing Academy of Metrology and Quality Inspection Institute, Chongqing 400030, China)Abstract: The characteristics of GM8125, a kind of serial expansion chip,are first introduced. Then a multi-channel serial transceiver is designed based on GM8125 and 8051 MCU. The software program and hardware circuit realized sending and receiving upto 4 channels of datas from sub-equipments (electronic scales) to the host- equipment (printer), and effectively solved the problem of chaos of data while parallel and multi-channel data transceiving. The system is not only easy and convenient to use, but also easy to extendits own function. Finally a good result has been obtained in practical application.Key words: 8051MCU; GM8125; serial expansion; parallel and multi-channel transceivingGM8125是成都国腾微电子有限公司推出的全双工标准串口扩展芯片,可以将一个母串口扩展为5个子串口,各个串口波特率可调,最高可达38400b/s,支持10位和11位两种数据帧长度,有效地解决了某些嵌入式芯片自带串口不足的问题。
GM8125数据手册
4.2 多通道工作模式
当模式控制引脚 MS = 0 时,芯片工作在多通道工作模式下,多通道模式允许 5 个子串口同
时全双工地工作。在该工作模式下,芯片的地址线 STADD2~0 是输入口,由 MCU 控制选择希
表 5 命令字寄存器的默认状态
参数名
默认状态
BR2~0
000(1200bps)
FL
1(11bit 一帧)
注:该芯片不具备上电复位功能,用户在使用前必须通过复位引脚对芯片进行复位。
4.4 芯片的工作方式设置
芯片的工作方式设置包括串口帧格式设置和通讯波特率设置。芯片进行工作方式设置时, MS 为‘0’、STADD2~0 为‘000’时写命令字,MS 为‘1’、STADD2~0 全为 0 时读命令字。 此时芯片的帧格式和母串口工作波特率与上一次进行数据通讯时一致,比如上一次通讯采用
地址线可以不相同,则连接到母串口上的 RXD 和 TXD 可以属于不同的子串口。
注意:通讯时不能将 STADD 置为‘000’。
单通道工作模式各地址线定义如表 2:
表 2 单通道工作模式下地址线定义
STADD2 STADD1 STADD0 SRADD2 SRADD1 SRADD0
定义
001~101
0
旧版 文档页数
当前版本 文档页数
主题(和旧版本相比的主要变化)
11
14
增加封装机械尺寸、取消 DIP 封装
14
14
修改读命令字操作的工作方式
14
14
修改输入高电平 VIH 的最小值
14
单片机cpu初始化的方法解析
disable_interrupt:
mvn r1,#0x0
ldr r0,#4A000008
str r1,[r0]
mov pc,lr
4、关闭mmu和catch
主要包括:(1)使I/D catch内容失效(2)关闭mmu和I/D catch
在ARM920T(ARM9)参考手册找到相关寄存器,主要是寄存器1和寄存器7,并进行相应设置:
bl disable_mmu
set_svc:
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0
mov pc,lr
#define pWTCON 0x53000000
disable_watchdog:
ldr r0,#pWTCON
mov r1,#0x0
2、关闭看门狗
在对应的芯片手册(我用的是S3C2440)找到看门狗相关的寄存器,并关闭看门狗定时器输出的复位信号:
对应汇编代码:
disable_watchdog:
ldr r0,#pWTCON
mov r1,#0x0
str r1,[r0]
mov pc,lr
3、关闭中断
找到对应芯片的中断屏蔽寄存器,并关闭中断:
undefined_instrucTIon:
nop
software_interrupt:
nop
prefetch_abort:
nop
data_abort:
nop
not_used:
nop
irq:
nop
fiq:
nop
rese disable_watchdog
bl disable_interrupt
GM8125串口扩展芯片
4.2 多通道工作模式
当模式控制引脚 MS = 0 时,芯片工作在多通道工作模式下,多通道模式允许 5 个子串口同
时全双工地工作。在该工作模式下,芯片的地址线 STADD2~0 是输入口,由 MCU 控制选择希
望发送数据的子串口,地址线 SRADD2~0 是输出口,用于向 MCU 返回接收到数据的子串口地
址。注意:通讯时不能将 STADD 置为‘000’。
各地址线定义如表 3 和表 4 所示:
表 3 多通道工作模式下子串口发送地址线定义
STADD2 STADD1 STADD0
定义
0
0
1
选择子串口 1 发送
注意:由于母口波特率是子口波特率的 6 倍,母口发送 6 帧的时间子口才能发送一帧,所 以若只需要对一个子口进行连续发送,则必须对母口发送进行延时操作,延时可采用延时程序 实现,也可通过对母串口发送无效数据来实现,具体方法为将地址线 STADD 置为全 0,然后对 母串口写 0x00。例如只需要对子串口 2 连续写两帧数据,则先向子串口 2 发送一帧数据,然后 将地址线置为 0,MCU 发送 5 个 0x00,然后再向子串口 2 发送第二帧数据,若不进行延时操作 或发送延时数据不为 0x00 将导致不可预料的结果。只向一个子串口连续发数据的时序如图 5 所 示。如果需要向所有子串口发送,则不需要延时操作,只需要依次向各个子串口发送即可。
成都国腾微电子有限公司
GM8125
1 概述
GM8125 可以将一个全双工的标准串口扩展成 5 个标准串口,并能通过外部引脚控制串口 扩展模式:单通道工作模式和多通道工作模式,即可以指定一个子串口和母串口以相同的波特 率单一的工作,也可以让所有子串口在母串口波特率基础上分频同时工作。
串口扩展方案总结
串口扩展方案总结串行接口设备凭借其控制灵活、接口简单、占用系统资源少等优点,被广泛应用于工业控制、家庭安防、GPS卫星定位导航以及水、电、气表的抄表等领域。
在这些嵌入式系统中,可能会有很多从设备都通过串行接口与主机进行通信,如GPRS MODEM、红外发送和接收模块、RS485总线接口等。
这使得开发人员常常面临嵌入式系统中主机串行通信接口不足的问题,针对此问题,本文介绍了几种常见的解决方法。
软件模拟法软件模拟法可根据串行通讯的传送格式,利用定时器和主机的I/O口来模拟串行通讯的时序,以达到扩展串口的目的。
接收过程中需要检测起始位,这可以使用查询方式,或者,在端口具有中断功能的主机中也可以使用端口的中断进行处理。
接收和发送过程中,对定时的处理既可以使用查询方式也可以使用定时器中断方式。
为了确保数据的正确性,在接收过程中可以在检测异步传输的起始信号处加上一些防干扰处理,如果是无线传输系统,在接收每个位时可以采用多次采样。
对于有线系统来说,1次采样就够了,你看IIC,SPI等,谁去进行了多次采样。
如今软件模拟以其价格低廉,使用方便,已经成为一种潮流.但是不是所有的单片机都适合用来进行串口的软件模拟的.软件模拟的方法一般有两种,一种是读写I/O,另外一种是读写端口.很容易想到采用读写端口的方式模拟的方式,各串口的波特率必须保持一致.而且当各路数据的输入时间差只有那么几十微秒时,很容易造成数据丢失,虽然看上去这种方式也可以承受输入数据端短路的高数据量压力测试,但这种测试方法是刚好落在了该方案的最佳输入点上.所以真正的使用中是有几率出错的.而采用我们PDK80CXX系列在进行8路以下(4路全双工通讯)的串口模拟时,完全可以采用读写I/O口方式来完成,这样,我们可以非常轻松完成个子口的波特率不等的设置.而且可以达到非常高的速率,当外接8MHz的晶体时,3路子口的最高速度可以达到38400以上.我想就是38400的波特率一般的单片机也就足够了.俗话说,"打铁还需墩子硬",而我们PDK80CXX都是工业规格设计,超强的抗干扰性,超宽的高低温工作范围.不知道各位看官目前有没有用过可以在-40~+120摄氏度工作的单片机.所以采用PDK80CXX模拟串口扩展无疑是目前性价比最高的一种解决方案.利用并口转串口扩展串行口基于Intel8251的串行口扩展Intel8251是一种通用的同步/异步发送器(USART),它的工作方式可以通过编程设置,并具有独立的接收/发送器。
飞思卡尔16位单片机9S12XS128使用(一些初始化)
飞思卡尔16位单片机9S12XS128使用(一些初始化)飞思卡尔16位单片机9S12XS128使用最近做一个关于飞思卡尔16位单片机9S12XS128MAA的项目,以前未做过单片机,故做此项目颇有些感触。
现记录下这个艰辛历程。
以前一直是做软件方面的工作,很少接触硬件,感觉搞硬件的人很高深,现在接触了点硬件发现,与其说使用java,C#等语言写程序是搭积木,不如说搞硬件芯片搭接的更像是在搭积木(因为芯片是实实在在拿在手里的东西,而代码不是滴。
还有搞芯片内部电路的不在此列,这个我暂时还不熟悉)。
目前我们在做的这个模块,就是使用现有的很多芯片,然后根据其引脚定义,搭接出我们需要的功能PCB 板,然后为其写程序。
废话不多说,进入正题。
单片机简介:9S12XS128MAA单片机是16位的单片机80个引脚,CPU是CPU12X,内部RAM8KB,EEPROM:2KB,FLASH:128KB,外部晶振16M,通过内部PLL 可得40M总线时钟。
9S12XS128MAA单片机拥有:CAN:1个,SCI:2个,SPI:1个,TIM:8个,PIT:4个,A/D:8个,PWM:8个下面介绍下我们项目用到的几个模块给出初始化代码1、时钟模块初始化单片机利用外部16M晶振,通过锁相环电路产生40M的总线时钟(9S12XS128系列标准为40M),初始化代码如下:view plaincopy to clipboardprint?1/******************系统时钟初始化****************/2void Init_System_Clock()3{4 asm { // 这里采用汇编代码来产生40M的总线5 LDAB #36 STAB REFDV78 LDAB #49 STAB SYNR10 BRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率11 BSET CLKSEL,#$8012 }13}上面的代码是汇编写的,这个因为汇编代码量比较少,所以用它写了,具体含义注释已经给出,主函数中调用此函数即可完成时钟初始化,总线时钟为40M.2、SCI模块初始化单片机电路做好了当然少不了和PC之间的通信,通信通过单片机串口SCI链接到PC端的COM口上去。
基于ATMEGA128和GM8125多路异步串行通信应用设计
第 4期
李
杰等 : 基于 A T ME G A1 2 8和 G M8 1 2 5多路异步 串行通信应用设计
6 1
2 . 2 软件 设计 要 求
3 . 2 软 件设 计
串 口通 信 系统 的软 件设 计要 求具 体如 下 :
1 ) 扩展 的 1 0路 串 口, 用来 传输 打卡器 数据 , 每张
第4 0卷第 4期
6 0 2 0 1 3年 8月 2 5日
数
字
通
信
Vo l 40,No . 4
Aug .2 5 201 3
Di g i t a l Co mmun i c a t i o n
D OI : 1 0 . 3 9 6 9 / j . i s s n . 1 0 0 1 — 3 8 2 4 . 2 0 1 3 . 0 4 . 0 1 4
加一个地址 , 以此 来表示数据是从哪个 串口打卡 ; 2 ) 给上 一数 据 的开 头 加 上 2个 数 据 0 x e e , 0 x e e 来表 示 报 头 , 给 数 据 结 尾 加 上 2个 数 据 0 x e d , 0 x e d
5 7 6 0 0 b i t / s , 初始 化 流程 图如 图 1 所示。
泛, 在 很多 场合 需要 用 单 片 机对 现场 的信 息 进 行采 集与处 理 , 并 与上位 机进 行通 信 , 这 往往 会遇 到单 片
机 串 口不 足 的问题 , 所 以需要 对 串 口进 行扩展 。
在本 文 中需 要完 成 把 a t me g a 1 2 8的 2个 异 步 串
行 口扩展 成每 一个 串行 口的 五 收一 发 的 电路 , 所 以门的 串 口
基于单片机和GM8125的多路串口收发器设计
C m u K ov d ea d T c n l y电脑 知 识 与技术 o p  ̄r n  ̄e g n e h oo l g
Vo . , . 0 Ap i 2 , p 2 2 — 4 4 2 3 1 No 1 , rl 01 p . 4 2 2 2 , 4 4 7 1
基于单片机和 GM8 2 1 5的多路 串口收发器设计
paal la d m u t~c nne aa ta s evng r l n li ha e ld t r n c i i .The s t m sno n y e s nd c ve i ntt s ,bu lo e s O e e iso n f to yse i to l ay a on n e O u e tas ay t xtnd t w uncin. Fnal ood rs tha e n obti e n prcia ppi ai n. i l ag y eul sb e an d i a tc la lc to Ke y wor :8 51 C U ;GM 8 25 e a x nso ds 0 M 1 ;sr le pa in;p rle nd m u t—c a e r nsevng i a alla li— h nn lta c ii
张 瑞 ,见 王 。 成 李 为 ,刚 .
(. 庆 大 学 光 电技 术及 系 统 教 育 部 重 点 实 验 室 , 庆 4 0 4 2重 庆 市 计量 质 量 检 测 研 究 院 , 庆 4 0 3 ) 1 重 重 0 04:. 重 0 0 0
1扩5异步串口扩展芯片GM8125中文资料
1概述GM8125可以将一个全双工的标准串口扩展成5个标准串口,并能通过外部引脚控制串口扩展模式:单通道工作模式和多通道工作模式,即可以指定一个子串口和母串口以相同的波特率单一的工作,也可以让所有子串口在母串口波特率基础上分频同时工作。
该芯片工作在多通道模式下时,子串口能主动响应从机发送的数据,并由母串口发送给主机,同时返回子串口地址。
该模式使每个从机的发送要求都能被及时地响应,即使所有从机同时有发送要求,数据也不会丢失,基本实现了主控单元和外设通讯的实时性。
该芯片母串口和子串口的工作波特率可由软件调节,而不需要修改外部电路和晶振频率。
该芯片的外部控制少,应用灵活,编程使用简单,适用于大多数有串口扩展需求的系统。
2特征——采用写控制字的方式对芯片进行控制——各子串口波特率可调(统一调节)——数据格式10位或11位可选——单通道模式下,最高波特率支持20Mbps;多通道模式下,子串口最高波特率38400bps ——子串口数:5个——由一个引脚选择芯片的工作方式是单通道工作模式还是多通道工作模式——在单通道工作模式下,芯片工作无需初始化设置,工作串口由地址线控制选择——在多通道工作模式下,各子串口的波特率等于母串口波特率的6分频——在多通道工作模式下,接收时地址线SRADD2~0向MCU返回接收子通道的地址,MCU 接收到母串口送来的数据后就可根据SRADD2~0状态判断数据是从哪一个子串口送来的;发送时先由MCU选择子串口再向母串口发送数据——与标准串口通讯格式兼容,TTL电平输出——宽工作电压:2.3~6.7V——输出波特率误差小于0.2%,输入波特率误差要求小于2.8%——每bit采样16次,提高数据正确性——输入地址引脚有50~80KΩPull-Down电阻,其它输入引脚有50~80KΩPull-Up电阻(OSCI除外)3封装及引脚功能说明GM8125提供多电源和单电源两种封装,并提供DIP、SDIP、SOP、SSOP等多种封装形式,用户可根据各自系统的应用环境选择不同等级的封装,引脚排布见图1所示:VDDMSSTADD0STADD1STADD2SRADD0SRADD2RSTRXD0TXD0RXD5RXD4RXD3RXD2RXD1TXD5TXD4TXD3TXD2TXD1OSCOOSCIVDDGNDMSSTADD0STADD1SRADD0SRADD1RSTRXD0TXD0RXD3RXD2TXD3TXD2OSCOOSCIGNDVDDNCVDDTXD4RXD4TXD5RXD5SRADD2STADD2图1 GM8125引脚排布图该芯片的各引脚功能描述见表1:表1 芯片引脚功能说明引脚名方向说明OSCO Out 振荡器输出;OSCI In 振荡器输入;TXD1 Out 子通道1的发送端口;RXD1 In 子通道1的接收端口;TXD2 Out 子通道2的发送端口;RXD2 In 子通道2的接收端口;TXD3 Out 子通道3的发送端口;RXD3 In 子通道3的接收端口;TXD4 Out 子通道4的发送端口;RXD4 In 子通道4的接收端口;TXD5 Out 子通道5的发送端口;GND 电源地;RXD5 In 子通道5的接收端口;TXD0 Out 母通道的发送端口;RXD0 In 母通道的接收端口;RST In 系统复位SRADD2 In/Out 接收子通道地址2;SRADD1 In/Out 接收子通道地址1; SRADD0 In/Out 接收子通道地址0; STADD2 In 发送子通道地址2; STADD1 In 发送子通道地址1; STADD0 In 发送子通道地址0;MS In 模式选择,MS =1,单通道工作模式;MS =0,多通道工作模式; 地址线为全‘0’时,MS 为命令字读写控制引脚,MS=1,读命令字,MS=0,写命令字; VDD电源电压;4 芯片功能详细描述4.1 单通道工作模式当模式控制引脚MS = 1时,芯片工作在单通道工作模式下,单通道模式在一个时刻只允许一组RXD 和TXD 与母串口进行通讯。
基于GM8125的单片机多串口通信电路的设计与实现
( v l ies yo n ie r g Wu a 3 0 3 C ia Naa v ri f gn ei , h n4 0 3 , hn ) Un t E n
Ab ta t T ip p r rvd ste rj c o mmu iaincrut o sr c: hs a e o ie oe tfc p hp o nc t i if mutsra o t f5 co h o c l —eil r o 1mirc i p
Ke r s s ra - r n i n y wo d : e i l po t pe s o ;GM - 1 5 1 mir c i 8 2 ;5 c o hp
1 引言
随着单片机在工业控制等领域的应用越来 越广泛 ,在很 多场合,需要单片机独立 的作为 下 位机 对 现 场 的信 号 进 行采 集 与 处 理 ,并 与 上
能 ,给 出了软件 的设计 思路 和流程 ,以及最 终测试 的效 果 。
关键 字 :串 口扩展 GM8 2 5 1 5 1单片机
中图分 类号 :T 1 .2 T 2 3 N9 1 P 7 7
文献标 示码 :A
文 章编 号 :1 0 —8 2(0 1 10 2 .3 0 34 6 2 1)1-0 20
该 芯 片工 作 在 多通 道 模 式 下 时 ,子 串 口能主
动 响 应 从 机 发 送 的 数 据 , 并 由母 串 口发 送 给 主 机 ,同 时返 回子 串 口地址 。该 模 式使 每个 从 机 的 发 送 要 求 都 能 被及 时地 响应 , 使 所 有 从机 同 时 即 有 发 送 要 求 ,数 据 也 不 会 丢 失 ,基 本 实 现 了 主控
GM8125产品简介
GM8125产品简介
GM8125可为用户提供最简单和高性能的串口扩展方案,该芯片子串口最高波特率支持20Mbps。
该芯片提供两种工作模式,用户可根据需要灵活选择。
该芯片母串口和子串口的工作波特率可由软件调节,而不需要修改外部电路和晶振频率。
GM8125芯片的外部控制少,应用灵活,编程使用简单,适合于大多数需要多串口扩展的应用场合。
★特性
·扩展5个子串口
·采用写控制字的方式对芯片进行控制
·各子串口波特率可调(统一调节)
·数据格式10位或11位可选
·两种工作模式,用户可根据自己的系统需求灵活选择.单通道模式下最高波特率支持20Mbps;多通道模式下最高波特率38400bps ·与标准串口通讯格式兼容
·宽工作电压
·工作温度范围:-40℃~85℃
·输出波特率误差小于0.2%,输入波特率误差要求小于2.8%。
嵌入式系统中扩展串行口的几种方法
为 000 时写命令字 引脚 MS 为 1 SP2338 唤醒 但由于 SP2338 的唤
STADD2 ̄STADD0 为 000 时读命令 醒时间需要 25ms 左右 故用于芯片
字 进行工作方式设置时 芯片的 唤醒的数据将不会被主机接收 因
帧格式和母串口工作波特率与上一 此 可以先发送一个字节数据用于
134 2006.7 电子设计应用
万方数据
嵌入式系统
讯 并且通讯过程完全由主机控制 的帧格式为11bit 母串口波特率为
的系统 多通道模式下 各子串口 7200bps
波特率相同 允许所有子串口同时
基于 SP2338 的串行口扩展
与母串口通讯 母串口以子串口波
S P 2 3 3 8 是采用低功耗 C M O S
参考文献 1. 刘毓梅等 通过异步串口扩 展芯片 GM8123/25 的原理和应用 成都国腾微电子公司 2004 2.李华艾编 Mcs-5系列单片机 实用接口技术 北京航空航天大学 出版社 2001
136
133 发出一个中断 调用中断例 程 利用掉电保护电路所维持的工 作时间保存当前打印位置 系统停 止工作 待重新上电后检测到 打 印未完成 标志 则读出最后一张 发票明细数据 从断电时记录的位 置继续打印出一张完整的发票 并 清除标志
相似文献(10条)
数据安全性处理 税控收款机集商务 税控 管 理等功能于一体 对数据的传输和 存储要求相当高 需要能够正确地 传输 存储 生成及反馈数据 因 此 对安全性的要求也相当高 本 系统的安全性设计从以下几个方面 来体现 系统中采取了用户权限分级管
理的方法 设置了三种具有不同操 作权限的角色 系统管理员 收款 员 税务稽查员 用户与角色关联 用户密码采用 6 位  ̄8 位数字 密码 以密文形式存储在Flash内 进入相 应的用户模式都要通过对应的密码 校验 才能够登录税控收款机 执 行本用户级的相应操作
8255芯片初始化编程方法
8255芯片初始化编程方法
8255芯片是一种并行I/O接口芯片,由Intel公司生产。
它有三个8位I/O 端口,分别为端口A、端口B和端口C,以及一个控制字寄存器。
通过向控制字寄存器写入不同的控制字,可以配置8255芯片的工作模式,包括输入、输出、中断等。
初始化8255芯片的编程方法如下:
1. 确定工作模式:根据实际需要,确定8255芯片的工作模式。
8255芯片
有四种工作模式,分别为方式0、方式1、方式2和方式3。
2. 配置控制字:根据工作模式,计算控制字的值,并向8255芯片的控制字寄存器写入控制字。
控制字的计算方法可以参考8255芯片的数据手册。
3. 配置端口:根据实际需要,向端口A、端口B和端口C写入相应的数据。
需要注意的是,向端口写入数据时需要将相应的控制位设置为1,否则数据无法写入。
4. 中断配置:如果需要使用8255芯片的中断功能,需要根据实际情况配置中断向量和中断触发方式等参数。
需要注意的是,具体的编程方法可能会因为不同的开发环境和编程语言而有所不同。
因此,在实际编程时,需要参考具体的开发环境和编程语言的相关文档。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一转多串口芯片GM8125的初始化程序
2009-02-22 09:38
由于新产品的需求,原先mega64l的两个串口不够用了,需要在产品里加入一个扩展串口芯片,选择了GM8125(成都一家公司产的,用到现在感觉还行),但开始和这位同志的沟通上出现了不少问题,现在终于是和他熟悉了,把我做的GM8125初始化程序写在这里,希望能对大家有点用,不完善之处请指出,我会很感激的。
//用PB口控制GM8125的各个控制引脚
#define CHOOSE_MODE PB0 //8125通道模式选择
#define STADD0 PB2 //8125 STADD0
#define STADD1 PB3 //8125 STADD1
#define STADD2 PB4 //8125 STADD2
#define SRADD0 PB5 //8125 SRADD0
#define SRADD1 PB6 //8125 SRADD1
#define SRADD2 PB7 //8125 SRADD2
//将某引脚置1
void setb_port(uint8_t i0,uint8_t i1)
{
switch(i0)
{
case 1:PORTA|=(1<<i1);
break;
case 2:PORTB|=(1<<i1);
break;
case 3:PORTC|=(1<<i1);
break;
case 4:PORTD|=(1<<i1);
break;
case 5:PORTE|=(1<<i1);
break;
case 6:PORTF|=(1<<i1);
break;
case 7:PORTG|=(1<<i1);
break;
default:break;
}
}
//将某1引脚清0
void clr_port(uint8_t i0,uint8_t i1) {
switch(i0)
{
case 1:PORTA&=~(1<<i1);
break;
case 2:PORTB&=~(1<<i1);
break;
case 3:PORTC&=~(1<<i1);
break;
case 4:PORTD&=~(1<<i1);
break;
case 5:PORTE&=~(1<<i1);
break;
case 6:PORTF&=~(1<<i1);
break;
case 7:PORTG&=~(1<<i1);
break;
default:break;
}
}
//延时函数---1ms
void delay_ms2( uint16_t iysh)
{
uint16_t iy;
for(iy=0;iy<iysh;iy++)
{
_delay_loop_2(1842);
}
}
//接收中断1
SIGNAL(SIG_UART1_RECV)
{
unsigned char c00=UDR1;
uint8_t rdpinb=0;
rdpinb=PINB;
switch((rdpinb&0xe0)>>4)
{
case 0:
scon_order[0]=c00;
break;
....//program code
default:
break;
}
}
//发送中断1
INTERRUPT(SIG_UART1_TRANS) //INTERRUPT
{
return;
}
//把GM8125初始化为多通道工作模式
void uwart_init(void)
{
uint8_t result=0;
UCSR1B=0xdc; //8125复位后贞格式为11bit,与8125同步
while(result!=0xf3)
{
wd_tmer=0;
delay_ms2(30);
clr_port(7,PG4); //芯片复位 rst8125-PG4
delay_ms2(50);
setb_port(7,PG4);
delay_ms2(700);
clr_port(2,PB0); //多通道 MS=1时工作在单通道模式,=0工作在多通道模式
PORTB&=0xe3; //111 0,00 11 PB2、PB3、PB4置0,进行8125设置此模式下MS=1读命令字,=0写命令字
delay_ms2(30);
//4800:UBRR1L=191; //7200:UBRR1L=127; //9600:UBRR1L=95;
//19200:UBRR1L=47; //57600:UBRR1L=15; //115200:UBRR1L=7;
//14400:UBRR1L=63; //28800:UBRR1L=31; //
UBRR1L=127; //7200--`120--133 60--67
delay_ms2(2);
UDR1=0xf3; //波特率设定9600
delay_ms2(25);
setb_port(2,PB0); //读设定
delay_ms2(300);
result = scon_order[0];
}
clr_port(2,PB0);
UBRR1L=15; //母串口波特率要为自串口波特率的6倍 57600
delay_ms2(1);
PORTB|=0x1c;
delay_ms2(3);
UCSR1B=0xd8;
delay_ms2(1000); //初始化完要等一段时间才能对其接发数据
}
//通过串口1经8125向各个模块发送数据(多通道模式)
void send1_obt(uint8_t pot,uint8_t cs)
{
uint8_t ss;
ss=PORTB&0xe3; //111 0,00 11 STAD0~2 置0附给ss
switch(pot)
{
case 0:PORTB=ss; //111 0,00 11 PB2,PB3,PB4置0,进行8125工作方式的设置
break;
case 1:PORTB=ss|0x04; //000 0,01 00 选择子串口1发送
break;
case 2:PORTB=ss|0x08; //000 0,10 00 选择子串口2发送
break;
case 3:PORTB=ss|0x0c; //000 0,11 00 选择子串口3发送
break;
case 4:PORTB=ss|0x10; //000 1,00 00 选择子串口4发送
break;
case 5:PORTB=ss|0x14; //000 1,01 00 选择子串口5发送
break;
default:
break;
}
//把GM8125初始化成单通道工作模式
void uwart_init(void)
{
clr_port(7,PG4); //芯片复位 rst8125-PG4
delay_ms2(50);
setb_port(7,PG4);
delay_ms2(700);
setb_port(2,PB0); //MS=1,工作在单通道工作模式下
delay_ms2(30);
PORTB=0x91; //选择串口4作为输出输入通道
delay_ms2(30);
UBRR1L=7; //63---对应波特率为14400,47----对应19200 对应115200---7
delay_ms2(2);
UCSR1B=0xd8;
delay_ms2(1000);
}
//在单通道工作模式下通过串口1发送数据
void send1_obt(uint8_t cs)
{
UDR1 = cs;
delay_ms2(5);
}
以上就是GM8125的单多通道初始化过程,注意的是在多通道工作模式下切换到单通道工作模式要等各串口数据发送完毕,否则可能出现丢数据的现象。
代码是在GCC里编译通过的,表述不全之处多多指教。