1 引言 在以单片机为核心的测控系统中.微控制器往往需要两个或两个以上的串行口与其他主机或外设进行通讯,如何使系统具备多个串行接口,是一个具有普遍性的问题。尤其在航空航天领域,由于GPS、大气数据系统、数字罗盘、无线电高度表、甚至陀螺等航空电子设备普遍采用串行通讯方式,单片计算机系统就更需要有多个串行口以满足与外界信息交换的需要。 2 常用的多串行口设计方法 ①选用多串行口单片机 直接选用多串行口单片机作为系统的CPU,显然是最直接有效的方法。现在有许多新型CPU配备两个或两个以上串行口,如W77E58、DS80C320、MSP430F149、C8051F020单片机和数字信号处理器TMS320C30有两个串行口,而cygnal的C8051F系列单片机有4-5个全双工的异步串行口。
②用CPU的I/O模拟串行口 当串行口的波特率设为9600波特时,传送一个bit需要100us左右,对于一般的单片机而言,软件定时器完全有能力按异步串行通讯协议模拟出串行口的时序。所以,用CPU的两个I/O口和一个软件定时器,就可以纯粹用软件模拟出一个串行口来。文献介绍了一种具体的实现方法,发送时,只需按时序一位一位输出数据即可,接收时,首先利用外部中断检测到I/O接收口上的起始电平,然后利用定时器按半个bit的时间长度延时接收第一个bit的数据,再按一个bit的时间长度延时依此读取其他位的信号。
③基于高速输入输出的软件串行口 80C196系列单片机配备了高速输入HSI和高速输出HSO接口.可以利用HSI和HSO来模拟串行口。数据的输出利用HSO,只要在HSO的定时器里写入与波特率对应的延迟时间,HSO每中断一次,输出一个数据位,直到停止位输出完毕。接收时,利用HSI自身的信号跳变检测功能检测起始位,并产生中断通知CPU开始接收数据,后续的数据位由软件定时器按波特率定时读取。文献详细介绍了实现方法,并给出了完整的程序代码;本方法在80C196MC/MD单片机中。则表现为事件处理阵列EPA和外设事物服务器PTS的应用,其优点是EPA的每个模块与CPU的指定引脚对应,减少了软件开销和程序设计的复杂度。
④16C550系列可编程通讯控制器 利用并行口扩展串行口的接口芯片种类较多,其中16C550系列通讯控制器普遍应用于计算机控制系统和通讯设备,以实现CPU与串行口和MODEM的通讯。16C550配备一个串行口,16C552配备两个串行口,而16C554配备四个串行口。16C550系列器件的实质是实现串行口与CPU并行口的转换,其自身有较强的数字逻辑功能。16C550系列器件的串行口工作方式均可编程,有的还带有开关量输入输出接口,可以作为CPU的开关量扩展接口用。
⑤用分立器件将并行口转换为串行口 文献提供了一种利用555定时器、D触发器和移位寄存器等分立元件实现串、并口互相转换的电路。该电路用定时器产生与波特率一直的同步时钟信号,把接收到的数据移位寄存到并口供CPU读取,或把并行口的数据移位发出,其实质是用若干个分立元件模拟16C550的功能。
⑥串行口扩展芯片 现在有一种专门的SP系列串行口扩展芯片,可以将一路高速的全双工串行口扩展为多路的低速全双工串行口,串口的波特率通过晶振统一确定。如SP2328和SP2338可以将一路母串口扩展为三路子串口,SP2538可以将一路母串口扩展为五路子串口。该系列芯片有输入地址线和输出地址线,在通过母串口向子串口发送数据时要给输出地址线上加选择电平,确定从哪一路子串口输出,在通过母串口从子串口读取数据时要检测输入地址线的电平,以确定是哪一路子串口的信号。该系列芯片应该是采用分时机制,通过内部的逻辑电路将一路数据分解为多路或将多路数据合成为一路。如SP2328母串口的波特率是子串口波特率的四倍,SP2538母串口的波特率是子串口波特率的六倍。
⑦用多路复用器扩展串行口 文献提供了一种利用多路复用器MAX353将一路串行口扩展为两路的方法。在发送信号的时候,CPU先给出MAX353的端口选择地址,串行信号经多路复用器的切换,从指定通道发送出去。在接受信号的时候,将多路复用器默认为第一通道,第二路串行口的RXD2同时接到(2PU的外部中断引脚上。如果第一通道有数据,则直接接收。如果第二通道有数据.RXD2的起始位将产生一个外部中断,CPU进入中断响应程序,将复用器切换到第二通道,接受RXD2的数据。一个字节接收完毕后,将复用器切换回第一通道。 文献的方法占用了一个外部中断,且只能将一路串口扩展为两路。基于同样的思路,可以利用四选一多路复用器将一路串行口扩展为两路以上。发送 数据的操作过程同上。为了实现数据的接收,需要用可编程逻辑器件或锁存器及编码器设计一个通道选择电路,哪一路先有起始位,将多路复用器选通到哪一路。CPU根据通道选择电路的输出确定所收数据的通道编号。
⑧运用FPGA/CPLD设计串行口 FPGA/CPLD具有强大的电路模拟功能。利用FPGA/CPLD可以设计并行口转串行口的时序逻辑电路,该电路一般由四部分组成:总线接口与控制逻辑部分、波特率发生部分、移位输出与锁存部分、移位输入与锁存部分。该电路波特率可以调节,有片选线和读写线。CPU通过并行口对电路进行访问。从实质上说,该电路模拟了可编程控制器16C550的串行接口功能。事实上,FPGA/CPLD有很大的灵活性。可根据实际需要和系统资源对电路进行适当裁剪,也可把多路复用技术或时分复用技术运用于串行口的模拟。 3 多串行口设计方法的比较研究与选择原则 以上8种方法,各有利弊。显然,选用多串口CPU是最为直接有效的方法,但是选用一种新型号的CPU,对于开发者来说,有一定的开发风险,有时还有受到供货渠道和开发条件的限制。选用专用芯片是一种可靠性最高的串口外部扩展法,有技术成熟、软件工作量小等诸多优势。不足之处是硬件成本增加、体积增加,有时还要占用外部中断源。选用多路复用器。其好处是可以实现CPU一点对多点的通讯、软硬件成本低、可靠性高,致命缺点是CPU不能同时接收多路输入数据。选用FPGA/CPLD既可以设计串行接口本身,又可以用来实现多路串口切换,或管理多个串行接口芯片的中断源。优点是可靠性高、CPU软件开销小,不足是开发成本稍大、硬件成本高。用分立元件实现串行口的转换,优点是软件工作量小,不足是电路复杂、可靠性差、要占用外部中断源。利用软件模拟串行接口,其优点不言而喻.既不增加任何硬件,又不占用外部中断源。缺点是软件复杂度高、CPU开销大、要占用软件定时器。 以上八种多串口的设计方法可以归纳为五种设计思想: ①直接从CPU上下手,选择多串行口单片机; ②挖掘器件本身的资源,在CPU I/O口线上用软件模拟串行口; ③使用功能电路实现串、并转换; ④使用功能电路将一路高速串行口分解为多路低速串行口; ⑤通过分时复用实现一路到多路的切换。 针对这几种不同的设计思想和其具体的实现方法,在应用时该如何选择,不但要依据以上几种方法的软硬件复杂度、CPU时间开销、实时性和可靠性,还要依据应用系统中所需串行接口的总路数、各个串口之间的独立性和波特率,以及现有的开发条件和综合成本指标。选择时要根据各种因素进行综合权衡。要在能实现所要求功能的基础上,充分利用现有资源、降低系统的复杂度、提高可靠性,力求使设计代价最小、总体成本最低。当然,这些方法的选择应该灵活多样,不必拘泥于一种方法,也可以因地制宜地选择几种方法的组合。 4 应用举例 在某型无人机飞行控制器设计中,CPU选用的是80C196KC。CPU上原有的一路串口用于遥控遥测。为了测量飞机的航向角。系统中应用了数字罗盘HMR3000。该传感器为串口接口,波特率为19200,输出数据为NMEAC183格式,每秒20帧,每帧35字节,为此需要给控制器增加一路全双工异步串行接口。 基于对以上8种设计方法的比较与分析,在权衡系统的软硬件复杂度之后,选用了第四种方法,即利用16C550可编程通讯控制器扩展出一路串行口。专门与该传感器通讯。16C550使用了FIFO功能,在接收14个字节后向CPU提出一次中断请求。这样CPU最多中断4次就可以全部接收一帧姿态测量数据。控制器的软件对HMR3000一帧输出数据的解码时间仅为1.187ms,CPU的负担并不大。CPU、16C550和HMR3000的连接电路如图1所示。 图1 可编程通讯控制器16C550与单片机系统的接口电路图 本方法充分利用了16C550的FIFO功能.所选择的方案无论从可靠性上、体积上、硬件复杂度上还是从成本、CPU的负担上来说,都明显优于文献的方案。
参考文献 【1】孙涵芳.INTEL16位单片机[M],北京:北京航空航天大学出版社,1995.
|