

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计说明书(论文)
指导者:
(姓 名) (专业技术职务)
评阅者:
(姓 名) (专业技术职务)
2012 年 6月
毕业设计说明书(论文)中文摘要
毕业设计说明书(论文)外文摘要
目 录
1 绪论1
1.1 串口通信及TMS320F2812的发展及应用简介1
1.2 串口扩展方案的现状1
1.3 本文的主要工作2
2 串口扩展总体设计及硬件介绍3
2.1 串口扩展原理3
2.2 串口扩展硬件实物图4
2.3 串口扩展硬件介绍5
2.3.1 TMS320F2812简介5
2.3.2 UART芯片TL16C754B简介7
2.3.3 多协议收发器MAX3160简介10
3 串口扩展硬件设计及软件编程12
3.1 串口扩展硬件连接图12
3.2 串口扩展软件编程14
3.2.1 串口扩展软件原理图14
3.2.2 TI CCS集成开发环境15
3.2.3 串口扩展C程序代码15
3.3 串口扩展调试结果21
4 上位机串口调试设计24
4.1 MSComm控件的创建24
4.2 MSComm控件通讯处理方式及属性25
4.2.1 MSComm控件通讯处理方式25
4.2.2 MSComm控件属性25
4.3 MSComm 控件串口编程26
4.3.1 串口初始化26
4.3.2 串口读写27
4.4 上位机串口调试结果28
5 结束语28
5.1 本论文的工作总结30
5.2 有待进一步进行的工作30
致 谢32
参考文献33
1 绪论
1.1 串口通信及TMS320F2812的发展及应用简介
通用异步串行接口(UART)简称串口,现已被广泛用于各种数据通讯系统;自从进入计算机时代,伴随着半导体技术的飞速发展,串口也得到多次大的改进(口线的减少),性能得到很大的提高,但仍然具有强大的生命力,特别是在嵌入式设备中,一般都带有串口,因而使用串口通讯就显得合乎自然。异步串口通信具有线路简单、应用灵活、可靠性高等一系列优点, 长期以来获得了广泛的应用,在数字控制领域, 其优越性尤为明显。当前,以微处理器为核心构成的智能化测控系统及电子产品不断涌现,为了满足数字化及智能化要求,许多外围电路功能模块、部件、器件及传感器也具备了UART串口通信功能。而现阶段的微处理器芯片或者没有UART接口,或者只有1个UART接口,很少带有2个以上的,很难满足系统中多串口通信的需要。TMS320F2812是TI公司主推的一款用于数字控制处理领域的高性能数字信号处理器,最高工作频率可达150MHz,是目前用于该领域性能最好的32位定点DSP芯片之一,应用前景非常广阔。该芯片提供了两路2路异步串行通信接口SCIA和SCIB,这在很多应用场合远远不够。在这种情形下,多串口扩展就显得很有必要。
1.2 串口扩展方案的现状
就一般的微控制器(MCU)而言,扩展串口的方法有很多种,其主要分为三类:一是时分复用法,二是软件扩展方法,三是硬件扩展方法。
◇ 时分复用法
采用分时复用一个串口和多个设备通信的方法来扩展,通过串口收发器来接收多路串口信号,将多路串口信号映射到一个时分复用的TDM接口的多个时隙中,虚拟成多个接口。该方法成本低,但只适用于数据量不大的场合,且没有实现同时收发,只能一个方向传输数据,只能由主控CPU主动和多个设备通信,因而限制了应用范围。
◇ 软件扩展方法
软件扩展方法最常见的是通过I/O口来模拟串口以收发数据,此方法的优点是成本低,扩展方便,但同时也存在着通讯波特率低(最高不能超过4800bps),可靠性差(尤其是对于实时性要求很高的情形下)等缺点。
◇ 硬件扩展方法
硬件扩展方法主要是通过增加一个器件来实现,具体实现方法有3种:其一是同步转异步,器件有MAX3100,FPGA,CPLD等;其二是串转串,就是一个主串口带4个从串口,如国腾微电子的GM8125(每个串口波特率必须是一致的)、视普科技的SP2538(各个串口可以设置为不同的波特率,其串口均为简单的3 线接口)等;其三是并转串,就是把并行数据转换成串行数据,器件有TI公司的TL16C550、TL16C554、TL16C654、TL16C754B等。
1.3 本文的主要工作
多串口扩展的设计方案很多,在确立具体设计方案前,应该充分考虑具体项目实施工程中的各种因素。包括使用环境、外设特点、成本、性能、冗余性、可靠性等等。由于传统的异步串口扩展方法很难满足高实时性、高波特率的要求,这种情况下,使用高性能UART芯片进行扩展是一种上佳方案。本文结合某在研项目中的成功使用,对基于高性能UART芯片TL16C754B的TMS320F2812 串口扩展方法进行了详细说明。本人所做的工作主要有:① 学习DSP微处理器芯片TMS320F2812的各个功能模块,主要是针对异步通信接口SCI模块深入学习其发送和接收数据的相关原理,熟悉其SCI模块的寄存器及其各位的功能。② 学习串口通信的相关原理,了解RS232、RS485和RS422的收发协议,重点熟悉的是RS232通信模式及DB9接口的各个管脚功能。③ 查阅德州仪器公司UART芯片TL16C754B的芯片资料,熟悉其功能特点和各个管脚的功能以及TL16C754B的11个相关寄存器及其各位的功能。④ 查阅MAXIM公司可编程多协议收发器MAX3160的芯片资料,熟悉其各个引脚功能以及RS232、RS485和RS422三种工作
2 串口扩展总体设计及硬件介绍
2.1 串口扩展原理
本文在研究单片机及DSP微处理器的基础上设计了一种基于TMS320F2812的模块化多串口扩展装置,通过此装置可以轻易的实现串口扩展。其设计模块主要包括信号处理单元、串并转换单元和串口驱动单元。其中信号处理单元向上连接到上位机,向下连接到串并转换单元,串并转换单元将信号处理单元和串口驱动单元连接起来,串口驱动单元则向上连接到串并转化单元,向下连接到扩展串口。其扩展的原理框图如图2.1所示:
图2.1 串口扩展原理框图
图2.1示意了上位机、信号处理单元、串并转换单元、串口驱动单元和8个扩展串口B1—B8。信号处理单元向上连接到上位机,向下连接到串并转换单元,串并转换单元将信号处理单元和8个串口驱动单元连接起来,串并转换单元通过8个串口驱动单元向下连接可获得8个扩展串口,可接到8个终端上用来驱动终端设备工作。其中:
(1)一方面,上位机发出的命令首先给信号处理单元,信号处理单元再根据此命令解释成相应信号控制扩展串口相应终端设备。另一方面,信号处理单元不时读取终端设备状态数据转换成数字信号反馈给上位机。
(2)信号处理单元以DSP微处理器芯片TMS320F2812为核心,利用它强大的数字信号处理能力,一方面,它以中断的方式接收上位机的数据,经数字运算处理后,将接收到的数据转化为相应的并行数据送上数据总线发给串并转换单元;另一方面,它可以接受扩展串口要求通信的请求,接受串并转换单元的数据,加上串口设备号信息,发送给上位机。
(3)CPLD和两片TL16C754B 作为串并转换单元,一方面,串并转化单元从TMS320F2812接收数据,将TMS320F2812输出的并行数据转化为串行数据选择输出到8个扩展串口;另一方面,串并转化单元也可以实现从8个扩展串口接收数据,实现串-并转换,把读取扩展串口中的串行数据转换为并行的数据输出到信号处理单元。
(4)串口驱动单元选用多协议收发器MAX3160。它可用来进行串口电平TTL之间的转换,使得异步串行接口电平可以配置为 RS-232、RS-422和RS-485三种电平标准。可以将MAX3160的、FAST、HDPLX和RS485/连接到CPLD的I/O控制端,由软件控制其电平的高低,用来实现多协议串口的控制。RS232主要用于PC与F2812的通信,而RS485主要用于工业生产方面,在抗干扰方面性能较强。
(5)扩展的8个串口便可用来接不同的终端设备,如电机控制、转台控制、红外调焦及增益控制等。
2.2 串口扩展硬件实物图
在F2812开发板上集成两片TL16C754B、8片MAX3160、CPLD、片外FLASH、
片外SRAM、电源转化芯片及其它相关芯片。由于F2812工作时需要内核1.8V电压,I/O端口3.3V电压,因此需要加电源转化芯片将12V电压转为5V,再将5V分别转化为1.8V和3.3V以满足工作要求。集成各个模块的硬件实物图如图2.2所示:
图2.2 串口扩展硬件实物图
2.3 串口扩展硬件介绍
本文是在DSP微处理器TMS320F2812的基础上,利用美国德州仪器公司生产的4通道UART芯片TL16C754B和MAXIM公司生产的可编程多协议收发器MAX3160进行的串口通道扩展,下面将予以简要介绍以上芯片。
2.3.1 TMS320F2812简介
TMS320F2812数字信号处理器是TI公司推出的32位定点DSP控制器,采用8级指令流水线,最高速度每秒可执行1.5亿条指令。其CPU主频可达150MHz,并且提供浮点数学函数库,可以在定点处理器上方便地进行浮点运算,极大提高了芯片的处理速度,保证了信号处理的精确与实时性。采用哈佛总线结构,统一寻址,利用多总线在内外存储器、外围模块和CPU间进行数据交换。多总线结构使其可以在一个周期内并行完成取指令、读数据和写数据操作,从而提高处理器的数据处理能力。片上集成了丰富的外设资源,主要有12位16通道的模数转换器(ADC)、事件管理器(EVA和EVB)、串行外设接口(SPI)、串行通信接口(SCIA和SCIB)、增强型局域网控制器模块(eCAN)、多通道缓冲串行接口(McBSP)、通用输入/输出(GPIO)多路复用器等。由于它自带了两个异步串行通信接口SCIA和SCIB接口,且串口扩展装置中用到它与上位机进行通信,下文将对SCI接口的相关原理及主要寄存器作简单介绍。
SCI模块数据发送与接收原理
发送过程:首先,发送数据缓冲寄存器SCITXBUF获取由CPU加载的需要发送的数据,然后SCITXBUF将数据传输给发送移位寄存器TXSHF,如果SCI的发送功能使能,TXSHF则将接收到的数据逐位移到SCITXD引脚上。
接受过程:首先,接收移位寄存器 RXSHF逐位接收来自于SCIRXD引脚的数据,如果SCI的接收功能使能,RXSHF将这些数据传输给接收缓冲寄存器SCIRXBUF和接受仿真缓冲寄存器(SCIRXEMU),CPU就能读取外部发送来的数据。
当然,如果在数据发送与接收的过程中使能了FIFO增强功能,则可设定发送与接收缓冲器的深度、设定延时时间和可编程的中断等级以及具有自动波特率侦测功能等。
SCI通信数据格式
SCI异步通信格式使用单线(即半双工)或双线(即全双工)通信。在这种模式下,数据帧包括一个起始位、1—8个数据位、一个可选的奇偶校验位、1或2个停止位和在地址位模式下1个用于识别数据中地址的附加位。
SCI模块主要寄存器
★ SCI通信控制寄存器(SCICCR)
SCICCR用于定义SCI字符格式、通信协议和通信模式。SCICCR各位如图2.3所示:
图2.3 SCICCR(地址7050h)
★ SCI控制寄存器1(SCICTL1)
SCICTL1控制接收器/发送器使能、TXWAKE和SLEEP功能和SCI软件复位。SCICTL1各位如图2.4所示:
图2.4 SCICTL1(地址7051h)
★ SCI控制寄存器2(SCICTL2)
SCICTL2使能接收准备、间断检测和发送准备中断,并使能发送器准备和空标志。SCICTL2各位如图2.5所示:
图2.5 SCICTL2(地址7054h)
★ SCI接收器状态寄存器(SCIRXST)
SCIRXST包含7个接收器状态标志位(其中2个可产生中断请求)。每当一个完整的字符被传送到SCIRXEMU和SCIRXBUF时,状态标志就会被更新。SCIRXST各位如图2.6所示:
图2.6 SCIRXST(地址7055h)
★ SCI FIFO发送寄存器(SCIFFTX)
SCIFFTX各位如图2.7所示:
图2.7 SCIFFTX
★ SCI FIFO接收寄存器(SCIFFRX)
SCIFFRX各位如图2.8所示:
图2.8 SCIFFRX
★ SCI FIFO控制寄存器(SCIFFCT)
SCIFFCT各位如图2.9所示:
图2.9 SCIFFCT
2.3.2 UART芯片TL16C754B简介
TL16C754B是带有64字节FIFO、自动硬件和软件流控制的四通用异步收发器(UART),其数据速率高达3Mbps。TL16C754B具有增强的功能,它有一个发送控制寄存器(TCR)用来在硬件和软件流的控制下存储接收FIFO阈值水平来开始或停止发送。通过FIFO RDY寄存器,软件可以在一次访问四个端口中获得TXRDY或RXRDY状态位。片内状态寄存器给用户提供错误检测、操作状态和modem接口控制。系统中断可用来满足用户的需求。内部环回功能可允许片上诊断。UART将8位数据总线上的数据发送到TX信号线上,从RX信号线上接收数据。数据位可编程为5,6,7或8位。UART有64字节接收FIFO和发送FIFO,可通过编程在不同的触发水平上中断。UART可基于可编程的除数和输入时钟来获得想要的波特率。它可以发送奇校验位、偶校验位或无校验位以及1个、1.5个或2个停止位。接收器可以检测间断、空闲或帧错误,FIFO上溢和奇偶校验位错误,发送器则可检测到FIFO下溢。UART还具有一个可用来modem控制操作的软件接口,以及软件流控制和硬件流控制功能。
TL16C754B有80脚TQFP和68脚PLCC封装。其中A0—A2为片内寄存器的选择信号端,D0—D7为双向8位数据线,IOR为读使能端(低电平有效),IOW为写使能端(低电平有效),INTA—INTD为中断A、B、C、D端(高电平有效),CSA—CSD为片选A、B、C、D(低电平有效),XTAL1,XTAL2为外部时钟端,可接晶振或外部时钟信号,RXA—RXD为串行输入A、B、C、D端,TXA—TXD为串行输出A、B、C、D端,RXRDY为接收准备信号端(低电平有效),TXRDY为发送准备好信号端(低电平有效)。
① TL16C754B内部寄存器
通过地址线A[0],A[1],A[2]和某些情况下其它寄存器的位(LSR的第7位)可选择每个寄存器。
★ RHR(接收保持寄存器)
接收器部分包括接收保持寄存器(RHR)和接收移位寄存器(RSR)。RHR实际上是64字节的FIFO。RSR从RX端接收串行数据,数据被转成并行,然后移到RHR。接收器部分是通过线路控制寄存器(LCR)控制的。如果FIFO未被使能,FIFO零的位置用来存放字符。如果发生上溢,字符将会被丢失。RHR也会存储每个字符的错误状态位。
★ THR(发送保持寄存器)
发送器部分包括发送保持寄存器(THR)和发送移位寄存器(TSR)。THR实际上是64字节的FIFO。THR接收数据将其移位到TSR(这里将数据转为串行),然后将其送到TX端。如果FIFO未被使能,FIFO零位置用来存储字节。如果发生上溢,字符会丢失。
★ FCR (FIFO控制寄存器)
这是一个只写寄存器。它用来使能FIFO,清除FIFO,设置发送器和接收器触发水平,选择DMA的模式。
★ LCR (线路控制寄存器)
这个寄存器控制数据通信的格式。通过向LCR写入适当的位可选择字长,停止位的个数,奇偶校验类型。
★ LSR (线路状态寄存器)
当读LSR,LSR的第2到第4位反映了接收FIFO顶部字符的错误位(BI,FE,PE)。LSR的第2到第4位物理上并不存在,因为读LSR时,从接收FIFO里读出的数据直接被传送到数据总线。所以,通过读LSR可以辨别字符中的错误,然后去读RHR。
★ MCR(modem控制寄存器)
MCR控制模仿modem时与modem的接口,数据设置或外围设备。
★ MSR (modem 状态寄存器)
这个8位寄存器提供了从modem,数据设置或外围设备到处理器的控制线的当前状态。
★ IER (中断使能寄存器)
IER使能六种中断类型的每一种(接收错误,RHR中断,THR中断,modem中断,接收到Xoff字符,CTS/RTS从低到高状态的改变)。INT输出信号将变成高电平作为对产生的中断的响应。
★ IIR (中断识别寄存器)
IIR是一个8位只读寄存器。它提供了一个具有优先级的中断源。
★ EFR (增强功能寄存器)
这个8位寄存器使能或禁用UART的增强功能。
★ DLL和DLH(除数锁存寄存器)
这两个8位的寄存器存储波特率发生器产生波特率时钟的16位除数。DLH存储除数的高8位,DLL存储除数的低8位。
★ TCR (发送控制寄存器)
这个8位寄存器用来存储在硬件或软件流控制下的开始或停止发送的接收FIFO阈值水平。
★ TLR (触发水平寄存器)
这个8位寄存器用来存储用于DMA和发生中断的发送和接收FIFO触发水平。
★ FIFO准备寄存器
FIFO准备寄存器提供发送和接收FIFO的实时状态。
② TL16C754B的初始化配置
TL16C754B是一款可灵活选择配置的芯片,其每一通道的初始化配置均可根据实际需要来进行。下面以串口A通道为例,给出初始化配置,并给出相关注解:
(用1.8432MHz晶振)
* UARTA_LCR=0x80;//LCR第7位置1,使能DLL,DLH
* UARTA_DLL=0x0C;
* UARTA_DLH=0x00;//配置A通道波特率为9600
* UARTA_LCR=0xBF;//使EFR有效
* UARTA_EFR=0x10;//使能增强功能
* UARTA_FCR=0x01;//设置发送FIFO为16字节
* UARTA_LCR=0x00;//关闭除数锁存寄存器
* UARTA_LCR=0x1B;//设置数据格式(8位数据位,1位偶校验位,1位停止位)
* UARTA_FCR=0x47;//使能FIFO,配置接收FIFO为16字节
* UARTA_IER=0x01;//使能接收中断
注:FCR不同的位必须在不同工作模式下写入,即发送FIFO和接收FIFO的深度设定必须分两次进行,在增强功能模式下设定发送FIFO深度,在普通工作模式下设定接收FIFO深度。
2.3.3 多协议收发器MAX3160简介
MAX3160是MAXIM公司生产的一种高性能管脚可编程的多协议收发器件,可通过引脚设置为双发送双接收RS232接口或单路RS485/RS422收发器。该芯片采用独特的低压差发送输出级和内部双电荷泵结构,在+3V—+5.5V电源供电时,可满足RS232和RS485/RS422协议标准。芯片中的接收器带有失效保护电路,当接收器输入短路或开路时,器件输出为高电平。MAX3160的限摆率功能可减少电磁干扰,并可在不适当的终端匹配情况下减少信号反射。当禁止限摆率功能时,其数据传输速率在RS485/422模式下可高达10Mbps,在RS232模式下可达1Mbps。MAX3160采用SSOP封装,其流畅的引脚排列非常有利于PCB板布局。另外,该器件还具有节电模式和过流过热保护功能。
MAX3160 引脚功能如下(括号内的数字为引脚号):
C1 + (1):外接电容正极;
VCC(2):电源正端,外接的滤波电容应尽量靠近该脚;
C1-(3):外接电容负极;
Z(B)/T1OUT (5):RS485/422全双工状态反相驱动输出(或RS485/422半双工状态下的接收器反相输入端)或RS232驱动输出端;
Y(A)/T2OUT (6):RS485/422全双工状态正相驱动输出(或RS485/422半双工状态下的接收器正相输入端)或RS232驱动输出端;
R1OUT(7):RS232接收器输出端;
RO/R2OUT(8):RS485/422接收器输出端和RS232接收器输出端;
(9):低有效节能控制端,低电平时将关断收发器和内部充电泵;
FAST(10):限摆率控制端,接低电平时传输速度为250kbps,并可有效降低电磁干扰;接高电平时,传输速度可高达10Mbps(RS485/422方式)或1Mbps(RS232方式);
RS485/ (11):可编程控制脚,高电平时为RS485/422方式,低电平时为RS232方式;
HDPLX(12):可编程控制脚,高电平时为半双工状态,低电平时为全双工状态;
A/R2IN(13):分别为RS485/422接收器正相输入或RS232接收器正相输入;
B/R1IN (14):分别为RS485/422接收器反相输入/RS232接收器反相输入;
DE485/T2IN (15):为RS485/422驱动器使能端/RS232驱动器输入端;
DI/T1IN (16):RS485/422驱动器输入端或RS232驱动器输入端;
V-/V+ (17)/(20):内部充电泵外接电容端;
C2-/C2+ (18)/(19):外接电容负端/正端。
系统设计时,可以将MAX3160的、FAST、HDPLX和RS485/连接到DSP或CPLD的I/O控制端,由软件控制其电平的高低,以实现多协议串口的编程控制。
3 串口扩展硬件设计及软件编程
前文已经对串口扩展的原理框图做了详细介绍,并对扩展所用到的DSP微处理器芯片TMS320F2812的相关工作原理及UART芯片TL16C754B和多协议收发器MAX3160的功能做了简要介绍,本章将在原理框图和相关芯片功能的基础上设计串口扩展的硬件连接图及其在CCS开发环境下的软件编程,并利用串口调试助手,利用两台计算机进行通信,得到发送和接收数据调试的结果。
3.1 串口扩展硬件连接图
图3.1 TMS320F2812与TL16C754B连接图
图3.1示出TMS320F2812与TL16C754B的简化硬件连接图。由于每片TL16C754B UART具有4个通道,考虑到串口扩展后可能要驱动多个终端设备(有可能会超过4个),故需用两片TL16C754B UART扩展出8个通道,这样最多可能驱动8个终端,一般能够满足各种需求。图中只给出了一些重要的引脚信号,而且只用了一片TL16C754B,另外一片可做类似连接。将F2812的读写控制信号、、数据总线XD0~XD7和低三位地址总线XA0、XA1、XA2分别与TL16C754B的读写控制信号、、数据总线D0~D7和地址信号线A0、A1、A2相连接。将4个通道的中断信号INTA、INTB、INTC和INTD通过一或门接到F2812的外部中断XINT1上。只要TL16C754B有一个通道接收数据中断就会引发F2812的外部中断。通过F2812的地址信号线XA8、XA9、XA10、XA11、XA13、XA14和F2812外部存储空间的片选信号(空间0和1共用一个片选信号)的组合逻辑电路来控制TL16C754B四个通道的片选信号、、和。可以将TL16C754B扩展到空间1,其对应的地址为0
图3.2示出的是TL16C754B与MAX3160的连接图。
图3.2 TL16C754B与MAX3160连接图
图3.2选择的是RS232模式,通过DB9接口,可接到终端设备上,驱动设备。引脚接高电平开启收发器和内部充电泵,RS485/引脚接低电平选择RS232模式,HDPLX引脚接低电平是全双工工作状态,FAST引脚接高电平传输速率可达1Mbps。
3.2 串口扩展软件编程
3.2.1 串口扩展软件原理图
硬件设计完成后,关键就是软件设计,软件设计的好坏直接影响着功能的实现和性能。软件设计包括初始化设置、SCI串口的数据发送及接收、扩展的八个串口的数据发送及接收等。在进行串口操作之前,必须要先对其进行初始化设置。初始化设置主要包括初始化F2812系统控制(时钟、看门狗、PLL等)、F2812的PIE中断控制及中断向量表、F2812的CPU中断、F2812的GPIO引脚功能配置、F2812的SCI模块寄存器设置、TL16C754B的寄存器初始化设置等(波特率设置、数据格式、FIFO深度、接收中断等)。其中心控制软件原理图如图3.3所示:
图3.3 串口扩展软件原理图
其中上位机与信号处理单元TMS320F2812之间的串口工作方式为中断方式,信号处理单元与下面8个终端的串口之间的工作方式为查询方式。一方面,信号处理单元TMS320F2812中断接收上位机发送的数据,然后以查询方式选择输出到8个扩展串口,至于具体选择哪路扩展串口,则需查询通道号标志ID来确定,上位机所发数据被TMS320F2812接收后保存在接收数组中。接收数组中的第1个字节表示的就是通道号标志ID(例如可以是0xB1,我们知道它是要发送到第一片UART的A通道去,假如是0xB6,我们知道它是要发送到第二片UART的B通道中去,当然这种对应关系是我们事先规定好的),接收数组中的其它字节则是上位机要真正发送的数据信息,通过发送通道号标志ID我们便可很方便地知道数据信息需要传送到哪一片TL16C754B的哪个通道,即在哪一个扩展串口可接收到数据去驱动终端工作。当然串口指令发送完以后还要返回给前级信号处理单元,以检查指令发送是否成功;另一方面,当扩展串口的终端需要向上位机发送数据时,先要向信号处理单元TMS320F2812发送请求,然后串并转换单元读取扩展串口中的串行数据将其转换为并行数据
3.2.2 TI CCS集成开发环境
① CCS简介
CCS是TI公司推出的功能强大的软件开发环境,现在该集成软件环境可以用于TI各系列DSP系统的软件程序开发。CCS可直接编写C/C++、汇编、头文件以及CMD文件等;集成代码生成工具、基本调试工具、断点工具、探针工具、代码分析工具、数据的图形显示工具以及DSP/BIOS工具,支持通过GEL(通用扩展语言)来扩展CCS的功能、RTDX(实时数据交换)技术以及开放式的plug-ins技术,支持其它第三方的ActiveX插件。
② CCS软件开发流程
安装好CCS后,首先要正确地对CCS进行设置(安装仿真器驱动),然后建立汇编源文件、C或者C++源代码文件和定位控制文件(.cmd),把这些文件和必要的库文件都添加到新建工程中。接下来对工程的各种汇编、编译、和链接选项设置,再通过“build all”命令来完成整个工程的编译和链接。生成一个输出文件(.out)后用File菜单下的load命令将其加载到RAM中,之后可以对DSP软件程序在线调试,调试出稳定、可靠、高效的软件程序后,将程序烧写到DSP芯片内部的Flash里。
3.2.3 串口扩展C程序代码
通过在CCS集成开发环境下编程的C语言程序代码如下:
注:此程序是对TL16C754B UART1(第一片UART)的A通道(通道号为0xB1)所接终端操作,其它通道可接终端作类似处理。
#include "DSP28_Device.h" //与主机通信方式的变量定义
#include "DSP28_CHA1_uart.h"
//TL16C754B寄存器地址分配、初始化配置和寄存器读写函数定义
#include "DSP28_CHA2_uart.h"
volatile char DataReceived[100];//串行口接收数据存储数组
volatile char Datasend[100]; //串行口发送数据存储数组
unsigned int Send_Flag; //SCI-A发送标志变量
unsigned int Return_FLAG=0;//F2812接收终端返回指令的标志变量
int Uart1_A
int Uart1_B;
int Uart1_C;
int Uart1_D;
int Uart2_A;
int Uart2_B;
int Uart2_C;
int Uart2_D;
void DTEfunction(void);
//将F2812接受的数据通过TL16C754B转发给终端的函数原型声明
void SciaXmit(int a); //SCIA发送函数原型声明
interrupt void SciaRxIsr(void); //SCIA接受中断服务函数原型声明
void main(void)
{
Uint16 i = 0;
InitSysCtrl(); //初始化系统控制寄存器、PLL、看门狗和时钟
DINT;//关中断(清除所有中断并初始化PIE中断向量表,禁止CPU中断)
InitPieCtrl(); //初始化PIE中断
IER = 0x0000;
IFR = 0x0000; //禁止所有CPU中断并清除所有中断标志位
InitPieVectTable(); //初始化PIE中断矢量表
InitSci(); //初始化SCIA模块
EALLOW; // 向EALLOW保护的寄存器写数据
init_Gpio(); //初始化GPIO
PieVectTable.RXAINT = &SciaRxIsr;
//将SCIA接受中断函数的中断入口向量重新进行映射
EDIS; // 禁止向EALLOW保护的寄存器写数据
PieCtrl.PIEIER9.bit.INTx1 = 1;
//使能PIE第9组第一个中断(串口接收中断)
IER|=0x100;//使能CPU级中断INT9
EINT;
ERTM;//使能全局中断和实时调试中断
Uart1_A=F2812_CHA1_UART_open(F2812_CHA1_UARTA,0x0C,&CHA1_UartConfig);
Uart1_B=F2812_CHA1_UART_open(F2812_CHA1_UARTB,0x0C,&CHA1_UartConfig);
Uart1_C=F2812_CHA1_UART_open(F2812_CHA1_UARTC,0x0C,&CHA1_UartConfig);
Uart1_D=F2812_CHA1_UART_open(F2812_CHA1_UARTD,0x0C,&CHA1_UartConfig);
Uart2_A=F2812_CHA2_UART_open(F2812_CHA2_UARTA,0x0C,&CHA2_UartConfig);
Uart2_B=F2812_CHA2_UART_open(F2812_CHA2_UARTB,0x0C,&CHA2_UartConfig);
Uart2_C=F2812_CHA2_UART_open(F2812_CHA2_UARTC,0x0C,&CHA2_UartConfig);
Uart2_D=F2812_CHA2_UART_open(F2812_CHA2_UARTD,0x0C,&CHA2_UartConfig);
//其中F2812_CHA1_UART_open和F2812_CHA2_UART_open函数对两片TL16C754B的8个通道初始化配置(所选晶振1.8432MHz,波特率为9600)
for(;;)
{
searchfunction();
//TL16C754B UART1查询从控制终端返回来的指令并反馈给上位机
if(Send_Flag == 1)
//发送标志为1表明收到终端的返回指令,需转发给上位机
{
for(i = 0; i < 15; i++)
{
SciaXmit(Datasend[i]);
}
Send_Flag = 0; //将SCIA发送标志清零
if(SciaRegs.SCIFFRX.bit.RXFIFST !=0 )
//如果接受FIFO状态不为0,则复位FIFO指针
{
SciaRegs.SCIFFRX.bit.RXFIFORESET = 0; //复位FIFO指针
NOP;
SciaRegs.SCIFFRX.bit.RXFIFORESET = 1; //重新使能接收FIFO
NOP;
}
}
}
}
void SciaXmit(int a)
{
SciaRegs.SCITXBUF = a;
}
interrupt void SciaRxIsr(void) // SCIA接受中断服务函数
{
Uint16 i;
for(i=0;i<15;i++)
{
DataReceived[i]=SciaRegs.SCIRXBUF.all;
//将SCIA接收到的数据赋值给数组DataReceived[100]
}
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; //清除中断标志位
PieCtrl.PIEACK.all|=0x100; //允许其它相应中断
if(DataReceived[0]==0xB1)
//接受数据的第0位0xB1代表TL16C754B UART1的A通道号
{
CleanUart1(Uart1_A); //对 TL16C754B UART1的A通道的FIFO清零
DTEfunction();
//将F2812接受的数据通过TL16C754B UART1的A通道转发给终端
}
}
void DTEfunction(void)
{
Uint16 i;
for(i=1;i<15;i++)
{
F2812_CHA1_UART_putChar(Uart1_A,(DataReceived[i] & 0xFF) );
//将F2812接受的数据其他位转发给终端
}
Return_FLAG=1;//A通道转发数据后将返回标志置1,等待终端返回指令
}
void searchfunction(void)
{
Uint16 i,j;
if(Return_FLAG==1) //数据已经通过TL16C754B UART1转发,等待返回指令
{
Datasend[0]=0xB1; //将通道号0xB1赋给发送数组的第0位
for(i=1;i<15;i++)
{
Datasend[i]=F2812_CHA1_UART_getChar(Uart1_A);
} //TL16C754B UART1的A通道接收终端返回的指令
Send_Flag=1; //收到返回指令后,置位SCIA的发送标志
Return_FLAG=0; //将返回指令标志位清零
}
}
void InitSci(void)
{
SciaRegs.SCICCR.all=0x07;//1个停止位,无回送,禁止校验,8位字符长度
SciaRegs.SCICTL1.all=0x03;//使能发送和接收,禁止接收错误中断
SciaRegs.SCICTL2.bit.RXBKINTENA=1;//使能接收/间断检测中断
SciaRegs.SCIHBAUD=0x01;
SciaRegs.SCILBAUD=0xe7;//设置波特率为9600
SciaRegs.SCIFFTX.all=0xC040;//使能FIFO,禁止发送中断,发送FIFO复位
SciaRegs.SCIFFRX.all=0x406F;//使能接收中断,接收FIFO复位,15级
SciaRegs.SCIFFCT.all=0x0000;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;//发送FIFO复位后重新工作
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;//接收FIFO复位后重新工作
SciaRegs.SCICTL1.bit.SWRESET=1;//将SCI模块从复位状态释放
}
int F2812_CHA1_UART_getChar(int hUart)
{
int status;
while(1)
{
status = F2812_CHA1_UART_rget(hUart, F2812_CHA1_UART_LSR);
// F2812_CHA1_UART_rget函数表示从寄存器里读一个数据,此处表示读取LSR寄存器的8位数据
if ((status & 1) != 0)
//如果LSR的第0位(DR位表示数据接收保持寄存器有数据)为1,则跳出循环
break;
}
return F2812_CHA1_UART_rget(hUart, F2812_CHA1_UART_RHR);
//读取hUart通路里接收保持寄存器中的数据
} //整个函数表示从TL16C754B UART1里读数据
void F2812_CHA1_UART_putChar(int hUart, unsigned int data)
{
int status;
while(1)
{
status = F2812_CHA1_UART_rget(hUart, F2812_CHA1_UART_LSR);
if ((status & 0x20) != 0)
//如果LSR的第5位(THRE位表示发送保持寄存器为空)为1,则跳出循环
break;
}
F2812_CHA1_UART_rset(hUart, F2812_CHA1_UART_THR, data);
//向hUart通路里发送保持寄存器写入数据
} //整个函数表示TL16C754B UART1发送数据
3.3 串口扩展调试结果
通过前文的扩展原理框图及硬件连接图和软件编程相关程序代码,将F2812的SCI接口通过MAX232电平转换器和DB9口接到PC机上,将第一片TL16C754B的A通道(通道号标志ID为0xB1)通过MAX3160后由DB9口连接到另一台PC机上作为终端设备,即可模拟实现上位机与终端设备的通信。在CCS环境下运行程序,打开两台PC机上的串口调试助手,通过上位机上的串口调试助手向终端设备发送数据,在作为终端设备的PC机上的串口调试助手上接收数据。当向PC机上连续发送15个数据都为0x55时(其实是14个0x55,第1个数据为通道号标志ID为0xB1),接收的数据为连续14个55。串口调试助手上得到的数据如图3.4所示:
图3.4 连续发送15个0x55时终端接收数据图
在示波器上观察第一片TL16C754B UART1的30脚的UART1_TX管脚的输出信号,可观察到如图3.5所示的方波输出:
图3.5 UART1_TX管脚的输出波形图
当向PC机上连续发送15个数据如图3.6所示时:
发送的数据为:0xB1,0x55,0x54,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x35,0x45,0x12
图3.6 上位机发送数据图
接收的数据如图3.7所示:
图3.7 终端接收数据图
可以看到接收的数据为:0x55,0x54,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x35,0x45,0x12
除去串口通道号标志ID,接收的14个数据与发送的数据完全一致,当发送的数据换成其它的数据时,接收的数据和发送的数据也完全一致,当换成其它的通道时,接收的数据也和发送的数据一致(限于篇幅,不在此一一列举)。调试结果说明,使用TL16C754B成功地扩展了TMS320F2812的异步串行通信能力。
4 上位机串口调试设计
前文主要对串口扩展的硬件连接图及软件编程作了详细分析,并借助串口调试助手利用两台PC机互连得到调试结果。本章将基于整个转台控制系统对上位机的串口通信设计模块作进一步阐述并给出调试结果。以往在Windows平台上的串行通信多使用其提供的API函数来实现,这种方法使用起来需要许多底层设置,因而较为繁琐,并且难以理解。Visual C++提供了一种好用的ActiveX控件Microsoft Communications Control(即MSComm)来支持应用程序对串口的访问,在应用程序中插入MSComm控件后就可以较为方便地实现通过上位机串口收发数据。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. zs文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 塑料碗注射模设计说明书(含图纸)
- 平面关节型机械手设计(论文+dwg图纸)
- 普通x62w铣床的数控化改造设计
- cljd01-003@eps电机控制器的设计
- 利用有限元模型对钻机进行动态分析的研究
- 理工大学第二教学馆环境改造设计
- 2008年--外文翻译--中国机器人技术发展报告
- 空客h120
- 178 固定垫板冲裁模具设计【任务书+毕业论文+cad图纸】【全套机械资料】
- [测控技术论文]奥氏体304不锈钢磁检测法探头设计及实验研究【任务书+开题报告+翻译+论文】
- [双语翻译]--外文翻译---赛车轮胎设计中轮胎反包对轮胎耐久性和操作性影响
- 【zs精品】气门摇臂轴支座加工工艺及铣φ28外圆端面夹具设计【版本2】[含cad图纸,工艺工序卡,说明书等资料全套]【三维额外购】
- 电动自行车调速系统的设计【3张图纸】【优秀】
- 三年级语文花的学校课件讲解
- jq50滑移式起重夹钳设备的总体设计【5张cad图纸和说明书】
- 设计-cg2-150型仿型切割机(论文+dwg图纸)
- 基于labview的三轴位移系统设计【含ug装配三维及cad图】
- [vb毕设]vb校园网交换机节点管理系统+论文
- asp某公司进销存信息管理系统的设计与实现(源代码+论文)
- 四功能喷枪卡头芯注射模具设计【20张cad图纸+毕业论文】
评论
0/150
提交评论