FPGA與GPS-OEM板的串行通訊系統設計
2.1 系統通信原理
由于FPGA接口采用TTL電平,而OEM板的串行通信采用RS-232標準電平,故需電平轉換,電平轉換接口可以通過(guò)MAX202芯片來(lái)實(shí)現。GPS25有兩個(gè)串行口,其端口1可用來(lái)輸入差分修正信息和輸出衛星的原始測量信息,而端口2則用來(lái)輸入設定語(yǔ)句和輸出定位語(yǔ)句,因此,只需將FPGA接口與GPS25串行口2對應連接即可.其接口電路如圖l所示。FPGA的全局時(shí)鐘Global_clk由24 MHz的晶振產(chǎn)生。
2.2 OEM板的個(gè)性配置
當FPGA模塊完成開(kāi)機上電后.其中的異步串行發(fā)送電路將發(fā)送用戶(hù)制定的配置語(yǔ)句,以對OEM板進(jìn)行個(gè)性化的設置。
由于GPS25的默認波特率是4800 bit/s。故應將FPGA中異步串行發(fā)送電路的波特率時(shí)鐘也設置為此值,具體可通過(guò)對系統的全局時(shí)鐘進(jìn)行分頻來(lái)實(shí)現,發(fā)送完結束標志符后,FPGA中的定位信息接收讀取電路即可開(kāi)始工作,并等待數據的接收。本例用$GPRMC語(yǔ)句接收OEM板的定位信息,如果應用系統有特殊要求,還需要進(jìn)行初始化、配置以及對輸出語(yǔ)句進(jìn)行選擇。應該注意的是,NMEA-0183格式中的校驗和無(wú)需發(fā)送。
初始化可用$GRMI語(yǔ)句來(lái)實(shí)現,其結果是:
其中,1>~4>項用以設置地理位置,它們的格式與$GPGGA語(yǔ)句的對應項相同,第5>項為UTC日期,格式為日日月月年年,第6>項為UTC時(shí)間,格式與$GPGGA語(yǔ)句相同,第7>項中,A=自動(dòng)定位,R=設備復位。
OEM板的配置可利用$PGRMC語(yǔ)句來(lái)完成。該語(yǔ)句共有14個(gè)有效項,其中第10>項選擇波特率,1~7分別代表標準波特率300~19200,配置時(shí),可以用空項表明保持原配置項不變。例如,配置為9600波特、輸出秒脈沖時(shí),其則語(yǔ)句為:
GPS25的輸出語(yǔ)句共有10多條,默認的輸出語(yǔ)句為$GPGGA等5條。用戶(hù)對輸出信息的設定可以通過(guò)$PGRMO語(yǔ)句實(shí)現。其結構是:
其中,1>為合法語(yǔ)句名,如GPRMC;2>為語(yǔ)句狀態(tài),1表示禁止該語(yǔ)句輸出,2表示允許該語(yǔ)句輸出,3表示禁止所有語(yǔ)句輸出,4表示允許所有語(yǔ)句輸出。
例如,下列輸入語(yǔ)句只允許OEM板輸出$GPRMC語(yǔ)句:
$PGRMO,3CR>LF>;禁止所有語(yǔ)句輸出。
$PGRMO,GPRMC,2CR>LF>;允許$GPRMC語(yǔ)輸出。
3 定位信息的接收與讀取
3.1 接收模塊的設計
本設計中的接收模塊主要負責接收由OEM板串口2輸出的導航定位信號。該模塊包括對TXD端的起始位檢測電路,采樣電路,波特率發(fā)生器和異步FIFO緩存設計等。本例中的波特率發(fā)生器實(shí)際上是一個(gè)時(shí)鐘分頻器,所產(chǎn)生的分頻時(shí)鐘是波特率時(shí)鐘的16倍,目的是為了在接收時(shí)進(jìn)行精確的采樣,以提出異步串行數據,同時(shí),也可為異步FIFO提供寫(xiě)時(shí)鐘。
接收之前應對從OEM板直接輸出的RXD信號進(jìn)行同步處理,以濾除輸出中的干擾,降低異步時(shí)域數據傳輸中亞穩態(tài)產(chǎn)生的概率,提高系統的穩定性和可靠性。本設計采用兩級D觸發(fā)器來(lái)實(shí)現信號同步。根據異步傳輸的通訊協(xié)議,當電路檢測到OEM板同步后的輸出端syn_TXD發(fā)生負跳變時(shí)。整個(gè)接收采樣電路開(kāi)始工作。為了避免干擾和得到正確的起始位,在波特率時(shí)鐘檢測過(guò)程中,至少必須有一半屬于邏輯0,即8個(gè)時(shí)鐘周期后,才可認定收到是可靠的起始位。當接收到正確的起始位后.接著(zhù)的數據位將每隔16個(gè)采樣周期被采樣一次。即取每一位的第8次的波特率時(shí)鐘采樣值來(lái)確保采樣正確。圖2所示是本系統的串口接收狀態(tài)圖。連續采樣8次后,即一個(gè)字節數據接收完成之后,便可設置位結束標志。每采樣一個(gè)字節數據,都先放入FIFO中緩存。由于GPRMC格式數據所傳輸的最大字節數是72Byte,故當接收完一組數據之后,都要對FIFO的滿(mǎn)信號置位,并由外部的全局時(shí)鐘控制將里面緩存的數據讀出,以供后續部分處理。讀完之后,即可接收到后續模塊的結束標志,然后復位讀使能,以等待下一組數據的到來(lái)。其仿真結果如圖3所示。
評論