title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">title="">
摘 要: 介绍了一种基于DSP+UART实现串行通信的方法,并运用在图文输入系统中。实验表明,该方法能够可靠地实现TMS320C6713与图文输入系统之间的通信。
关键词: 数字信号处理器;异步串行通信;TL16C752B
异步串口由于采用RS-232电平,传输距离长、连线简单,因而得到了广泛应用。图文声并现的多媒体电话机的输入部分是图文输入系统,该系统使用TI公司的TMS320C6713 DSP, DSP中有同步高速串口,但没有异步串口,无法与低速设备进行通信。因此如果DSP能通过RS-232/485串口与其他外部设备进行通信,将会为图文输入系统提供极大的方便。图文输入系统采用手写板作为输入设备,方便人们在电话交流中的使用。手写板通过电磁感应产生电信号,并通过RS-232接口输出。但是,TI公司生产的TMS320C6000系列的数字信号处理器不具有异步串口,故实现异步通信功能的设计方法一般有2种:一种基于软件编程来实现,通过编程将DSP的多通道缓冲串行接口(McBSP)改为异步通信串口;另一种基于硬件来实现。采用硬件方法来实现不占用多通道缓冲串行接口,而且可以根据外部设备的需要灵活地设置波特率。 因此,本文采用TI公司的专用异步串行芯片TL16C752B来实现串行通信。
1 TMS320C6713 DSP和手写板简介
TMS320C6713是高性能的32位浮点DSP,适用于专业音频信号处理,其主频高达300 MHz,处理速度高达2400 MIPS/1800 MFLOPS。采用改进哈佛结构、片上共有264 K×8位存储器,其中4 K×8位一级程序缓存、4 K×8位一级级数据缓存、256 K×8位二级缓存,并且具有丰富的片上外设资源,其中就包括2个同步串口McBSP。此外,TMS320C6713还有32位的EMIP总线、有4个空间,每个空间均可与SDRAM、SBSRAM和异步外设实现无缝接口[1]。本文将异步外设TL16C752B映射在EMIP的CE1空间,所以DSP在访问TL16C752B上的寄存器时只需要将基地址加上偏移量就可以了。
手写板可分为2大类:手触式与电磁感应式。手触板是利用笔触及到基板时,基板上的电容及电阻发生作用的变化来起作用。因此,所谓“笔”,可以是任何会改变电阻或电容的任何物件,例如手指或塑料棒。由于笔必须接触到基板才能起作用,因此,当笔提起后,将不会产生作用,用起来比较不自然。制造时,由于电阻值与电容值很难做到均匀与精确,所以手触板有一些先天上的限制。电磁感应笔的工作原理:电磁感应笔会放出电磁波,由基板感应到后,计算出笔的位置,由于电磁波能隔空传导,所以笔即使不接触到基板,基板也能感应到。本系统选用电磁感应式手写板,采用接口为RS-232。
2 TL16C752B的组成及结构特点
TL16C752B采用8位异步并行存储器接口(D7~D0),可与TMS320C6713的外部存储器接口(EMIF)直接相连,具有2个异步串行转换通道(UART-A和UART-B),当使用48 MHz的输入时钟时,波特率最高可以达到3 Mb/s。每个通道包含18个寄存器,通过地址线A2~A0对寄存器进行寻址,并且分别具有64 B的发送FIFO和64 B的接收FIFO。UART-A和UART-B分别由片选信号/CSA和/CSB选通。TL16C752B还提供2个中断请求信号INTA和INTB,分别用于通道A和B申请C6713的中断。其功能模块图如图1所示。
TL16C752B的各个寄存器的映射地址[2]如表1所示,其中黑体部分的寄存器为二次寻址的寄存器。
TL16C752B有2种工作流控制模式: 硬件流控制和软件流控制。使用前者通过请求发送引脚RTS和允许发送引脚CTS的硬件连接可自动控制串行数据流,从而提高系统的有效性;后者则通过使用可编程的Xon/ Xoff 字符来自动控制数据传输。本文采用硬件流控制的方式进行电路连接。
3 硬件接口电路
C6713也采用双电源供电方式,即内核是1.8 V,接口是3.3 V,因此TL16C752B可以直接与DSP相连,简化了电路。但由于手写板采用RS-232电平,在RS-232C标准中的电压相对地是对称的,逻辑“0”的电平为+3 V~+15 V;逻辑“1”的电平为-3 V~-15 V。实际应用中通常由±12 V电源供电,所以与TTL、CMOS接口需电平转换。本系统采用MAX3160来完成电平转换的工作。
TL16C752B的数据线D7~D0直接与TMS320C6713的ED7~ED0数据线相连,实现数据的传输。TL16C752B的片内寄存器选择线A2~A0与TMS320C713的地址线EA4~EA2相连。当TL16C752B的片选信号/CSA、/CSB为有效电平时,分别选中A、B通道。通道A映射为DSP的地址空间为0x80000000到0x80000007, 通道B映射为DSP的地址空间为0xC0000000到0xC0000007。DSP 采用中断方式接收从手写板输入的数据,通道A、B分别占用DSP的外部中断6和外部中断7,如图2所示。
4 DSP软件编程
在对TLC752B访问之前要对其进行初始化,TL16C752B的初始化程序主要包括以下几部分:
(1)波特率的设定。TL16C752B包含一个可编程的波特率寄存器分为高位寄存器(DLH)和低位寄存器(DLL),用来存储分频系数的高8位和低8位,它可以在输入时钟的基础上进行分频(最大分频系数为216-1),分频系数的计算公式如下:
分频系数=输入时钟频率/(比例系数×16×期望得到的波特率)
注:当MCR寄存器中的bit7为0时,比例系数为1;当MCR寄存器中的bit7为1时,若比例系数为4。
因此,在输入时钟频率为30.72 MHz时,若想要获得9.6 kb/s的波特率就需要分别向DLH和DLL写入0x00和0xC8。
(2)增强功能的使能及设置EFR 的相关位。
(3)对接收FIFO和发送FIFO 的设定, 通过设置MCR、TCR和TLR这3个寄存器来实现。
(4) 传输数据格式设定, 包括数据位长度(5位、6位、7位或8位)、停止位长度(1位、1.5位或2位)、DMA 传输模式1或0、奇偶校验、是否使用强制校验模式、暂停控制位等。本文设定数据长度为8位,1个停止位,无奇偶校验位,DMA0模式。
(5)设置FIFO 控制以及中断控制寄存器。
TL16C752B 初始化程序如下,程序采用C语言编写,具有可移植性:
#define baudrate_9k6 0x00c8
#define UartWordLen 0x0003 //数据长度为8
#define UartStopBits 0x0000 //1个停止位
#define UartParity 0 //奇偶校验位
#define RHR 0x0000<<1
#define IER 0x0001<<1
#define FCR 0x0002<<1
#define LCR 0x0003<<1
#define MCR 0x0004<<1
#define LSR 0x0005<<1
#define MSR 0x0006<<1
#define DLL 0x0000<<1
#define DLH 0x0001<<1
#define EFR 0x0002<<1
Uint8 baudratel,baudrateh,uartdata;
UARTA_Handle = UART_open(UART_ A); //打开UART A通道
/* 设置波特率. */
UART_rset(UARTA_Handle, LCR,0x80);
BaudRate = baudrate_9k6; //将波特率设置为9.6 kb/s
baudratel = (UartBaud & 0x00ff);
UART_rset(UARTA_Handle, DLL,baudratel); /*将波特率的低8位字节赋给DLL寄存器*/
baudrateh = (UartBaud & 0xff00) >> 8;
UART_rset(UARTA_Handle, DLH,baudrateh); /*将波特率的高8位字节赋给DLH寄存器*/
UART_rset(UARTA_Handle, LCR,0x00);
/* Set word length. */
uartdata = UartWordLen + UartStopBits + UartParity;
UART_rset(UARTA_Handle, LCR,uartdata); //设置传输格式
/* Set FIFO 寄存器. */
UART_rset(UARTA_Handle, FCR,0x02); //复位FCR寄存器
UART_rset(UARTA_Handle, FCR,0x07); //设置FCR寄存器
UART_rset(UARTA_Handle, MCR,0x08); //使能UART中断
/*设置接收保持寄存器中断RHR. */
UART_rset(channel, IER, 0x01); //设置FIFO 接收中断
UART_rset(channel, MCR,0x49);
通过扩展串口完成TMS320C6713与图文输入系统串行通信硬件接口比较简单、数据传送距离远、使用经济。该电路及其软件经与图文输入系统的通信实验证明, 在波特率为9 600 kb/s时, 能够可靠地实现两者之间的通信。
参考文献
[1] Texas Instruments. TMS320C6713, TMS320C6713B Floating-point digital signal processors.2004.
[2] Texas Instruments. TL16C752B 3. 3 - V Dual UART with 64 B FIFO.2000.