高 峰
(大连宗益科技发展有限公司,辽宁 大连 116023)
目前,通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART)接口的使用越来越广泛,许多设备上都提供了UART接口。工业使用的主流微处理器一般都只包含2个UART口,连接多个外设时会导致微处理器的UART口不够,为了方便外设接入,扩展UART口是一种理想的解决方案。同时,考虑到微处理器的串行外设接口(Serial Peripheral Interface,SPI)/集成电路总线(Inter-Integrated Circuit,I²C)上可以连接多个总线器件,为了充分利用资源,在实际使用中可以通过SPI/I²C实施对UART接口的扩展。本文分析了芯片LPC2294使用SPI接口扩展出2路RS485/RS422接口,方便连接外设接口,满足系统在不同应用场合的需求。
SC16IS752是具有I²C总线/SPI总线接口、双通道高性能的UART扩展芯片,串口数据传输速率高达5 Mb/s,每路串口有64 B的读写先入先出队列(First Input First Output,FIFO)和1个可编程的波特率发生器,具备省电模式和睡眠模式[1]。此外,还提供了8个额外可编程的I/O脚,并且支持传输速率高达1.115 2 Mb/s的IrDA红外通信,可以实现自动硬件和软件流控,自动的RS 485读写切换和软件复位等功能。SC16IS752使用SPI总线方式连线如图1所示。
ADM2463收发器为5.7 kV 均方根(Root Mean Squre,RMS)信号隔离型RS485/RS422接口收发器,可配置为半双工或全双工模式,具有出色的抗噪声能力[2]。RS485输入/输出引脚有±12 kV接触放电和±15 kV空气静电释放(Electro-Static Discharge,ESD)保护能力。ADM2463全双工模式引脚定义如图2所示。
芯片具有电缆反接智能功能,可以快速校正A、B、Y以及Z总线引脚上的电缆反向连接问题,在长距离电缆上实现500 kb/s低速运行,适用于电磁干扰(Electro Magnetic Interference,EMI)控制。该芯片支持192个总线节点,支持热插拔(无毛刺上电和关断)。
微处理器LPC2294使用SPI总线与SC16IS752芯片连接,LPC2294设置为主模式,SC16IS752设置为从模式[3]。同步时钟(Synchronous Clock,SCLK)线用于实现主器件和从器件在主输出/从输入(Master Output /Slave Input,MOSI)和主输入/从输出(Master Input/Slave Output,MISO)线上串行数据传输的同步,MOSI线用于主器件的输出或从器件的输入,MISO线用于主器件的输入或从器件的输出,片选控制线用于从设备的选择。LPC2294的外部中断引脚EINT2用于执行SC16IS752接收数据产生的中断,引脚接1 kΩ上拉电阻。SC16IS752的引脚通过1 kΩ电阻接地,设置芯片为SPI工作模式[4]。TXA、RXA、TXB以及RXB引脚连接ADM2463的Rx和Tx引脚,用于接收和发送数据。引脚与ADM2463的DE、引脚之间增加了选择设置跳线,根据使用需求实现全双工/半双工模式切换。跳线设置在半双工模式,引脚与ADM2463的DE、引脚连接,系统启用硬件流控制功能,实现芯片自动控制ADM2463的数据收发方向。此功能节省了程序控制芯片引脚的开销,完全由芯片自动控制。跳线设置在全双工模式,ADM2463的DE引脚通过10 kΩ电阻接3.3 V,引脚通过10 kΩ电阻接GND。ADM2463的A与Y、B与Z引脚间也增加了选择设置跳线,跳线设置在半双工模式,A与Y引脚短接,B与Z引脚短接,实现RS485功能;跳线设置在全双工模式,A与Y引脚断开,B与Z引脚断开,实现RS422功能。LP2294使用SPI总线扩展2路串口原理如图3所示。
软件设计主要包括SC16IS752驱动代码、SC16IS752初始化、LPC2294外部中断初始化以及LPC2294外部中断服务程序4部分[5]。
设计SC16IS752驱动函数,通过以下程序完成对SC16IS752寄存器的读写操作。
初始化SC16IS752,完成对串口的配置。程序中对EFCR寄存器的设置尤为关键,EFCR位0用于使能RS485模式。在这种操作模式下,主机先发送地址字符,然后再发送用来寻址从机的数据字符。EFCR位4用来设置是否启用发送器控制管脚的状态。在该位置位上,发送器将控制管脚的状态,主机写数据到发送FIFO,发送器将自动使管脚(逻辑0)有效。发送到数据的最后位时,发送器将使管脚(逻辑1)无效。自动使能RS485,节省了程序控制数据方向管脚的开销。具体程序如下。
LPC2294的EINT2引脚接1 kΩ上拉电阻与SC16IS752 的引脚相连,LPC2294 外部中断初始化函数设置芯片检测到下降沿时触发中断。当开启SC16IS752的中断使能时,芯片的输入管脚状态变化、接收数据错误、有可用的接收缓冲数据、有可用的发送缓冲空间或检测到modem状态标志等都会产生中断信号。本文设置RHR中断使能,即SC16IS752接收到可用的数据时产生中断信号,触发LPC2294的外部中断,程序如下。
LPC2294收到中断信号后进入中断服务程序,由于本文扩展使用2个串口,因此在中断服务程序中需要先判断是哪个串口产生的中断。当SC16IS752接收1包数据时,每接收1 Byte就会产生1次接收中断,程序将缓冲区中接收的数据存入SCRxData1数组中。当接收完1包数据时,SC16IS752会产生接收数据超时中断,同时将接收数据完成标志位(SCRxDataEND1)置位,后续程序判断标志位的置位状态,完成数据处理。具体程序如下。
结合处理器的SPI接口功能,设计了一种扩展UART接口的方法。当微处器没有SPI接口时,也可以使用普通I/O口来模拟SPI总线。通过此种扩展方式,每增加1片SC16IS752芯片,微处理器就可以扩展出2路串口,完全不用受限于微处理自身的接口资源。目前,市场上有各种功能的接口转换模块,例如串口转CAN模块、串口转以太网模块、串口转无线模块、串口转电力线载波模块以及串口转PROFIBUS模块等。UART通过连接转换模块,可以轻松地完成嵌入式设备接入各种接口总线,使得嵌入式系统设计更加简洁方便,极大地提高了开发效率,大大缩短了产品的开发周期,使产品能够更快地投入市场,提高产品的市场竞争力。