TMS320F2812DSP与MT6056i触摸屏的通信设计和调试

2014-04-29 11:35冯惕
电子世界 2014年15期
关键词:通信触摸屏

【摘要】为了将MT6056i触摸屏作为TMS320F2812数字系统的人机界面,提出了沟通两者信息交换的通信设计方案。此设计根据各设备的功能特点,采用MAX3232芯片构成硬件的通信接口,触摸屏主动按批发送、运用F2812中SCI增强功能FIFO使F2812的CPU按批进行通信数据接收和发送、最后触摸屏按批接收的数据传送流程实现了两设备的通信。设计方案给出了F2812和MT6056i的基本设置、程序及数据回送通信的调试方法。该方案可有效解决F2812与触摸屏之间的通信问题,成功地使之作为F2812数字系统的人机界面。

【关键词 】F2812;触摸屏;通信;先进先出;宏指令

1.引言

DSP强大的运算功能 、快捷的处理速度使之成为许多系统的控制核心,如若配以触摸屏作为其人机界面,不但操作显示性则能大幅度提高,而且还有趋势线、数据报表、监控、报警等多种功能,使系统进一步趋于完美。

由于目前工业用触摸屏主要是作为PLC控制系统的人机界面,不能直接与DSP配套使用,其关键问题是两者无法进行通信。本文根据文献[1]所述系统通信部分的设计和调试经验,介绍TMS320F2812(文中简称F2812)DSP与威纶通科技有限公司MT6056i触摸屏(文中简称MT6056i)的通信设计和调试的具体方法。

2.F2812与MT6056i的硬件连接

触摸屏一般通过串行通信接口RS-232与其它设备进行通信,F2812外设串行通信接口SCIA需通过接口转换电路才能与触摸屏RS-232接口相连[1] ,见图1。MAX3232芯片中11端、12端分别与F2812的SCITXDA/GPIOF4端、SCIRXDA/GPIOF5端相连。J1插座中的1端、2端与3端分别与9 针RS232通信接口的5端、2端与3端相连。

图1 通信接口电路

3.通信原理

MT6056i与F2812之间采用主从通信方式,触摸屏为主设备,F2812为从设备。一次通信中,MT6056i发送请求帧,F2812收到后发送响应帧。

F2812方面,启用SCI的FIFO功能。当一帧N(通信帧长度,1~16,初始化时设定,文中取N=12)个字节全部进入FIFO接收寄存器组,在CPU查询时刻(若N个字节已全部到位)或在接收中断时刻,即将其一起转出,经校验无误后,存入一数组,按协议规则将其有用信息提取、变换,并根据其中的信息进行相应操作。之后,将要显示的信息按协议规则存入另一数组,经处理后送入FIFO发送寄存器组,由SCIA串行通信接口一批逐字节发出。

触摸屏RS-232接口接收该通信帧后,触摸屏内CPU将其整合为界面上可接受的数据格式,在人机界面相应位置上显示出来,一次通信结束。

每间隔一定时间,重复上述过程,就可连续进行F2812与MT6056i之间的信息交换,实现触摸屏对F2812数字系统的动态监控。

4.F2812主要通信设置及程序

F2812用C语言在CCS3.3中进行编程和调试。以下为F2812通信的初始化函数,“//”后为前一句语句的简要说明。其主要功能是根据通信要求为通信控制寄存器(SCICCR),控制寄存器1(SCICTL1)、控制寄存器2(SCICTL2),波特率寄存器(SCIHBAUD和SCILBAUD),FIFO发送寄存器(SCIFFTX)、FIFO接收寄存器(SCIFFRX),FIFO控制寄存器(SCIFFCT)设置参数[2-3]。基本通信参数为波特率19200bps,每个字符帧10位:1位起始位、8位数据位、无校验位、1位停止位。

void scia_fifo_init()

