《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于GM814X的单片机串口扩展及其应用
基于GM814X的单片机串口扩展及其应用
来源:电子技术应用2012年第9期
张 伟, 李文魁, 陈永冰
海军工程大学,湖北 武汉430033
摘要: 介绍了基于C8051F340单片机和GM814X串口扩展芯片的串口扩展方法。针对实际装备的通信和接口需求,进行了RS-485通信终端的电路软硬件设计。实际应用表明,该通信终端设计可靠,性价比高,解决了单片机在串行通信系统中的串口局限问题。
中图分类号: TP334
文献标识码: A
文章编号: 0258-7998(2012)09-0096-04
Design and implementation of serial port extension based on GM814X
Zhang Wei, Li Wenkui, Chen Yongbing
Naval University of Engineering, Wuhan 430033, China
Abstract: his paper introduces a method of serial interface extension based on the C8051F340 MCU and the GM8141 chip, combines with the actual needs to design and implement, and gives the practical circuit of hardware and communication program section. The experimental application proved that the design is reliable, cost-effective and solves the limited serial port in the serial communication.
Key words : C8051F340; GM814X; serial port extension; serial communication

    在嵌入式系统中,串行接口设备凭借其控制灵活、接口简单、占用系统资源少等优点而得到广泛应用。以单片机为核心的嵌入式系统,单片机常需要连接多个串行外设,如上位计算机、串口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接收值
        &hellip;&hellip;
    }
    (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.

此内容为AET网站原创,未经授权禁止转载。