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