【摘要】為了將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—),男,江蘇蘇州人,碩士,副教授,高級工程師,現供職于蘇州職業大學電子信息工程學院,研究方向:滿意優化控制,電機的變頻控制,數據通信等。