|
UART协议及其在光传输中的应用 |
UART Protocol And Its Application in Optical Transmission
|
■ 大唐电信光通信分公司光网络2部 赖万玖 |
摘 要: 本文阐述了MPC860 UART协议的工作特点,介绍了几种重要寄存器及其在光传输中的一个具体应用实例,实践证明了UART在光传输中对业务的监控,告警的上报等起着关键的数据交换作用。它是一种方便的、低速的数据通信协议。
关键词:UART、地址、寄存器、光传输
引言
CPM(communications processor module)通信处理模块是MPC860的一个相当重要部分,而UART(universal
asynchronous receiver transmiter)又是CPM中较常用的低速数据通信协议,它广泛用于许多场合,特别是在通信领域内,它以简单、方便、低速的特点用于数据链路层进行数据通信。本文这样安排:在文中的1部分阐述UART协议的工作特点,2部分阐述几种重要的寄存器,3部分介绍一个在光传输中的UART协议应用。
1.UART协议的工作特点
1.1数据采样
UART协议是实现设备之间低速数据通信的标准协议。因发送时不需同时发送时钟,故此协议为异步。UART链接典型为38400,9600波特
。
如图1,UART字符格式为1个起始位,5~8个数据位,1个地址位或奇偶位(可选),1个停止位。
由于接收器、发送器异步工作,无需联接接收和发送时钟。接收器采取对输入数据流高度采样方式,通常采样为16,并根据采样值确定位值。按惯例,使用16个采样值的中间三个值。
1.2 UART帧区分
UART一参数MAX-IDL,用来设置空闲字符的多少。一旦一字符在线上被接收,UART控制器开始计数接收到的空闲字符。若下一数据字符接收前,一MAX-IDL多个空闲字符被接收,则产生空闲时间,缓冲区被关闭。顺次对CPU32+核心发出一中断请求,要求从缓冲区接收数据。因此,MAX-IDL给UART模式提供一区分帧的便利方法。
图1:UART字符格式
图2:多站操作的两种结构
空闲字符按以下公式计算其位数:1(起始)+数据长度(5,6,7,8)+1(若奇偶校验被使用)+停止位(1)。例如,1个(起始),8位数据,无校验,1个停止位,则空闲字符MAX-IDL为10位。
1.3 UART地址识别
多站系统中,网络上可能会有两个以上的站,每个站有一特定的地址。图2为此种结构的两个示例。由许多字符构成的帧可被广播,其第一字符做为目的地址。为实现此功能,UART帧被扩展一位,以区别地址字符和正常数据字符。
UART可被设置为操作于一多站环境,此环境下,支持以下两种模式:
自动多站模式 当地址于两个预置值之一相匹配时,UART控制器自动检查到来地址字符,接收随后的数据。
非自动多站模式 UART控制器接收所有数据。一地址字符总被写入一新缓冲区。
综上所述,UART协议采取一种通过数据采样来确定位值的机理,具有简单准确的定帧模式,而且广泛用于多站系统中,具有自动多站和非自动多站两种模式,来区分地址和数据。
2.几种重要寄存器
在嵌入式开发中,对寄存器的理解和正确配置至关重要。对MPC860的UART协议,有几个重要寄存器,它们是:管足配置寄存器、波特率配置寄存器、通信处理命令寄存器、SCC通用模式寄存器、发送和接收缓冲区描述器、UART的特定参数、SCC协议专用模式寄存器、SCC协议事件寄存器、UART屏蔽寄存器。
管足配置寄存器一般是针对收、发两根管足,有开漏寄存器、数据寄存器、数据方向寄存器,它们可被设置为具有串行信道输出的能力和被设置为输入输出口。波特率配置寄存器负责把波特率指向所用的串口和配置波特率大小。通信处理命令寄存器主要用于判断命令的发出是否和阻止传送。SCC通用模式寄存器主要用于协议的选择和传输格式的配置。发送和接收缓冲区描述器主要用于收发数据和判断接收的是地址还是数据,数据的错误情况等。UART的特定参数用来部分初始化UART。SCC协议专用模式寄存器主要用于设置UART处于自动多站和非自动多站模式。事件寄存器主要用于判断是收中断还是发中断。屏蔽寄存器主要用于收、发使能。
因此,对UART协议来说,上面几种寄存器是很重要的,它们主要完成波特率配置,协议的选择,收发判断处理等。
3.UART协议在光传输中的应用
3.1通信流程
在光传输中,用一张网管监控盘(MCP)对许多业务盘(MCU)进行通信,我们采纳了MPC860的UART协议完成它们间的数据交换通信。如图3,MCP是网管监控盘,它主要完成对MCU的监控,负责对MCU进行库的配置,采集MCU上报的告警和性能等。业务盘(MCU)负责业务在传输中的性能、状态变化等。
这里我们对MCU通信进行阐述:MCU处于从模式,其协议软件流程如图4。
图3:典型应用
图4:软件流程
当有收中断到来时,判断为地址还是数据。对地址作匹配与否,以确定MCP是否发给本地MCU盘;对数据收到后,进行校验,正确则处理,否则回到自动多站;MCU盘用ACK来判断MCP盘是否正确收到来自MCU的数据。
3.2通信软件
我们用SCC3串口进行UART通信,波特率设置为9600bps,下面是几种主要寄存器的初始设置:
/*波特率配置寄存器*/
S_SI_ClockRouteReg|=0x00090000;/*clock route Connect the BRG2 clock
to SCC3*/
S_SI_ClockRouteReg &= 0xffbfffff;
clkdiv = (CPUSYSCLKRATE * 1000000) / (9600 * 16) - 1;
S_BRG2ConfigReg = RESET_BRG;
S_BRG2ConfigReg=EN_BRG_COUNT +USE_BRGCLK+ (clkdiv <<1);
/* 管足配置寄存器 */
S_PortAPinAssgmntReg |= (BIT5 | BIT4);
S_PortADataDirReg &= ~(BIT5 | BIT4);
S_PortAOpenDrainReg &= ~(BIT5 | BIT4);
/*UART的特定参数*/
MaxRxBufferLgth(S_SCC3_BASE) = 250; /*接收buffer最大长度250*/
UART(S_SCC3_BASE).max_idle =10; /*结束接收的条件1*/
UART(S_SCC3_BASE).break_cnt_reg = 1;
UART(S_SCC3_BASE).parity_err_cntr = 0;
UART(S_SCC3_BASE).frame_err_cntr = 0;
UART(S_SCC3_BASE).noise_cntr = 0;
UART(S_SCC3_BASE).break_cond_cntr = 0;
UART(S_SCC3_BASE).addr1 =BoardNumber; /*本盘地址*/
UART(S_SCC3_BASE).addr2 = 0xff; /*广播地址*/
UART(S_SCC3_BASE).toseq = 0;
UART(S_SCC3_BASE).character1=CTRL_CHAR_TBL_ END;/* 无控制字符*/
UART(S_SCC3_BASE).character1 = ENDCHAR;
UART(S_SCC3_BASE).character2=CTRL_CHAR_TBL_END; UART(S_SCC3_BASE).character3
= CTRL_CHAR_TBL_END;
UART(S_SCC3_BASE).character4 = CTRL_CHAR_TBL_END;
UART(S_SCC3_BASE).character5 = CTRL_CHAR_TBL_END;
UART(S_SCC3_BASE).character6 = CTRL_CHAR_TBL_END;
UART(S_SCC3_BASE).character7 = CTRL_CHAR_TBL_END;
UART(S_SCC3_BASE).character8 = CTRL_CHAR_TBL_END;
UART(S_SCC3_BASE).rccm = 0xC0FF;/*屏蔽控制字符比较*/
/*发送和接收缓冲区描述器SCC3收发BD初始化 */
S_BuffDescr[RX_BD3].status = EMPTY + WRAP + LOG_EVEN T;/*1个收BD,允许收中断*/
S_BuffDescr[RX_BD3].length = 0;/*开始只收1字节地址*/
S_BuffDescr[RX_BD3].address = RxTemp;
S_BuffDescr[TX_BD3].length = 1;
S_BuffDescr[TX_BD3].address = &TxTemp0[0];
S_BuffDescr[TX_BD3].status = WRAP;/*1个发BD,以数据形式发 出,不允许发中断*/
S_BuffDescr[TX_BD3+1].length = 2;
S_BuffDescr[TX_BD3+1].address = &TxTemp[0];
S_BuffDescr[TX_BD3+1].status = WRAP;
/*SCC协议事件寄存器*/
S_SCC3EventReg = 0xffff; /*清所有事件*/
/*SCC协议专用模式寄存器*/
S_SCC3ProtoModeReg = 0x3C00;
4.结论
本文重点阐述了UART协议的工作原理,介绍了一个具体实例。并且我们采用的这种方式已得到成功而广泛的应用,UART确为一种方便、低速,可靠的数据通信协议。
|
|