摘 要:針對靶場光電測量設備子系統(tǒng)互聯(lián)比較復雜、容易產(chǎn)生時序沖突的缺點,設計了基于FPGA的數(shù)據(jù)交換中心。實踐表明,該系統(tǒng)工作穩(wěn)定、可靠,解決了多系統(tǒng)之間通信的時序沖突問題,滿足了實際工程需求。
關鍵詞: FPGA;串行數(shù)據(jù);MSP430;交換
光電經(jīng)緯儀是一種精密的測角儀器,在靶場中主要用來確定飛行目標的空中位置、運動軌跡并記錄其飛行姿態(tài)。光電測量設備一般由多個子系統(tǒng)組成,各部分各司其職,使經(jīng)緯儀完成對目標的高精度測量。而一般各個子系統(tǒng)之間通過信息交換中心進行串行通信。因此,對數(shù)據(jù)交換中心的設計要求就是要協(xié)調(diào)各個子系統(tǒng),不發(fā)生時序沖突,并且數(shù)據(jù)的發(fā)送不能抖動太大,以便于其他系統(tǒng)接收數(shù)據(jù),使整個系統(tǒng)穩(wěn)定可靠地工作。
1 系統(tǒng)設計
數(shù)據(jù)交換中心主要作用是轉(zhuǎn)發(fā)、中繼、重組、處理、顯示各個系統(tǒng)的數(shù)字信號的電子系統(tǒng)。主要以時統(tǒng)終端發(fā)送的100 Hz為同步基準,接收各個系統(tǒng)的RS-422格式的數(shù)字信號,并根據(jù)協(xié)議發(fā)送各個系統(tǒng)RS-422格式的數(shù)字信號。一般是通過專用的芯片完成RS-422與TTL電平信號的轉(zhuǎn)化,數(shù)據(jù)中心接收和發(fā)送TTL格式的數(shù)據(jù),通過MSP430完成數(shù)據(jù)交換,同時根據(jù)設計需要還要實現(xiàn)各個子系統(tǒng)的工作狀態(tài),即用LED燈作各子系統(tǒng)的工作狀態(tài)指示。同時,還要求通過RS-232串口與LCD顯示屏相連,實現(xiàn)子系統(tǒng)通信內(nèi)容的顯示。設計的數(shù)據(jù)交換中心的原理圖如圖1所示。
系統(tǒng)中的FPGA滿足基本的工業(yè)級要求,采用Altera公司的EP1C12Q240I7,封裝為240-PIN PQFP,溫度范圍-40 ℃~+80 ℃,主要特性如表1所示。
光電跟蹤設備一般有多達10個以上的子系統(tǒng),存在2個以上的子系統(tǒng)同時向數(shù)據(jù)交換中心發(fā)送數(shù)據(jù)的情況,因此交換中心需采用2種辦法避免這種沖突:(1)把系統(tǒng)分為3組,作并行接收,避免了這3組子系統(tǒng)之間的沖突;(2)在同一組內(nèi)作中斷優(yōu)先級判斷,順序接收,避免同組內(nèi)子系統(tǒng)之間的沖突。
MCU采用TI公司生產(chǎn)的MSP430F249,它是超低功耗的16位的單片機系列中的一種,采用RISC精簡指令集,外接16MHz時鐘,指令周期為62.5 ns,片內(nèi)含有硬件乘法器,節(jié)省了運算時間。它內(nèi)含一個8通道的12位高性能A/D轉(zhuǎn)換器,最高采樣速度可達200 kHz。帶有7個捕獲/比較積存器的16位 Time_B和帶有3個捕獲/比較寄存器的16位 Timer_A,該芯片具有60 KB的Flash ROM,2 KB RAM,采用串行在線編程方法,同時還擁有強大的中斷處理功能[1]。
UART采用EXAR公司生產(chǎn)的ST16C654,完成串—并/并—串轉(zhuǎn)換。貼片式封裝FPQ64,64 B的緩沖FIFO,支持高達1.5 Mb/s的4個通道的串行數(shù)據(jù)的雙向傳輸,支持查詢,中斷工作方式。在本設計中,設置使其工作在中斷方式下,數(shù)據(jù)格式為1個起始位,8個數(shù)據(jù)位,1個停止位。
2 多通道串行數(shù)據(jù)的接收
與數(shù)據(jù)交換中心相連的子系統(tǒng)一共有11個,定義為通道Com1~Com11,分別連在了4個ST16C654上。每個ST16C654有4通道,每個通道都具有發(fā)送和接收的功能,連接4個Com端口,工作在中斷模式下,通過上電初始化將其內(nèi)部的FIFO深度設置為56 B, ST16C654等到接收56 B或56 B的時間(在接收字節(jié)數(shù)少于56的情況下)產(chǎn)生中斷請求信號。根據(jù)通信協(xié)議,各個系統(tǒng)發(fā)送給通信系統(tǒng)的字節(jié)均小于56 B。因此,一次中斷完全能夠?qū)⒏鱾€系統(tǒng)的數(shù)據(jù)收完。
FPGA根據(jù)收到的一個或者多個中斷信號,首先判斷中斷源,中斷優(yōu)先級判斷如下列代碼所示,clk為系統(tǒng)時鐘,inital_over為寄存器初始化標志。inta、intb、intc、intd分別表示ST16C654接收4個通道數(shù)據(jù)產(chǎn)生的中斷信號,csa_reg_reg為優(yōu)先級安排好后對應通道的選通信號(其他標志信號依次類推),如果該標志有效,就開始接收該通道的數(shù)據(jù),接收完該路信號,然后判斷該路信息的該幀數(shù)據(jù)的頭尾是否正確,在正確的情況下寫入相應的RAM地址空間,其RAM控制寫模塊的主要功能就是根據(jù)接收的數(shù)據(jù)個數(shù),產(chǎn)生相應的脈沖個數(shù),往RAM里寫數(shù)據(jù)的個數(shù)和地址空的控制,以便MCU根據(jù)相對應各個端口的發(fā)送時刻從相應的地址空間中讀出數(shù)據(jù),組成完成的一幀數(shù)據(jù)發(fā)送出去[2]。
中斷優(yōu)先級判斷部分verilog代碼如下:
always@(posedge clk)
begin
if(inital_over) //inital_over==1 表示正在初//始化系統(tǒng)
begin
rd_over<=1'b0; //數(shù)據(jù)讀完結(jié)束標志
csa_reg_reg<=1'b1;
csb_reg_reg<=1'b1;
csc_reg_reg<=1'b1;
csd_reg_reg<=1'b1;
end
else if(!int_UART) //捕獲到int_UART654中斷標
//志,為4個通道中斷標志的或
begin
if(!rd_over)
begin
rd_over<=1'b1;
csa_reg_reg<=!inta; // 通道A的優(yōu)先級別最高
csb_reg_reg<=!intb|inta; //級別從到到低依次為//A,B,C,D
csc_reg_reg<=!intc|inta|intb; //改變表達式可以
//改便優(yōu)先級別
csd_reg_reg<=!intd|inta|intb|intc;
end
end
在產(chǎn)生選通信號的同時,還要產(chǎn)生UART的FIFO的讀脈沖和RAM的寫地址,從而把相應通道的數(shù)據(jù)讀出[3],如圖2所示,當同時出現(xiàn)4個中斷時,先選通csa_reg,同時產(chǎn)生FIFO的讀信號IOR(56+1個脈沖信號,UART芯片的FIFO 容量設置為56個,保證其讀空,同時程序在IOR的基礎上產(chǎn)生56個字數(shù)據(jù)的寫地址。便于對相應的RAM地址空間進行寫操作)。
3 多通道串行數(shù)據(jù)的發(fā)送
數(shù)據(jù)的發(fā)送主要在MCU內(nèi)完成,為了保證各個系統(tǒng)可靠地進行數(shù)據(jù)傳輸,需要事先安排好發(fā)送時序,即以100 Hz的同步信號為基準,安排好各個子系統(tǒng)發(fā)送數(shù)據(jù)的時間段。即在10 ms之內(nèi)根據(jù)各個通道發(fā)送數(shù)據(jù)的多少,定義發(fā)送時刻(以100 Hz同步信號開始,到通信系統(tǒng)開始給某個系統(tǒng)發(fā)送數(shù)據(jù)為止,定時器所計的時間)[4]。如圖3為COM1的接收、發(fā)送時序。
MSP430F249的定時器工作在連續(xù)計數(shù)模式下,其工作原理是首先設置中斷的計數(shù)值,由于2個計數(shù)器都為16進制,計數(shù)范圍0x0000~0xFFFF,根據(jù)其工作原理,當計數(shù)器啟動后開始計數(shù),達到預先設置的計數(shù)值后產(chǎn)生中斷,計數(shù)器的工作頻率可以選擇,系統(tǒng)中采用的技術頻率是ACLK的4分頻,即4 MHz。按工作原理,最高能夠產(chǎn)生10個中斷,為了產(chǎn)生11個中斷,在第6個中斷的基礎上,把計數(shù)器的值加上特定值變?yōu)榱硗庖粋€中斷的計數(shù)值,計數(shù)器重新開始計數(shù)后,在原有的基礎上開始計數(shù),產(chǎn)生第7個中斷,從而形成11個中斷信號,啟動11個端口的發(fā)送,主程序根據(jù)協(xié)議從相應的地址空間讀取數(shù)據(jù),打包組成符合系統(tǒng)要求的信息發(fā)送出去[5]。
MCU除了根據(jù)發(fā)送時刻,利用定時器計數(shù)產(chǎn)生11個中斷信號外,還要完成系統(tǒng)上電的初始化,ST16C654的初始化,LCD的顯示屏的初始化,以及在主程序內(nèi)利用系統(tǒng)空閑時間從FPGA的RAM中讀取數(shù)據(jù),把各個子系統(tǒng)發(fā)送、接收的數(shù)據(jù)顯示出來。 響應按鍵信息,最終不斷地刷屏、顯示信息。程序流程圖如圖4所示。
數(shù)據(jù)交換中心的LCD顯示采用北京藍海微芯科技發(fā)展有限公司生產(chǎn)的LJD-ZN-3200K智能顯示終端,5.7 英寸的顯示尺寸,分辨率為320×240,單色顯示,單電源5 V DC供電,接口類型RS232,通信格式:數(shù)據(jù)包頭(F0 5A) + 命令類型+命令字+ 數(shù)據(jù)包尾(5A F0),命令類型用不同的字節(jié)表示不同的命令,使用前應首先通過PC串口把要顯示的漢字字庫下載到顯示終端[6],然后連接到數(shù)據(jù)交換中心的RS-232接口上,通過MSP430F249完成對其顯示格式、背光控制、波特率的設置。最后在MCU的主程序中完成對各個通道接收、發(fā)送數(shù)據(jù)的顯示[7]。
利用MSP430設計了基于FPGA的數(shù)據(jù)交換中心系統(tǒng),合理地安排了各個系統(tǒng)數(shù)據(jù)的接收中斷時序。采用定時器產(chǎn)生各個系統(tǒng)的發(fā)送時序,避免了多個系統(tǒng)之間交換數(shù)據(jù)時產(chǎn)生的系統(tǒng)沖突,并且采用LCD顯示屏實時顯示了各子系統(tǒng)的傳輸信息,替代了以往基于PC104的設計,降低了系統(tǒng)成本,滿足了實際需求。
參考文獻
[1] 沈建華,楊艷琴,翟驍曙.MSP430系列16位超低功耗單片機原理與應用[M].北京:清華大學出版社,2004:82-103.
[2] 段吉海, 黃偉智. 基于CPLD/FPGA的數(shù)字通信系統(tǒng)建模與設計[M]. 北京: 電子工業(yè)出版社,2004:78-96.
[3] 王強,文豐,任勇峰.基于FPGA的高速實時數(shù)據(jù)存儲系統(tǒng)[J]. 儀表技術與傳感器,2009(1):50-52.
[4] 秦龍.MSP430彈片機C語言應用程序設計實例精講[M].北京:電子工業(yè)出版社, 2006:135-141.
[5] 王少卿,汪仁煌.低功耗MSP430單片機在3V與5V混合系統(tǒng)中的邏輯接口技術.電子技術應用,2003,29(3):324-327.
[6] 北京藍海微芯科技發(fā)展有限公司.智能終端使用手冊LJD -ZN-3200K.2007.
[7] http://focus.ti.com/lit/ds/symlink/msp430f249.pdf.2008.