|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1 引言
在许多复杂的测控、测试及数据处理系统中,一般需要与大量的被控对象、被测试设备及自动化仪表进行通信,而这些对象、设备及仪表等所提供的接口大多是标准的异步串行接口形式,因此,在以CPU为核心,与多路外围设备进行串行通信的测控、测试系统中,需要对串行接口进行扩充,通过选择功能合适的接口器件完成系统的设计要求。
目前,市场上出现了多种型号的接口芯片, Philips半导体公司生产的四通道通用异步接收/发送器芯片SC26C94是其中之一。它以高集成度、低功耗、高性能、使用灵活等特点被广泛应用于航空、航海、工业控制等领域中。
2 SC26C94器件
SC26C94是采用COMS技术生产的四通道通用异步接收/发送器芯片,共有4个相互独立的通道,且每个通道各有4个数字I/O口和2个16位定时/计数器,它们均可以通过编程设置其工作方式。结构框图如图1所示。
2.1 SC26C94特点
SC26C94为用户提供了+5V的供电方式,信号电平与TTL电平兼容,有DIP和PLCC两种封装形式,并具有以下特点:
·8字节发送FIFO;
·8字节接收FIFO;
·数据格式:5~8位数据位,包括奇校验、偶校验和无校验、1、1.5、2位停止位;
·发送和接收可设置不同波特率(23种固定波特率:50~230.4k或外部时钟的1倍或16倍);
·校验错误、帧错误和超限错误检测;
·起始位错误检测;
·通道工作模式可编程设置:即普通全双工、自动回绕、局部循环和远程循环四种模式;
·中断优先级可编程设置并自动识别;
·具有掉电保护模式;
·每个接收器配有“看门狗”电路;
2.2 SC26C94寄存器
SC26C94的工作方式是可编程的,工作方式通过对其一系列寄存器设置来定义,因此使用过程中,需要了解以下寄存器功能:
(1)MR0:工作方式寄存器0
定义发送和接收寄存器的FIFO工作状态及接收器“看门狗”是否启动。
(2)MR1:工作方式寄存器1
该寄存器和MR0组合定义接收FIFO工作状态及数据格式,包括:5~8位数据位、奇校验、偶校验和无校验、1、1.5、2位停止位。
(3)MR2:工作方式寄存器2
定义通道工作模式(包括普通全双工、自动回绕、局部循环和远程循环),停止位(1、1.5、2位)。
(4)CSR:时钟选择寄存器
该寄存器与BRG(波特率产生器)、ACR(辅助控制寄存器,选择波特率设置方式)一起设置接收和发送波特率。
(5)CR:命令寄存器
定义各发送接收端口工作状态及是否允许发送接收。
(6)SR:状态寄存器
反映发送接收缓冲器状态及帧错、奇偶校验错、超限错等状态。
(7)IMR:中断屏蔽寄存器
定义各端口是否允许中断。
(8)ISR:中断状态寄存器
反映当前中断类型。
(9)CIR:当前中断寄存器
反映当前中断的通道号和发送或接收中断类型。
3 SC26C94在测控系统中的应用
某航空测控系统是以80X86为核心,由A/D、 D/A及开关量控制、10种测试设备组成的,其中测试设备中有8路为标准串行通信,分别为发动机转速、气压、高度、速度、遥测调制器、遥控解调器、地磁方向、GPS等量。系统选用两片 SC26C94,扩充8个串行口,实现80X86与8路测试设备的通信。
3.1 硬件设计
(1)振荡电路
SC26C94内部有一个用于构成振荡器的高增益反向放大器,引脚X1与X2分别是此放大器的输入端和输出端。此放大器与外部晶体构成一个振荡器,此例中采用了内部振荡电路。如图2所示,G1(G2)为3.6864MHz晶体;外部电容C2(C5)、 C3(C6)的典型值为24pF;另外,使用外部晶振时,可经过一非门,在非门输出端并联一个1k W的上拉电阻,从公共点引出与引脚X1连接。
(2)复位电路
SC26C94复位时间必须保证RESET引脚上出现 1ms以上稳定的高电平,才可实现可靠的复位。因此无论是简单还是复杂的复位电路,均要保证此条件。图2中使用了简单的复位电路,其中R1 (R2)=1.5kW、C1 (C4)=10mF。
(3)接口电路
如图2所示,通过ISA总线将80X86CPU与SC26C94及其它系统连接起来。其中D1完成总线驱动、隔离和地址译码,RXD1~RXD8与TXD1~ TXD8是SC26C94的接收/发送端,分别与外部的8路测试设备连接,实现CPU与外围设备的通信。
3.2 SC26C94软件设计
SC26C94的软件设计首先是对其进行初始化,然后再分别对各个中断源进行中断服务程序的设计;可选择C或汇编语言进行编程。
3.2.1 初始化编程
初始化编程主要选择芯片工作方式,包括数据格式、波特率、中断允许、接收或发送缓冲器所允许的字节数等。编程方法及顺序如下:
(1)复位接收FIFO(CR)复位发送FIFO (CR);
(2)禁止DACKN;
(3)选择波特率组别(BRGrate);
(4)定义中断向量类型(ICR);
(5)选择波特率组别(ACR);
(6)设置中断屏蔽寄存器(IMR);
(7)指针指向MR0(CR);
(8)设置数据格式及波特率(MR0、MR1、 MR2、CSR);
(9)接收发送允许(CR)。
以C语言为例对通道A初始化程序设计如下:
outportb(uaraddr,uarCRa);
outportb(uarcen1,0x20);
outportb(uarcen1,0x30);
outportb(uaraddr,uarDACKN);
outportb(uarcen1,0);
outportb(uaraddr,uarBRGrate)
outportb(uarcen1,0x00);
outportb(uaraddr,uarICR);
outportb(uarcen1,0x02);
outportb(uaraddr,uarACRab);
outportb(uarcen1,0x80);
outportb(uaraddr,uarIMRab);
outportb(uarcen1,uar1IMRabd);
//UAR1 a yx1(laser)
outportb(uaraddr,uarCRa)
outportb(uarcen1,0xb0);
outportb(uaraddr,uarMRa);
outportb(uarcen1,0x80); outportb(uarcen1,0x53);
outportb(uarcen1,0x07);
outportb(uaraddr,uarCSRa);
outportb(uarcen1,0x88);
outportb(uaraddr,uarCRa);
outportb(uarcen1,0x05);
3.2.2 中断服务程序设计
由于SC26C94四通道中的任何一个都可引起中断,因此在中断服务程序中首先要识别中断源,即识别中断是由哪一个通道引起,是发送中断还是接收中断,是有错误还是无错误等。流程如图3所示。
根据流程图可编程如下:
void interrupt (*oldvect2)();
void interrupt UAR1_interrupt(void)
{
//保护现场//
for(ii2=1;ii2<=5;ii2++)
{
outportb(uaraddr,uarupdateCIR);
outportb(uarcen1,0x00);
outportb(uaraddr,uarCIR);
uar1cir=inportb(uarcen1);
outportb(uaraddr,uarISRab);
uar1israb=inportb(uarcen1);
outportb(uaraddr,uarISRcd);
uar1isrcd=inportb(uarcen1);
outportb(uaraddr,uarGIBCR);
count1=inportb(uarcen1);
if (count1 > 8) count1 = 8; stt1=uar1cir&0x1f;
if(stt1<=3)break;
switch(stt1)
{
case 0x1c:
//中断服务程序//
break;
default:;
}
}
//恢复现场//
}
4 结论
上述测控系统设计及运行过程表明,SC26C94 具有使用灵活、功能丰富、系统连接方便、编程简单、可靠性高等特点,另外,其合理的性能价格比及畅通的货源渠道,表现出较好的工程实用特性,是一种实用的接口芯片,可广泛应用于自动化仪表、测试、测控及数据处理等系统中。 |
|