APP下载

基于UR8 的586-Engine 异步串行通信扩展设计

2015-08-26李志宇高艳辉

电子设计工程 2015年13期
关键词:波特率寄存器中断

李 强,李志宇,高艳辉

(1.南京航空航天大学 自动化学院,江苏 南京210016;2.南京航空航天大学 无人机研究院,江苏 南京210016)

异步串行通信是一种串行数据传输协议, 用于双向通信,可以实现半双工和全双工传输,因其结构简单、设计方便、价格低廉、占用资源少[1]、传输距离远等优势而得到广泛应用。 近年来串行通信正朝着带宽、速度、稳定性逐渐增强的方向发展[2]。 586-Engine 是TERN 公司推出的一款为了高精度和高可靠性的植入式应用所设计的核心板卡, 运算速率高,适用于工业程序控制和高精度的数学计算。 该板卡提供了2 路异步串行通信接口,这在很多应用场合远远不够。为了增加串口数量并保证较高的传输速率, 使用高性能的UR8 扩展卡是一种可行方案, 本文结合UR8 串口扩展卡在586-Engine 上的成功应用, 对UR8 串口扩展方法进行详细介绍。

1 器件介绍

586-Engine 是TERN 公司生产的基于AMD Elan SC520处理器的C/C++可编程微控制模块,成本低,功耗低,结构紧凑。 它提供了多种算法指令用于处理各类数字格式以及正弦、余弦、正切、对数等超越函数,擅长高强度的运算应用[3]。

586-Engine 的主要参数指标如下:

1)CPU 是 主 频 为133 MHz 的32 位AMD ElanSC520 处 理器,兼容Intel80x86;

2)尺寸为3.6*2.3*0.3 英寸,适用温度为-40oC—85oC;

3)支持114 字节内置RAM,高达512KB 电池供电的SRAM,512 kB 的Flash,不支持SDRAM、PCI、DMA。

4)提供两个工业标准通用异步串口(UART),最高达到1.152 Mbit/s。

5)提供32 路多功能I/O 总线。包括总共19 路12 位模数转换器, 其中11 路串行模数转换和8 路并行模数转换;6 路12位数模转换器,其中2 路串行数模转换和4 路并行数模转换。

6)可编程中断控制器(PIC)支持22 个中断优先级,包括15 个外部中断。 共有7 个定时器,其中1 个可编程内部定时器,3 个16 位PIT 定时器和3 个16 位GP 定时器[4]。

UR8 是TERN 公司生产的8 路异步串口扩展卡。 它提供了多种串口工作方式,如RS232、RS485、RS422。 其核心部件是2 片TL16C754B 芯片, 每片TL16C754B 具有4 路异步串口, 每个通道具有64 字节的发送FIFO 和64 字节的接收FIFO。在FIFO 模式下,可以减小CPU 的中断数量并降低软件开销。 它有3 种工作模式:查询模式、中断模式和DMA 模式,并可编程选择中断和DMA 模式的FIFO 深度[5]。 它提供了可编程的波特率发生器用于产生14 种不同的波特率,最高波特率可达230400bit/s,可见UR8 的串口传输速度非常快。

2 硬件设计

2.1 UR8 扩展卡串口的可配置方案

UR8 扩展卡提供了3 种可配置的串口标准方案 (即RS232、RS485、RS422)以满足不同的需求。其中8 个串口均可配置为RS232 串口标准;COM2-COM5 4 个串口可配置为RS485 串口标准;COM2 可配置为RS422 串口标准。若采用后两种方案与PC 机进行通信需在中间加装一个RS232/RS485转换器。 以上3 种配置方案均已成功应用, 本文仅以RS232为例对该方法进行介绍。

2.2 接口电路原理框图