{

SciaRegs.SCICCR.all=0x0007;

SciaRegs.SCICCR.bit.SCICHAR=7;

//8位字符

SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0;

//空闲线模式

SciaRegs.SCICCR.bit.LOOPBKENA=0;

//禁止回送测试

SciaRegs.SCICCR.bit.PARITYENA=0;

//禁止奇偶校验

SciaRegs.SCICCR.bit.STOPBITS=0;

//一个停止位

SciaRegs.SCICTL1.bit.all=0x0003;

SciaRegs.SCICTL1.bit.RXENA=1;

//使能接收

SciaRegs.SCICTL1.bit.TXENA=1;

//使能发送

SciaRegs.SCICTL1.bit.SLEEP=0;

//禁止睡眠

SciaRegs.SCICTL1.bit.TXWAKE=0;

//非多处理器模式

SciaRegs.SCICTL1.bit.SWRESET=0;

//SCI软件复位

SciaRegs.SCICTL1.bit.RXERRINTENA=0;

//禁止接收錯误中断

SciaRegs.SCICTL2.bit.TXINTENA =0;

//禁止发送中断

SciaRegs.SCICTL2.bit.RXBKINTENA =0;

//使能RXRDY/BRKDY中断

SciaRegs.SCIHBAUD =0x0000;

SciaRegs.SCILBAUD =0x00f3;

//低速外设时钟为37.5 MHz时,波特率为19200bps

SciaRegs.SCIFFTX.bit.TXFFILIL=0;

//发送中断级位为0

SciaRegs.SCIFFTX.bit.TXFFIENA=0;

//禁止发送FIFO匹配中断

SciaRegs.SCIFFTX.bit.TXINTCLR=0;

//不影响TXFFINT标志位

SciaRegs.SCIFFTX.bit.TXFFINT=0;

//保留發送中断标志位默认值

SciaRegs.SCIFFTX.bit.TXFFST=0;

//保留发送状态位初始值SciaRegs.SCIFFTX.bit.TXFIFOXRESET=0;

//发送复位且发送FIFO指针为0

SciaRegs.SCIFFTX.bit.SCIFFENA=1;

//使能FIFO功能

SciaRegs.SCIFFTX.bit.SCIRST=1;

//FIFO重新开始发送或接收

SciaRegs.SCIFFRX.bit.RXFFIL=12;

//接收中断级位为12,为N。

SciaRegs.SCIFFRX.bit.RXFFIENA=1;

//使能接收匹配中断

SciaRegs.SCIFFRX.bit.RXFFINTCLR=0;

//不影响RXFFINT标志位

SciaRegs.SCIFFRX.bit.RXFFINT=0;

//保留接收中断标志位默认值

SciaRegs.SCIFFRX.bit.RXFIFST=0;

//保留接收状态位初始值

SciaRegs.SCIFFRX.bit.RXFIFORESET=0;

// 接收复位且接收FIFO指针为0

SciaRegs.SCIFFRX.bit.RXFFOVRCLR=0;

// 不影响接收FIFO溢出标志位

SciaRegs.SCIFFRX.bit.RXFFOVF=0;

//保留接收FIFO溢出标志位的默认值

SciaRegs.SCIFFCT.all=0x00;

//FIFO控制寄存器配置成默认状态

SciaRegs.SCICTL1.bit.SWRESET=1;

// 重新使能SCI

SciaRegs.SCIFFRX.bit.RXFIFORESET=1;

//重新使能FIFO接收

}

上述函数嵌入原系统main函数的初始化程序段。原main函数前要添加对应串口通信的头文件。实时通信相应语句嵌入for循环或中断循环结构内,以便进行动态监控,如:

#include "DSP281x_Device.h"

#include "DSP281x_Examples.h"

Uint16 dataA[12];

/定义数组,通信接收时用。

Uint16 dataB[12];

//定义数组,通信发送时用。

//定义其它变量。

void main(void)

{

Uint16 i;

EALLOW;

//允许写入受保护的寄存器。

GpioMuxRegs.GPFMUX.all=0x0030;

//将GPIOF4端设置为SCITXDA端、GPIOF5端设置为SCIRXDA端 。

EDIS;

//禁止写入受保护的寄存器。

scia_fifo_init();

//SCIA初始化。

for(;;)

{

…//其它程序段

if(SciaRegs.SCIFFRX.bit.RXFFINT==1)

//说明FIFO中已有12字节

{

for(i=0;i<12;i++)

{ dataA[i]=SciaRegs.SCIRXBUF.all;}

//将接收FIFO中的数据放入数组dataA

…//命令处理程序

for(i=0; i< 12; i++)

{SciaRegs.SCITXBUF=dataB[i]&0x00FF;}

//将数组dataB的数据放入发送FIFO中

SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;

//清除中断标志RXFFINT

}

…// 其它程序段

}

}

