用TL16C752B实现DSP和PC机的串行通信

1 引言
美国德州仪器公司(ti)的tms320vc54xx系列dsp芯片与pc机实现异步通信通常有两种方法:第一种是使用通用i/o信号xf和bio作为串口发送和接收信号,用软件逐位发送和接收数据,即软件异步通信方法,这种方法需要占用很多cpu时间,因此,只能在dsp不太忙、实时性要求不高的情况下采用;第二种是通过扩展异步通信芯片来实现高速串行通信,本文选用的就是此方法。
在笔者设计数字调幅广播系统中的基带处理子系统时,复用器与信道编码器之间的通信采用的是异步串行通讯方案。复用器则使用通用pc机来实现,信道编码器使用ti公司生产的dsp芯片tms320vc5421来设计实现。
2 uart芯片tl16c752b简介[1]
2.1 主要特点
tl16c752b是ti公司推出的新型uart(universal asynchronous receiver and transmitter )收发器。该器件的主要特点如下:
●引脚和st16c2550兼容,内置两套uart系统,可独立工作;
●工作时,最高波特率可以达到1.5mbps(使用24mhz晶体时)或3mbps(使用48mhz振荡器或时钟源时);
●具有64字节发送/接收fifo(接收fifo包含错误标志)。由于收、发fifo的触发等级可通过软件编程实现,因而减少了cpu的中断次数;
●接收fifo的启动和停止等级可以通过软件编程来实现;
●具有两种控制模式:其中软件流控制模式可通过编程xon/xoff字符来实现;而硬件流控制模式则可通过设置rts和cts引脚及相应的寄存器来实现;
●波特率可编程;
●可编程下列串行数据格式:
——5、6、7、8 四种字符;
——数据奇偶校验或者无校验;
——1、1.5、2bits 停止位;
●内部闭环。
2.2 tl16c752b的引脚功能
tl16c752b内含双uart,并自带64字节收发fifo,可自动进行软件流和硬件流控制,最大波特率可达3mbps。此外,tl16c752b还提供了其它一些增强功能,可通过设定efr寄存器的相关位来实现。通过fifo rdy 寄存器可读取txrdy/rxrdy引脚的状态;而通过片内寄存器则可为使用者提供接收数据的错误识别、操作状态以及modem的接口控制信号。
tl16c752b的引脚排列如图1所示,各主要引脚的功能如下:
a0~a2:地址线,通过这几个引脚以及读写信号ior和iow可以访问及设定片内寄存器?
d0~d7:双向8位数据线?
csa、csb:两套uart的片选信号?
txa/rxa、txb/rxb:分别表示所要发送和接收的数据端口?
inta/intb:中断信号?
reset:芯片复位信号?
xin/xout:时钟输入/输出信号。
2.3 tl16c752b的内部寄存器
图2所示是tl16c752b的内部功能模块图,该器件内部共有20个寄存器,这些寄存器可分别用于实现通信参数的设置、对线路及modem状态的访问、数据的发送和接收以及中断管理等功能。其地址可分别通过a0~a2地址线和某些寄存器的特定位来确定,由于有些寄存器的地址是重叠的,所以还必须通过读/写信号加以区分。tl16c752b内部寄存器的映射如表1所列。表中:
“*” 表示仅当lcr的第7位为1时,访问dll/dlh。
“** ”表示仅当lcr为0xbf时,访问efr以及xon1/2,xoff1/2。
“+” 表示当efr[4]为1,且mcr[6]为1时,访问tcr/tlr。
“++”表示当片选信号有效、mcr[2]为1且处于非闭环模式时,访问 fifo rdy。
此外,对于mcr[7],只有当efr[4]为1时才可以更改。在上述说明中,[]表示该寄存器的第几位。
表1 tl16c752b的内部寄存器映射表
a[2] a[1] a[0] 读 模 式 写 模 式
0 0 0 接收保持寄存器(rhr) 发送保持寄存器(thr)
0 0 1 中断使能寄存器(ier) ier
0 1 0 中断标示寄存器(iir) fifo控制寄存器(fcr)
0 1 1 线路控制寄存器(lcr) lcr
1 0 0 modem控制寄存器(mcr) mcr
1 0 1 线路状态寄存器(lsr) lsr
1 1 0 modem状态寄存器(msr) msr
1 1 1 临时寄存器(spr) spr
0 0 0 *除数锁存低位(dll) dll
0 0 1 *除数锁存高位(dlh) dlh
0 1 0 **增强功能寄存器(efr) efr
1 0 0 ** xon-1字符值 xon-1字符值
1 0 1 ** xon-2字符值 xon-2字符值
1 1 0 ** xoff-1字符值 xoff-1字符值
1 1 1 ** xoff-2字符值 xoff-2字符值
1 1 1 +传输控制寄存器(tcr) tcr
1 1 0 +触发等级寄存器(tlr) tlr
1 1 1 ++fofo状态寄存器(fifo rdy) fifo rdy
2.4 tl16c752b工作流控制模式
tl16c752b有2种工作流控制模式:硬件流控制和软件流控制。使用前者可降低软件消耗,通过rts和cts引脚信号的硬件连接可自动控制串行数据流,从而提高系统的有效性;后者则通过使用可编程的xon/xoff字符来自动控制数据传输。本文主要介绍软件流控制模式。
软件流控制模式的使能可通过efr和mcr这2个寄存器来实现。不同流模式的组合如表2所列(可通过设定efr的低4位实现)。
表2 软件流控制模式
efr[3] efr[2] efr[1] efr[0] tx rx软件流控制组合模式
0 0 x x 无发送流控制
1 0 x x 发送xon1,xoff1
0 1 x x 发送xon2,xoff2
1 1 x x 发送xon1,xoff1;xon2,xoff2
x x 0 0 无接收流控制
x x 1 0 接收器比较xon1,xoff1
x x 0 1 接收器比较xon2,xoff2
1 0 1 1 发送xon1,xoff1;接收器比较xon1,xoff1;xon2,xoff2
0 1 1 1 发送xon2,x0ff2;接收器比较xon1,xoff1;xon2,xoff2
1 1 1 1 发送xon1,xoff1;xon2,xoff2;接收器比较xon1,xoff1;xon2,xoff2
0 0 1 1 无发送流控制;接收器比较xon1,xoff1;xon2,xoff2
具体工作流程(从接收的角度)为:接收时,若操作达到接收中断等级,则产生中断,但这时传输还在进行(这里假设中断有一定延时);而当rhr中的数据数目达到接收停止等级规定的数值时,接收端发送xoff1/2,以通知发送端停止发送数据,这时接收端将读取rhr中的数据。当rhr中的数据数目降到接收启动等级规定的数值时,接收端发送xon1/2,以通知发送端可以继续发送数据。
3 tl16c752b与pc的通信电路
tl16c752b与pc的串行通信部分的硬件连接电路如图3所示。图中,地址线a0~a2、数据线d0~d7分别和dsp的地址总线a0~a2、外部数据线d0~d7直接相连,而选通信号csa/csb、读写信号ior/iow、复位信号reset以及中断信号inta/b则接入cpld并由cpld处理。同时dsp端的ps、ds、is、iostrb、r/ w、mstrb也同时接入cpld以用于生成控制信号。电路中使用cpld一方面可以对uart的地址灵活配置,另一方面也可以灵活生成uart的复位、选通和读写信号,从而增强系统的灵活性,方便系统调试。
由于pc端串口采用rs232电平标准,因此uart之后需要连接max3221以完成电平转换。tl16c752b的数据发送引脚和数据接收引脚分别与max3221的数据输入引脚和数据输出引脚连接。这里只使用一套uart来完成tl16c752b和pc的通信。数据收、发采用中断方式,uart_inta通过cpld和tms320vc5421的外部中断int0相连接。而3.072mhz晶振则连接到xin和xout两引脚。波特率设定为38400,故dll/dlh分别为06和00h。
具体调试时,可先从查询方式开始,若没有问题,再使用中断方式。
图3
4 tl16c752b和pc通信的软件编程
该系统的软件设计部分主要包括pc机程序、dsp初始化、tl16c752b初始化和数据发送/接收以及双方的通信协议等。下面介绍tl16c752b的初始化程序。
tl16c752b初始化程序主要包括以下几部分:
(1)波特率的设定;
(2)增强功能的使能及设置efr的相关位;
(3)完成有关收、发fifo的设定,主要是mcr/tcr/tlr 3个寄存器的设置;
(4)软件流控制模式使能以及xon/xoff字符的设置;
(5)传输数据格式设定,包括8位数据位、2位停止位、dma传输模式1、偶校验、不使用强制校验模式、暂停控制位无效等;
(6)设置fifo控制以及中断控制寄存器。
此外,在完成设置前,还应注意以下几点:
(1) 设定dll和dlh前,lcr[7]应为1。
(2) 设定mcr前,efr[4]应为1,lcr应为00h。地址相重叠的寄存器不能同时使能。
(3) 读写rhr和thr时,由于dsp的读写速度很快,故最好不要连续读写,而是在每读、写一次后延时一段时间,然后再进行下一次读写。
(4) 这里,dma只是一个名称,而并非是 “直接存储器访问”。
tl16c752b的地址分配在i/o空间的0020h~0027h,读写通过portr和portw指令完成。tl16c752b初始化程序如下:
ini_uart_start:
;设置 baud rate=38400 ; divi-sor=0006h
stm #temp1_reg,ar1
nop
st #80h;*ar1 ;除数锁存使能 lcr=bfh
portw *ar1,#k_lcr_addr
st #k_dll_value,*ar1
portw *ar1,#k_dll_addr
st #k_dlh_value,*ar1
portw *ar1,#k_dlh_addr
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
st #k_lcr_value?*ar1 ;lcr=bfh
portw *ar1,#k_lcr_addr
st #k1 efr value?*ar1 ;增强功能使能
portw *ar1,#k_efr_addr
st #0,*ar1 ;设定lcr= 0
portw *ar1?#k lcr addr
st #k_fcr_value,*ar1 ;设定fifo控制寄存器
portw *ar1,#k_fcr_addr
st #k_mcr_value,*ar1 ;设定mcr/tcr/tlr寄存器
portw *ar1,#k_mcr_addr
st #k_tcr_value,*ar1
portw *ar1,#k_tcr_addr
st #k_tlr_value,*ar1
portw *ar1,#k_tlr_addr
st #k1_mcr_value,*ar1
portw *ar1,#k_mcr_addr
st #k_lcr_value,*ar1 ;为访问xon/xoff/efr,lcr重设定为bfh
portw *ar1,#k_lcr_addr
st #k_xoff1_value,*ar1 ;设置软件流控制
portw *ar1,#k_xoff1_addr
st #k_xon1_value,*ar1
portw *ar1,#k_xon1_addr
st #k_xoff2_value,*ar1
portw *ar1,#k_xoff2_addr
st #k_xon2_value,*ar1
portw *ar1,#k_xon2_addr
st #k_efr_value,*ar1 ;设置软件流控制组合方式
portw *ar1,#k_efr_addr
st #k_lcr_dlatch_disable,*ar1
portw *ar1,#k_lcr_addr ;设定传输数据格式
st #k_ier_value,*ar1 ;设置中断
portw *ar1,#k_ier_addr
5 结束语
通过扩展串口完成tms320vc5421与pc机串行通信硬件接口比较简单、数据传送距离远、使用经济。该电路及其软件经与微机的通信实验证明,在波特率为38400时,能够可靠地实现与pc机的通信。