586-Engine 的数据总线D0-D7 连接到UR8 的D0-D7,用于双向数据交换,/RD 和/CS1 分别和UR8 内部HCT245 芯片的DIR 及G 相连来选择传输方向;586-Engine 的地址总线A1、A2、A3、写使能端/WR、读使能端/RD 以及RST 与UR8 的A0、Al、A2、写使能端/WR、读使能端/RD 以及RST 相连,实现TL16C754B 的片内寄存器寻址和读写控制;586-Engine 的地址总线A4、A5、A6、A7 与UR8 的A4、A5、A6、A7 相连, 经过TL16C754B 内部译码器芯片进行译码实现片选功能[6]。

UR8 的8 个串口(COM2-COM9)选用RS232 通讯方式。可以采用两种方案进行试验,第一种是UR8 的8 个串口与8台PC 机同时通信, 第二种是UR8 的8 个串口级联的接线方式, 为了操作简洁采用第二种方案, 即: 外部数据发送到COM2 的 接 收 端/RXD2,/TXD2 连 到/RXD3,/TXD3 连 到/RXD4,以此类推,最终数据由COM9 的发送端/TXD9 发送到PC 机的接收端,通过串口调试助手检测数据的正确性和完整性。 整个接线关系如图1 所示。

图1 接口设计电路原理图Fig. 1 Interface circuit schematic design

3 软件设计

3.1 UR8 的初始化配置

TL16C754B 内部寄存器地址如下表所示,每一个串口的定义都完全相同。

表1 TL16C754B 内部寄存器Tab.1 TL16C754B internal registers

UR8 的地址设置非常灵活,每个通道的基地址可以自由选择,采用基地址加偏移量的方法可以确定各寄存器的地址,然后就可以对各寄存器进行读写操作。 值得注意的是,A0 没有使用,各偏移量和基地址为偶地址,这样就增加了系统的抗干扰能力。

UR8 是一款可灵活选择配置的扩展卡, 其每一通道的初始化配置均可根据实际需要来进行。下面以串口2 为例,给出初始化配置。

************************************ 设 置 串 口2*********************************

baud=13; // 波特率选择115200

qur_init(2, baud);

outportb(LCR2,0x83); // 线路控制寄存器,8 位,无奇偶校验,使能DLL、DLH

outportb(DLL2,(unsigned char)(ctlr&0xff) ); // 波特率因子寄存器低位

outportb (DLH2,(unsigned char)((ctlr>>8)&0xff)); // 波特率因子寄存器高位

outportb(LCR2,0x03); // 线路控制寄存器,8 位,无奇偶校验

outportb(IER2,0x00); // 中断允许寄存器,不允许中断outportb(FCR2,0x07); // 清空FIFO

outportb(MCR2,0x00); // Modem 控制寄存器归零

3.2 串口函数说明

void qur_init( char ch, unsigned char baud) //ch=2-9,串口初始化

void put_ch (char ch, unsigned char dat) //串口数据发送函数

unsigned char qur_hit ( char ch) //检查接收FIFO是否有数据

unsigned char get_ch( char ch) //串口数据接收函数

3.3 程序说明

软件设计流程图如图2 所示,程序采用顺序查询模式,依次查询COM2-COM9 的接收FIFO 中是否有数据, 如果有数据则存储数据再将存储的数据发出; 如果接收FIFO 中没有数据,则继续检查下一个串口。 结合硬件的连线方式,一帧数据就会在8 个串口间循环一次。每一通道都有各自的接收/发送FIFO 和寄存器,各自数据的接收和发送不受影响。

图2 软件设计流程图Fig. 2 Flow chart of the software design

3.4 调试结果

调试过程中,PC 机串口发送端与UR8 的串口2 的RXD2 相连, 发送的数据通过串口发送端依次通过COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9, 最 终 由COM9 的发送端TXD9 传送到PC 机的串口接收端,形成一个数据循环传输的过程。PC 机通过串口调试助手控制串口的发送和接收,具体调试原理如图3 所示。

图3 调试原理框图Fig. 3 Debugging principle diagram

串口调试助手当波特率设定为115 200 bit/s,一帧数据为01 到40 个字符时,逐步减小每帧数据的发送间隔,最终测试得到的最短时间间隔为20 ms。 即每20 ms 发送一帧数据。PC机接收到的数据显示在窗口中,实验最终结果如图4 所示。