收、发语句之间命令处理程序的作用是根据协议约定将dataA数组中的信息进行处理,并将将要在屏幕上显示内容的有关信息放入dataB数组。

5.通信调试

触摸屏与F2812能否通信,可采用数据回送方法进行试验。F2812方面的设置和编程见第4节所述,并循环体中加入语句,使数组dataB = 数组dataA。

另外,在EB8000触摸屏编程软件中,在系统参数→设备列表中新增一个的设备,这个“PLC”(选中)的名称为“MODBUS RTU Device”,所在位置选为“本机”,类型设置选为“Free Protocol”,接口类型为RS232[4],通信口设置为“COM1,19200,8,N,1”。设计图2所示触摸屏界面,界面上有4(可根据需要确定,但要不能大于N/2)个数值输入元件NE_0~NE_3和4个数值显示元件ND_0~ND_3。设置NE_0~NE_3对应界面变量LW0~LW3,ND_0~ND_3对应界面变量LW10~LW13。变量显示格式均为16位16进制数。配上以下触摸屏宏指令程序:

macro_command main()

short aaaa[6],bbbb[6], return_value

char command[12],response[13]

FILL(command[0], 0, 12) //将数组12个元素置“0”

FILL(response[0], 0, 13)

while 1

GetData(aaaa[0], "Local HMI", LW,0, 4)

//将界面上LW0起的4个数据(字)送入aaaa[0]为首的4个字变量

HIBYTE( aaaa[0],command[0])

LOBYTE( aaaa[0],command[1])

HIBYTE( aaaa[3],command[6])

LOBYTE( aaaa[3],command[7])

OUTPORT(command[0],"MODBUS RTU Device",12) INPORT(response[0],"MODBUS RTU Device",13, return_value)

if (return_value > 0)  then

read_data[0] = response[1]

read_data[0]=read_data[0]+(response[0] << 8)

read_data[3] = response[7]

read_data[3]=read_data[3]+(response[6] << 8)

SetData(read_data[0], "Local HMI", LW, 10, 4) //将aaaa[0]为首的4个字变量中数据送入界面上LW0起的4个字

end if

DELAY(1)

图2 触摸屏通信调试界面

系统试运行,如在输入数字框键入一16进制数,输出数字框也会显示相应的数值,说明通信畅通。之后,就可把F2812中的数组dataB与数组dataA的联系断开,将dataA的数据进一步处理;把F2812中要显示的数据送入dataB。另外触摸屏的界面和宏指令程序也要改变以满足实际系统需要。

6.结语

实践证明,加接串行通信转换接口,运用F2812串行通信接口的FIFO功能,结合MT6056i宏指令编程可有效解决F2812与MT6056i之间的通信问题。尽管此设计是针对F2812与MT6056i的,但也可供F28xx系列DSP与WEINVIEW其它系列触摸屏的配套使用提供参考。

参考文献

[1]冯惕,淮文军.基于F2812與触摸屏通信的双电机变频器设计[J].计算机测量与控制,2013,21(5):1310-1313.

[2]刘和平,邓力,江渝等.数字信号处理器原理、结构及应用基础[M].北京:机械工业出版社,2007.

[3]苏奎峰,吕强,耿庆锋等.TMS320X281xDSP 原理及C程序开发[M].北京:北京航空航天大学出版社,2008.

[4]EB8000触摸屏操作手册[Z].

作者简介:冯惕(1958—),男,江苏苏州人,硕士,副教授,高级工程师,现供职于苏州职业大学电子信息工程学院,研究方向:满意优化控制,电机的变频控制,数据通信等。

猜你喜欢
通信触摸屏
PLC和触摸屏在卫生间控制系统的应用
浅析投射式多点触控电容触摸屏
皮肤“长”出触摸屏
基于“一级调度、两级运维”的通信管理体系研究①
简述计算机通信网络安全与防护策略
Android环境下主UI线程与子线程通信机制研究
无线自组网在野战防空通信系统中的应用
对数字微波通信技术的研究
投射式多点触控电容触摸屏
触摸屏项目移植在自动化系统升级中的应用