3 使用ACE实现UART
微机上最早使用的ACE是8250,16C550是8250的功能升级器件。器件在结构上的最大差别是16C550增加了接收和发送FIFO,因此器件能够处于交替工作模式,减轻CPU额外的软件负担。在这种模式下,无论是接收还是发送,在可访问的缓冲寄存器和不可访问的移位寄存器之间都增加了16字节的FIFO,可以使系统负担最小且系统效率最高,而且所有的逻辑功能都在16C550芯片上完成。TLl6C550A有两个管脚功能已经被改变,使用这两个信号可以答应信号使用DMA的方式来传输。
TLl6C550的主要功能为:TLl6C550在接收外部器件或MODEM的数据时?完成串行到并行的转换;在接收CPU的数据时,完成数据的并行到串行的变换,并进行串行发送。在ACE器件工作的任何状态下,CPU可以读和通报ACE器件的状态。通报的状态信息包括:传输操作正在进行过程中、操作状态、碰到了何种错误等,TLl6C550的内部包含一个可编程的波特率发生器,波特率为16x内部输入时钟频率.此内部输入时钟频率由输入的参考基准振荡器分频得到。TLl6C550具有完全的MODEM控制能力。包含一个处理器中断系统,根据用户的专用需要而设计,在处理通讯连接时,计算量是最小的。TLl6C550有两种封装形式:N
PACKAGE 和FN
PACKAGE。TL16C550的管脚按功能可以分为:外部时钟输入及波特率控制信号;数据和地址总线;片选及读写控制信号;MODEM控制信号;复位及中断控制信号。
假如C32要和PC机通讯,可使用TL16C550完成串行协议的转换。TLl6C550的输出接口要和一个电平转换芯片连接,用于和PC机的串行通讯接口互联。完整的接口示意图如图5所示。

其中的MAX232可以使用MAXIM公司的MAX3238来实现。
接口电路分为两大部分:DSP
C32和串行通讯芯片TLl6C550之间的接口;串行通讯芯片TLl6C550和PC机之间的接口。
完整的电路原理图如图6所示。
接口逻辑可以使用集成的CPLD实现,本系统中使用的是ALTERA公司的EPM7128SLC184-10。它将芯片TLl6C550作为DSP
C32的一个外设端口送行寻址。

相应的接口逻辑使用AHDL语言描述,具体如下:
TL16C550A一共使用8个地址对内部寄存器进行访问和控制。相对DSP
C32系统而言,假如使用了上面的译码逻辑电路,则占用的8个地址为:0X818000~0X818007。
TLl6C550A串行接口寄存器的寻址表如表1所示。

DLABA2 A1 A0寄 存 器 名 属
性 地址值 00 0 0接收缓冲寄存器RBR 只读 0X818000 00 0 0发送缓冲寄存器TBR 只写 0X818000 00
0 1中断使能寄存器IER 读/写 0X818001 X0 1 0中断标志寄存器IIR 只写 0X818002 X0 1
0FIFO控制寄存器FCR 只写 0X818002 X0 1 1线路控制寄存器LCR 读/写 0X818003 X1 0
0MODEM控制寄存器MCR 读/写 0X818004 X1 0 1线路状态寄存器LSR 读/写 0X818005 X11
0MODEM状态寄存器MSR 读/写 0X818006 X1 1 1便签寄存器SCR 读/写 0X818007 10 0
0除数低字节锁存器DLL 读/写 0X818000 10 0
1除数低字节锁存器DLH 读/写 0X818001DLAB表示线路控制寄存器的第7位的逻辑值。
在程序中,使用逻辑地址0X818000~0X818007对TLl6C550A的各个寄存器进行寻址就可以了。
本文介绍的三种实现C32异步串行口的方法,前两种方法使用不是非常方便,而且占用了大量的C32系统资源,一般都使用第三种方法来实现C32和PC机之间的通信。
使用TL16C550实现DSP和PC机的通信,接口方便、控制简单、编程灵活,试验证实它是非常简便可靠的实现方法。