从结果可以看出,接收窗口接收到的数据没有误码,说明数据在各个串口的接收发送过程中没有出现错误; 界面最下面显示S:153000 R:153000,发送和接收的字节数相等,说明没有丢失数据。

图5 给出了时间间隔减小到19 ms 的实验结果, 从接收窗口可以看出第4 行39、40 两个字符被01、02 替代, 说明串口发送一帧数据所需要时间已经大于PC 机发送一帧数据的时间间隔, 串口还没发完一帧数据已经被强制执行下一次的发送命令,第8、15、17、22 行反映了同样的问题。 说明20 ms为这种扩展方案的极限值。

图4 测试界面图Fig. 4 Interface chart of the test system

图5 测试界面图(19ms/次)Fig. 5 Interface chart of the test system(19ms/次)

调试结果说明, 使用UR8 成功地扩展了586-Engine 的异步串行通信能力。

4 结论

本文介绍的这种串行通信扩展方案具有明显的优越性:一是增加了8 个串行通信接口,可以与更多的设备进行连接,极大地提高了586-Engine 的异步串行通信能力; 二是由于586-Engine 内核处理数据的速度极快并尽最大限度的压缩程序所占用时间,使得这种UR8 串口扩展方案达到很高的传输速率,能够满足譬如飞控计算机这种高实时性、高运算量设备的设计需求;三是UR8 不仅能扩展到586-Engine,还能直接 扩 展 到A-Engine、i386-Engine、i386-Drive、586-Drive 等TERN 公司生产的板卡,省去了设计接口电路的麻烦。 实验证明,在实时性高、传输波特率高、CPU 运算量大的情况下,使用UR8 进行串口扩展是一种很实用的方案。

[1] 兰立荣,闫继英,林海土,等.基于ARM处理器设备的多串口设计与实现[J].仪表技术,2011(5):19-21.

LAN Li-rong, YAN Ji-ying,LIN Hai-tu,et al.Design and implementation of multi -channel UART based on ARM apparatus[J]. Instrumentation Technology,2011(5):19-21.

[2] Chen Z H,Shi M, Yi Q M.A method for DSP asynchronous serial port expansion based on TL16C752B [C] //Business Management and Electronic Information (BMEI),2011 International Conference on.IEEE,2011(1):844-847.

[3] TERN,Inc.586-EngineTM Technical Manual[S].2001.

[4] 陈德胜,黄一敏,史拥军.TLl6C754在嵌入式系统串行通信中的应用[J].仪器仪表用户,2007,14(4):81-82 CHEN De-sheng,HUANG Yi-min,SHI Yong-jun.The application of TL16C754 in the serial communications of embedded system[J].Electronic Instrutmentation Costumers,2007,14(4):81-82.

[5] 梅培智, 于海勋, 何衡湘, 等. 基于TL16C754B 的TMS320F2812异步串行通信扩展 [J]. 科学技术与工程,2007,7(23):6035-6039.MEI Pei-zhi,YU Hai-xun,HE Heng-xiang,et al.UART serial port extension of TM S320F2812 based on TL16C754B[J].Science Technology and Engineering,2007,7(23):6035-6039.

[6] 皮小平,吕宗伟.TL16C754在多串口扩展中的应用[J].电子元器件应用,2006,3(1):64-66.PI Xiao -ping,LV Zong -wei.Application of TL16C754 in multi serial port expansion [J].Electronic Component & Device Applications,2006,3(1):64-66.

猜你喜欢

波特率寄存器中断
UART 波特率检测电路的FPGA 设计算法与实现
STM32和51单片机寄存器映射原理异同分析
CAN 总线波特率自适应程序设计
Lite寄存器模型的设计与实现
基于FPGA的中断控制器设计*
波特率自适应的CAN驱动在嵌入式Linux下的实现①
跟踪导练(二)(5)
千里移防,卫勤保障不中断
详解lAP15W4K58S4单片机的串行口通信
FPGA内嵌PowerPC的中断响应分析