|
dsp芯片基于SC16C750B的RS232接口设计 | |||||
| |||||
美国TI(Texas Instruments)公司的系列DSP芯片采用哈佛结构、流水线操作、专用硬件乘法器、快速DSP指令,使其在数字信号处理,通信和工业自动化等领域得到广泛应用[1]。TMS320C32是32位浮点处理器。它除了上述特点外,还具有增强型存储器接口、灵活的启动装载(boot loader)、可重定位的中断矢量表、灵活的中断方式和其他外设[2];其通信功能只包括片上集成的一个串口,但在设计中此串口一般被串行A/D或D/A芯片占用,或者被用于与另一片DSP芯片在“握手模式”(handshake mode)下直接连接。[3] 虽然TMS320C32串口有多种工作方式[3,4]。但通过串口相应的寄存器并不能直接配置出符合RS232标准的通信串口,而RS通信串口是自动化控制设备的一种基本通信方式,如PC机或其他各种基于微处理器的控制装置。RS232标准在1991年被标准化组织EIA(Electronic Industries Association)重命名为EIA232标准[5],是一种异步串行通信标准,包括机械连接、信号功能、电压特性和通信协议等几个方面的规定。 采用1片SC16C750B UART芯片[6]来完成TMS320C32的RS232串口的设计。此UART最高的串行数据速率可达3Mbps,引脚与TL16C750兼容,并且具有64字节接收和发送fifos以及自动硬件流量功能。这些特征使串口通信更加高效、可靠。 1 TMS320C32的RS232串口硬件设计 在基于微处理器开发的自动控制装置设计中,一般并不需要串行通信的长距离传输,故普遍采用“零-Modem”方式(Null-Modem or Zero-Modem)实现一对异步串口连接。图1为一种“零-Modem”连接方式(具体信号的意义可见RS232标准)。 由于RS232标准的异步通信规约数据帧都带起始位和停止位,并且SC16C750B UART芯片具有自动硬件流量控制功能,因此可以进一步忽略与Modem相关的控制信号(DTR、DSR、CD、RTS、CTS),简化连接。 1.1 SC16C7550B UART芯片 SC16C750B为异步串行通信芯片[6],带标准Modem接口,它具有以下主要特点: (1)标准异步错误位和帧格式位(起始位、停止位、奇偶校验位),并且帧格式可编程; (2)软件可选择波特率; (3)发送和接收各64字节FIFOs; (4)发送、接收、线路状态等中断可独立控制,并且中断优先级可额编程; (5)独立的接收时钟。 (6)在5V工作电压下,发送或接收速率可达5Mbps; (7)自动硬件流量控制 (8)4种可选择接收中断级别; (9)标准Modem接口; (10)引脚与ST16C450/550、TL16C450/550、PC16C450/550,软件与SC16C750及TL16C750兼容。其他一些特点不再赘述。 SC16C750B主要引脚的功能如表1所列,更具体的资料可见文献 [6] 。 1.2 硬件原理 硬件设计的总体思路: (1)UART的地址被分配到TMS320C32的IOSTRB外部存储器空间,片选信号对应的地址即为UART的基地址。 (2)RXRDY、TXRDY分别作为接收、发送中断信号,分别接C32的中断外部引脚INT0、INT1、并且C32的中断触发方式设为低电平触发。 (3)UART的TX、RX引脚均为CMOS电平,而RS232采用的是“负逻辑电平”。本设计采用1片MAX3232[7]完成它们之间的电平转换和驱动,其数据传输速率最高达1Mbps。 (4)使接收部分和发送部分的波特率相同,此时RCLK接BAUDOUT引脚。 (5)外部参考时钟频率为1.8432MHz。 1.3 UART扩展RS232串口原理 依据上面的整体思路设计出硬件电路,如图2所示。 图2中的端口信号,如数据和地址总线、复位信号、中断信号,完成与TMS320C32之间的连接。本设计中片选信号对应TMS320C32的IOSTRB空间中的0x810100h,即SC16C750B的内部寄存器的基地址。 2 TMS320C32的RS232串口软件功能设计 串口工作模式控制和数据收发都是通过TMS320C32对UART内部相关寄存器的读写操作来完成的。因此,首先分析一下SC16C750B片内寄存器的功能,然后确定在本设计中SC16C750B的工作模式,并且给出该串口的初始化程序、中断发送程序和中断接收程序。程序以C语言写成。 2.1 SC16C750B片内寄存器 表2给出SC16C750B内部寄存器的功能描述。寄存器各位意义可参见该芯片的数据手册。 2.2 程序设计 首先初始化编程,以确定TMS320C32与SC16C750B之间的操作方式、数据传输帧格式、SC16C750B自身的工作模式、数据传输波特率的设置等工作。设定: (1)SC16C750B工作DMA模式0(DMA mode 0)。在此模式下,每当发送寄存器THR为空,TXRDY信号会降为逻辑低电平。只要接收寄存器RHR被装载了一个字符,RXRDY会立刻降为逻辑低电平。 (2)TMS320C32与SC16C750B UART之间的操作方式采用中断操作方式,中断方式相对于查询方式可以提高TMS3320C32的工作效率。TMS320C32的INT0中断引脚接UART的RXRDY信号,INT1接TXRDY信号。这样,由INT0、INT1对应的中断服务例程完成数据的接收和发送。 (3)数据传输帧格式:数据字长8位、2位停止位、偶校验。 (4)设置波特率。 在RS232电平逻辑中,串行数据速率(serial data rate)就在等于波特率(baud rate)。如果外部时钟频率(XTAL1 clock frequency)为1.8432MHz、波特率19 200bps时,对应的波特率除数(divisor)为6。 用C语言开发[8]TMS320C32的串口通信程序。初始化程序如下: #include<stdlib.h> #include<ioports.h> //声明SC16C750B寄存器的结构 typedef struct{ unsigned RHR;//接收保持寄存器 unsigned THR;//发送保持寄存器 unsigned IER;//中断使能寄存器 unsigned FCR;//FIFO控制寄存器 unsigned ISR;//中断服务状态寄存器 unsigned LCR;//线路控制寄存器 unsigned MCR;//Modem控制寄存器 unsigned LSR;//线路状态寄存器 unsigned MSR;//Modem状态寄存器 unsigned SPR;//便笺寄存器 unsigned DLL;//波特率除数低字节锁存器 unsigned DLM;//波特率除数高字节锁存器 }SerialPort; //SC16C750B的寄存器基地址为0x810100h serialPort sp={ 0x810100h,0x810100h,0x810101h, 0x810102h,0x810102h,0x810103h, 0x810104h,0x810105h,0x810106h, 0x810107h,0x810100h,0x810101h, }; void main(void){ … //波特率设置 outport(sp.LCR,0x80); //LCR[7]=0 outport(sp.DLL,0x06); //波特率19 200bps outport(sp.DLM,0x00); outport(sp.LCR,0x1F); //数据帧格式 outport(sp.FCR,0xA1); //DMA mode 0 outport(sp.IER,0x07); //中断使能 … //INT0中断服务例程——数据接收 unsigned char recvdata; void c_int01(void){ recvdata=inport(sp,RHR); //INT1中断服务例程——数据发送 void c_int02(void){ outport(sp.THR,transdata); 3 结论 |