探究霍尔传感器和电流纹波技术在电动车窗防夹中的应用
荣耀V9、小米6、三星S8、华为P10怎么样?华为荣耀V9、小米6、三星S8、华为P10颜值爆表+配置强悍买谁?
中国军工测试连接器国产化,突破“卡脖子”难题
算力+算法+数据三轮驱动 AI发展与生态落地如何破局?
一种用于48V电气系统的电子保险丝参考设计方案
用TL16C752B实现DSP和PC机的串行通信
如何为笔记本电脑制作高效的通风冷却系统
嵌入式C编码的原则
该如何选择合适的行星减速机
RC时间常数的概念、计算方法和在实际应用中的重要性
浅谈气滑环在二翼转动感应门运用的归类
苹果全球首播不带货 130万人围观 用最佛系的态度卖了最多的货
图解华为年报:销售收入首次超千亿美元 消费者业务成火车头
面对美国压力,华为正加大对国内科技行业的投资以支撑其供应链
USB PD解决方案为用于移动设备快速充电的电源适配器解决挑战
视爵光旭助力城市发展,智慧灯杆屏守护校园交通安全
怎样用乙烯基掩膜蚀刻PCB
国内芯片公司龙头有哪些
电流互感器的型号与参数
中国移动建立NB、Cat.1和5G协同发展的物联网综合生态体系