|
ST16C550在电力电量参数测量系统中的应用 |
The Application of ST16C550 in the System of Parameter
Measurement of Electric Power & Quantity
|
■ 河海大学计算机及信息工程学院 盛惠兴 黄礼军
|
摘 要:ST16C550是一种带有16字节收发FIFO存储器的通用异步收发器(UART)。本文详细介绍ST16C550的 内部结构及其寄存器的使用,结合电力电量参数测量系统的设计讨论ST16C550的编程方法。
关键词:ST16C550 DSP TMS320F206 UART 串口扩展
引言
ST16C550是EXAR公司推出的目前最稳定、最可靠的UART芯片之一,能够提供数据的串/并、并/串转换功能。其中串行数据流的同步功能是通过在传输数据中加入起始和结束比特组成数据字节来实现的,通过在数据字节中附加奇偶校验位确保数据的完整性。接收方检验奇偶校验位确定是否出现传输错误。用普通电路实现这些功能将非常复杂,尤其是将电路集成在单片芯片上时。而ST16C550采用0.6mm
CMOS工艺来达到低功耗、高速度、高集成度的要求。
ST16C550带有16字节收发FIFO存储器与高速存储器进行通信,这就要求很高的处理速度。目前,由于电力系统在实时性、大数据量等方面的要求不断提高,51和96系列微处理器已不能很好满足这些要求。TI公司的DSP处理器由于采用先进的哈佛结构(程序存储器和数据存储器具有各自独立的总线),具有ns级指令系统,已逐渐应用到电力系统中来。TMS320F206(以下简称F206)是'C2XX系列DSP的代表,其独具的片内FLASH是一种可电擦除和编程的非易失性存储器,这使用户的开发变得更加容易。
对TMS320系列的数字信号处理器来说,设计串口的方法一般有两种:第一种是利用通用的I/O口线XF和/BIO来构成串口,由软件来设定波特率,在DSP不忙的情况下,往往采用这种方法;但是当这两种I/O线被占用或通信的实时性要求较高时,DSP应该通过扩展异步通信芯片来实现高速串行通信。本系统即采用ST16C550来实现异步串行口的扩展。
ST16C550的内部结构及主要功能
ST16C550是一种具有异步收发功能的大规模集成电路芯片,内部结构主要包括以下几部分:
(1)数据总线和控制逻辑。该逻辑包括复位线、I/O读写总线、数据总线。通过总线可以直接与F206连接。
(2) 寄存器选择逻辑。ST16C550有3个片选信号CS0、CS1、/CS2,只有在CS0=CS1=1且/CS2=0时芯片被选中,在/DDIS=0时芯片有效。
(3) 中断控制逻辑。ST16C550内部定义了4级中断,都通过INT引脚向CPU发送中断请求信号。该逻辑还包括接收就绪/RXRDY、发送就绪/TXRDY。
(4) Modem控制逻辑。ST16C550所具有的Modem控制逻辑主要包括数据终端就绪信号/DTR、请求发送信号/RTS、输出信号/OP1、/OP2、清除发送信号/CTS、振铃信号/RI、载波检测信号/CD和数据就绪信号/DSR。
(5)数据收发逻辑。该逻辑包括Sin、Sout、XTAL1、XTAL2。当ST16C550接收数据时将Sin上的数据串行移入接收缓冲寄存器RBR供CPU读取;发送数据时将数据总线上的数据写入到发送寄存器THR,再从Sout端串行输出。
ST16C550的内部寄存器
ST16C550提供12个内部寄存器供监测、控制用。包括:数据保持寄存器(发送保持寄存器THR、接收保持寄存器RHR)、中断状态寄存器(ISR)、中断允许寄存器(IER)、FIFO控制寄存器(FCR)、线路状态寄存器(LSR)、线路控制寄存器(LCR)、Modem状态寄存器(MSR)、Modem控制寄存器(MCR)、临时数据寄存器(SPR)、波特率除数锁存器低位(LSB)/高位(MSB)。
ST16C550使用3位地址线A2~A0定义内部寄存器。除了A2、A1、A0之外,LCR.7也参与了波特率除数锁存器低位(LSB)/高位(MSB)的定义。只有在LCR.7=1且A2A1A0=000/001时才可以访问LSB/MSB。
(1) 数据保持寄存器(THR/RHR)
表1 中断源类型(略)
LCR.7=0且A2A1A0=000时,在读模式下RHR有效;THR在写模式下有效。
(2) 中断允许寄存器(IER)
LCR.7=0且A2A1A0=001时,可访问IER。IER的低四位定义了四种中断:接收器就绪中断、发送器空中断、接收器线路状态中断、Modem状态寄存器中断。相应位为1表示中断有效。高4位未定义,置为0。
(3) FIFO控制寄存器(FCR)
LCR.7=0且A2A1A0=010时,在写模式下可访问FCR。该寄存器用来设置收发FIFO触发电平、选择DMA模式等。比特0用作使能/禁止收发FIFO;FCR.1=
FCR.2=0(默认值)分别表示无FIFO接收/发送复位;FCR.3=0设置DMA模式"0",反之设置模式"1";比特4-5未定义;比特6-7则用于设置接收FIFO中断的触发电平。
(4) 中断状态寄存器(ISR)
LCR.7=0且A2A1A0=010时,在读模式下可访问ISR。ISR.0=0表示中断有效;ISR.1~ ISR.3定义中断源类型(如表1);比特4-5未定义;ISR.6=
ISR.7=0表示使用DMA模式;ISR.6= ISR.7=1则使用FIFO模式。
(5) 线路控制寄存器(LCR)
A2A1A0=011时,可访问LCR。该寄存器用来定义数据通信的格式、字长、停止位数目以及奇偶校验方式等。
LCR.0和LCR.1定义收发字长;LCR.2与字长结合定义停止位长度;LCR.3的默认值0表示无奇偶校验;当LCR.3=1且LCR.4=0时为奇校验,LCR.3=1且LCR.4=1时偶校验;LCR.3=LCR.5=1且LCR.4=0时奇偶校验位为1,LCR.3=LCR.5=LCR.4=1时为0,LCR.3=1、LCR.5=0时无效;LCR.6=0表示无发送间断状态;LCR.7=1且A2A1A0=000/001时选择LSB/MSB,LCR.7=0且A2A1A0=000/001则选择RHR/THR。
(6) Modem控制寄存器(MCR)
LCR.7=0且A2A1A0=100时,可访问MCR。该寄存器控制ST16C550与Modem及其它外设的接口。
(7) 线路状态寄存器(LSR)
LCR.7=0且A2A1A0=101时,可访问LSR。该寄存器提供ST16C550与TMS320F206之间数据传输的状态。各位含义为:
LSR.0=0表示RHR或FIFO寄存器中无数据;LSR.1~ LSR.4默认值皆为0分别表示无溢出错、无奇偶校验错、无帧格式错以及无间断状态;LSR.7=0表示无奇偶校验、帧格式以及空号错误。比特5为THR空指示器,表明ST16C550已发送就绪,当从THR中读取数据到TSR中时,LSR.5=1;LSR.6=1表示THR和TSR都为空,两者有一个不为空时LSR.6=0。
(8) Modem状态寄存器(MSR)
LCR.7=0且A2A1A0=110时,可访问MSR。该寄存器提供Modem以及其它与ST16C550相连的外设的状态。低4位用来表示有无信息的变化,MSR.0~MSR.3分别对应于/CTS、/DSR、/RI、/CD,当CPU从寄存器中读数据时,相应位置为0。MSR.4~MSR.7为1,分别表示CTS、DSR、RI、CD位有效。
(9) 临时数据寄存器(SPR)
ST16C550提供一个临时数据拇嫫鞔娲?位用户信息。
(10) 波特率除数锁存器(低位LSB/高位MSB)
除数锁存器的值在ST16C550初始化时进行设置,此时LCR.7=1,A2A1A0=000/001分别访问LSB、MSB。
ST16C550的软硬件设计
要正确使用ST16C550,必须同时保证硬件逻辑电路的正确连接和软件编程的准确无误。
(1) 硬件逻辑电路
ST16C550与F206及其外围电路的连接示意图如图1。
在逻辑电路图中,/DDIS直接接地保证芯片有效,三个片选信号中CS0、CS1接+5V电源,/CS2接地以选中ST16C550;/IOR、/IOW直接与F206的读写信号线/RD、/WR相连;数据线D0~D7与F206的低八位数据线相连;片内寄存器选择线A2~A0接F206的A13~A11;F206的异步数据收发引脚分别与Sout、Sin相连;中断信号INT与复位信号RESET各通过一个非门与CPU的中断请求信号线/INT2及复位信号线/RS相连。/AS直接接地,确保A0~A2有效。XTAL1、XTAL2与1.8432MHz晶振相连组成内部振荡电路。
注意:晶振与ST16C550之间的连线尽量短而粗!
(2) 软件编程
对ST16C550的编程包括两部分:初始化和数据收发。限于篇幅,这里仅介绍初始化部分。ST16C550的初始化编程分三步进行:
1. 首先设置分频次数(ST16C550采用16分频),对波特率除数锁存器低位(LSB)/高位(MSB)分别写入分频次数。当然,在写波特率除数锁存器低位LSB/高位MSB之前应当将80H写入线路控制寄存器(LCR)。
2. 其次设置线路控制寄存器(LCR),以便确定通信的格式。本系统采用8个数据位、1个停止位、奇偶校验位为0的数据格式。同样在写入前应将00H写入线路控制寄存器(LCR),以免数据误写入波特率除数锁存器的低位(LSB)/高位(MSB)。
3. 最后设置中断允许寄存器(IER),将相应的中断允许位置1。
因为本系统中ST16C550并没有控制Modem,故不必设置Modem控制寄存器(MCR)。
需要注意的是发送与接收数据必须使用相同的格式。
图1 ST16C550逻辑连接图(略)
体会
任何涉及到高频电路的系统,都要考虑抗干扰问题。本系统中在+5V电源和地线之间连接47 F、0.1 F两个电容来滤除高次谐波。晶振的两个引脚之间连接两个30pF的滤波电容,并尽量缩短晶振与ST16C550的连线。软件设计时也要采取如校验和等必要的抗干扰措施以获得最佳效果。
结束语
用ST16C550扩展基于DSP的电力电量参数测量系统中的异步串行口,硬件上可以减少外围电路的复杂性,软件设计简单方便,提高了开发效率,在实践中证明是可行的。
|
|