天天看點

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

緒   論

全球衛星定位系統簡稱GPS系統,是美國國防部曆時二十年,耗資200多億美元建立起來的可以全天候高精度的定位系統,通過定位衛星網絡向全球各地全天候地提供三維位置、三維速度等資訊的一種無線電導航定位系統。接收機通過對接收到的每顆衛星的定位資訊的解算,便可确定該接收機的位置,進而提供高精度的三維(經度、緯度、高度)定位導航及授時系統。由于剛開始GPS隻限于軍事用途,民用受到人為精度的限制(SA)。直到2000年5月1日起美國政府取消SA限制後,大大地促進了民用普遍化,現已逐漸演變為一種世界性高技術産業,成為目前世界上發展最快的三大資訊産業之一。

GPS使用者接收系統主要由以無線電傳感和計算機技術支撐的GPS衛星接收機和GPS資料處理軟體構成。GPS衛星接收機的基本結構是天線單元和接收單元兩部分。天線單元的主要作用是:當GPS衛星從地平線上升起時,能捕獲、跟蹤衛星,接收放大GPS信号。接收單元的主要作用是:記錄GPS信号并對信号進行解調和濾波處理,還原出GPS衛星發送的導航電文,解求信号在站星間的傳播時間和載波相位差,實時地獲得導航定位資料或采用測後處理的方式,獲得定位、測速、定時等資料。微處理器是GPS接收機的核心,承擔整個系統的管理、控制和實時資料處理。目前,國際上已推出幾十種測量用GPS接收機,各廠商的産品朝着實用、輕便、易于操作、美觀價廉的方向發展。GPS資料處理軟體是GPS使用者系統的重要部分,其主要功能是對GPS接收機擷取的衛星測量記錄資料進行“粗加工”、“預處理”,并對處理結果進行平差計算、坐标轉換及分析綜合處理。解得測站的三維坐标,測體的坐标、運動速度、方向及精确時刻。GPS定位技術是正在發展中的高新技術,資料處理技術也處在不斷更新之中,各系列GPS接收機制造廠家研制的處理軟體也各具特色。GPS 接收機是被動式全天候系統,隻收不發信号,故不受衛星系統和地面控制系統的控制。使用者數量也不受限制。GPS接收機的性能因機種不同而有差異。 接收機根據使用者不同的使用需要又可分為大地型GPS接收機和導航型GPS接收機兩類。

1 GPS系統基本原理

1.1 GPS系統介紹

GPS衛星定位系統由三部分構成,一是地面控制部分,由主要站、地面天線、濫測站及通訊輔助系統組成。二是空間部分,由24顆衛星組成,分布在6個軌道平面。三是使用者裝置部分,由GPS接收機和衛星天線組成。地面主要站實施對GPS衛星的軌道控制及參數修正。GPS衛星網向地面發射兩個頻率的定位導航資訊,其中包括兩個定位碼信号:即C/A碼(供世界範圍内的民用)及P碼( 隻供美國軍方使用)。GPS接收機接收GPS衛星信号進行解算,即可确定GPS接收機的位置。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試
GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

                               圖 1

1.2 NMEA-0183資料格式

1.2.1  GPRMC(建議使用最小GPS資料格式)

GPS定位的資料格式為NMEA-0183資料格式。NMEA-0183是美國國家海洋電子協會為海用電子裝置制定的标準格式。它是在過去海用電子裝置的标準格式0180和0182的基礎上,增加了GPS接收機輸出的内容而完成的。目前廣泛采用的是Ver 2.00版本。現在除少數GPS接收機外,幾乎所有的接收機均采用了這一格式。為了有效地開發GPS-OEM晶片,必須熟練掌握這一格式。是以,下面介紹兩種最常用的GN-77N輸出語句格式。

a.GPS固定資料輸出語句($GPGGA)這是一幀GPS定位的主要資料,也是使用最廣的資料。

b. GPS推薦定位資訊輸出語句($GPRMC)。本實驗是對此信号進行提取定位資訊的,故對其格式列出如下:

Recommended Minimum Specific GPS/TRANSIT Data(RMC)推薦定位資訊。

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>

<1>  UTC 時間,hhmmss(時分秒)格式

<2>  定位狀态,A=有效定位,V=無效定位

<3>  緯度ddmm.mmmm(度分)格式(前面的0 也将被傳輸)

<4>  緯度半球N(北半球)或S(南半球)

<5>  經度dddmm.mmmm(度分)格式(前面的0 也将被傳輸)

<6>  經度半球E(東經)或W(西經)

<7>  地面速率(000.0-999.9 節,前面的0 也将被傳輸)

<8>  地面航向(000.0-359.9 度,以真北為參考基準,前面的0 也将被傳輸)

<9>  UTC 日期,ddmmyy(日月年)格式

<10> 磁偏角(000.0-180.0 度,前面的0 也将被傳輸)

<11> 磁偏角方向,E(東)或W(西)

<12> 模式訓示(僅NMEA0183 3.00 版本輸出,A=自主定位,D=差分,E=估算,N=資料無效)

1.2.2  GPGGA

$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>

<1>  UTC 時間,hhmmss(時分秒)格式

<2>  緯度ddmm.mmmm(度分)格式(前面的0 也将被傳輸)

<3>  緯度半球N(北半球)或S(南半球)

<4>  經度dddmm.mmmm(度分)格式(前面的0 也将被傳輸)

<5>  經度半球E(東經)或W(西經)

<6>  GPS 狀态:0=未定位,1=非差分定位,2=差分定位,6=正在估算

<7>  正在使用解算位置的衛星數量(00-12)(前面的0 也将被傳輸)

<8>  HDOP水準精度因子(0.5-99.9)

<9>  海拔高度(-9999.9-99999.9)

<10> 地球橢球面相對大地水準面的高度

<11> 差分時間(從最近一次接收到差分信号開始的秒數,如果不是差分定位将為空)

<12> 差分站ID 号0000-1023(前面的0 也将被傳輸,如果不是差分定位将為空)

2系統總體設計

2.1 DSP介紹

數字信号處理(Digital Signal Processing, DSP), 就是對信号的數字處理。它是利用數字計算機或專用數字硬體,對數字信号進行的一切變換或按預定規則進行的一切加工處理的運算就稱為數字信号處理。DSP狹義了解為Digital Signal Processor數字信号處理器,廣義了解可為數字信号處理技術。

2.2異步通信接口晶片TL16CTL16C550C

UART隻是一個串行的異步接口它負責對要發送的資料進行格式化和對收到的資料進行譯碼。它對資料是打包發送和接收的,每一包資料前有一個起始位,末有一個或多個停止位。資料包裡的資料是從低位到高位逐位進行發送的。為了對資料進行校驗,有時還可以在資料裡加上校驗位。在沒有資料發送或接收時,該資料線總是處于高電平。它有如下的一些特點:

(1)資料的長度可變,可以是 5位,6位,7位或 8位;

(2)波特率可變,位傳輸的速率可以通過程式設計來實作,在UART中有一個寄存器可以對主頻時鐘進行分頻來産生相應的波特率;

(3)校驗位的産生和檢測,在發送一個字元的時候,UART在發送時在資料位的末尾上附加一個校驗位,當接收這個字元的時候,就可以利用這個校驗位來來檢查在接收過程中有沒有發生錯誤;

(4)可以設定中斷,通過軟體可以模拟當異步序列槽發送0的個數超過資料包的長度的時候(表明發送異常),可通過設定中斷處理事件。

串行通信的流程圖如圖2所示。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

圖 2

    下面對TMS32F240和PC機通信有關的寄存器做一些簡單介紹。

表1  TL16CTL16C550C的寄存器

寄存器 DLAB A2 A1 A0 位址 操作
接收緩沖器RBR 00H 隻讀
發送緩沖器THR 00H 隻寫
中斷使能寄存器IER 1 01H 讀/寫
中斷标志寄存器IIR X 1 02H 隻讀
FIFO控制寄存器FCR X 1 02H 隻讀
線路控制寄存器LCR X 1 1 03H 讀/寫
MODEM控制寄存器MCR X 1 04H 讀/寫
線路狀态寄存器LSR X 1 1 05H 讀/寫
MODEM狀态寄存器MSR X 1 1 06H 讀/寫
暫存寄存器SCR 1 07H 讀/寫
低位除數寄存器DLL 1 1 00H 讀/寫
高位除數寄存器DLM 1 1 01H 讀/寫

線路控制寄存器(LCR)用來存放串行通信的二進制資料格式,LCR是一個8位寄存器,各位的定義如下:

D1D0:字長選擇位,D1D0=00、01、10、11字長分别為5位、6位、7位、8位;

D2:停止位,D2=0停止位為1位,D2=1時,停止位數由D1D0決定,資料位為5、6、7、8位時,停止位分别為:1.5、2、2、2位;

D4D3:确定要不要奇偶校驗以及奇偶校驗的性質,D3=0不進行奇偶校驗D3=l進行奇偶校驗,D4=0進行奇校驗,D4=1進行偶校驗;

D5:奇偶校驗附加位;D5D4D3=111,傳送奇偶位後該位清零,D5D4D3=101,傳送奇偶位後該位置1,D5=0時附加位無效;

D6:中斷控制位,D6=1,強制SOUT引腳為空閑狀态;

D7:波特率因子寄存器通路位(DLAB),D7=l通路波特率因子寄存器,D7=0通路其他寄存器。

兩個8位波特率因子寄存器可構成一個16位波特率因子寄存器。TL16C55OC的内部波特率發生器可産生發送資料的時鐘信号。

波特率因子可以通過下面的式子計算:

波特率因子=基準時鐘頻率/(16x波特率)

可以任意選擇寫入波特率因子的高位元組和低位元組的順序,但寫入前必須置線路控制寄存器(LCR)的D7(DLAB)位為1。寫入波特率因子後應将線路控制寄存器的D7清零,以便通路其他寄存器。在外接晶振為3.6864MHZ時,幾種常用的波特率所對應的波特率因子寄存器的值如表2:

表2  波特率設定

波特率(bps) 高位除數寄存器DLM 低位除數寄存器DLL
1200 00H C0H
2400 00H 60H
4800 00H 30H
9600 00H 18H
19200 00H 0CH
38400 00H 06H

2.3 LCD顯示

    (1) 12864液晶顯示器硬體電路連接配接圖如圖3所示。硬體連接配接圖主要由8位雙向資料口,指令資料選擇端以及讀寫選擇端和使能端,還有2個左右半屏的片選腳,其中滑動變阻器是調節背光大小的,VCC和地之間接了個104的電容是是直流穩定輸入。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

                                                        圖 3

(2) 12864液晶顯示器的讀操作時序圖如圖4所示。

       當讀寫選擇腳為高電平時則為讀操作有效,并且使能腳也要為高電平,在這2個腳同時為高電平的時候資料口上的資料才有效的從12864讀出。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

                              圖 4 12864液晶讀操作時序

(3) 12864液晶顯示器的寫操作時序圖如圖5所示。

       讀寫選擇腳為低電平并且使能腳為高電平時資料才有效的寫入12864液晶的控制器中。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

                              圖5 12864液晶寫操作時序

(4) 12864液晶顯示器的内部結構圖如圖6所示。

       12864大液晶的結構主要是128列64行矩陣式點陣構成。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

                                                 圖 6 内部結構圖

2.4 系統設計分析

2.4.1系統設計過程

    資料采集系統主要由序列槽、液晶顯示器、鍵盤組成,分别完成接收GPS資料、顯示資訊、以及按鍵控制。是以必須掌握DSP的序列槽通信、液晶顯示原理、按鍵掃描原理。

    序列槽接收資料主要是在實驗8的基礎上進行改進将接收到的資料進行存儲,然後就是将接收下來的資料進行處理識别,先判斷幀頭部分再是各部分的參數資訊。分别将他們提取出來然後放到液晶上顯示。再這整個過程中按鍵就是控制接收哪部分資訊以及液晶翻頁功能。本系統中還加入中斷按鍵響應。即實作資料的動态顯示實時接收GPS的資料。

    TMS320VC5416與PC機通過TL16C550擴充RS232序列槽實作串行通訊,其原理圖如圖7所示。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

                                                    圖 7

2.4.2 系統設計原理圖

首先要實作資料的傳出過程,了解序列槽通信,因為平時實驗有這個實驗是以上手就比較快了。接收子產品主要由GPS接收機、資料處理軟體以及相應的使用者裝置所組成。其主要完成接收衛星信号,進而獲得導航或定位資訊,經資料處理,完成導航和定位工作。整個系統架構圖如下圖8所示。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試
GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

圖 8接收子產品整體結構圖

對本次課程設計來講,DSP子產品是最重要的部分,就是通過DSP子產品來對從序列槽接收到的定位資訊來進行處理,提取其中的參數,這些處理都是通過編寫程式然後下載下傳到DSP實驗箱來實作的。DSP系統的架構圖如下圖9所示。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試
GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

                  圖 9 DSP接收顯示系統框圖

因為DSP實驗箱上有鍵盤,可以通過對鍵盤的操作來實作資料的顯示,是以必須要設計鍵盤操作程式來定義鍵盤上某些鍵的功能,進而更友善的來控制資料的顯示。因為經過DSP子產品處理後的參數需要在實驗箱上的LCD上顯示,顯示時需要對顯示的内容在LCD屏上進行行和列的排列,設定不好的話可能會出現有些參數無法顯示的情況,是以LCD顯示子產品的設定是必須的。

3 系統硬體的具體設計方案

DSP系統的硬體設計又稱為目标闆設計,是在考慮算法需求、成本、體積和功耗核算的基礎上完成的。一個基本的DSP硬體系統應包括DSP的基本工作電路及各種外圍接口電路設計。由于本次課程設目計的題是基于DSP資料提取,是以隻涉及到DSP的序列槽接口電路以及12864液晶顯示電路。

3.1 電源、複位、時鐘電路

3.1.1 電源電路的設計

為了降低晶片的功耗,TMS320C54x系列晶片大部分都采用低電壓設計,并且采用雙電源供電,即核心電源CVDD和I/O電源DVDD。通常I/O都采用3.3V電壓供電,而核心為1.8V供電。

目前,生産電源的晶片比較多,如Maxim公司的MAX604、MAX748,TI公司的TPS71xx系列、TPS72xx系列和TPS73xx系列等。這些晶片可分為線性晶片和開關晶片兩種,在設計中要根據實際的需要來選擇。如果系統對功耗要求不高時,可使用線性穩壓晶片,其特點是使用方法簡單,電源紋波電壓較低,對系統的幹擾較小。若系統對功耗要求較苛刻時,應使用開關電源晶片。通常情況下開關電源晶片的效率較高,可以達到90%以上,但開關電源所産生的紋波電壓較高,且開關振蕩頻率在幾千赫茲到幾十萬赫茲以上,易對系統産生幹擾。

本次設計采用的電源晶片是TI公司提供的TPS73HD318兩路電源輸出晶片,其兩路輸出分别為3.3V和1.8V,每路電源的最大輸出電流為750mA。電路如圖10所示。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

圖10 電源電路設計

圖中C7、C8、C9、C10分别為各旁路上的退偶電容,用于濾除直流電源中的雜波信号,使電源更穩定。

3.1.2 複位電路設計

C54x的複位輸入引腳RS為處理器提供了硬體初始化的方法,它是一種不可屏蔽的外部中斷,可在任何時候對'C54x進行複位。當系統上電後RS應至少保持5個時鐘周期的低電平,以確定資料、位址和控制線的正确配置。複位後,CPU從程式存儲器的FF80H單元取址,并開始執行程式。

TMS320C54x的複位可以分為軟體複位和硬體複位兩種。軟體複位是通過指令方式實作晶片的複位,而硬體複位是通過硬體電路實作複位。此次設計所使用的複位電路如圖11所示。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

圖11 複位電路

在初始狀态,RS端為高電平,當按下複位按鈕S1并持續一段時間(100~200ms)後,電容C1通過按鍵進行放電,使電容上的電壓降為0,RS就可以持續一段時間的低電平,實作DSP晶片的手動複位。

3.2 異步通信接口電路設計

由于大多數型号的DSP晶片沒有異步接收發送裝置(UART)接口,如本次設計所用的TMS320VC5416,是以,我們采用了串并轉換晶片TL16C550C以實作DSP與PC及之間的序列槽通信。

TL16C550C是TI公司生産的成本效益很高的異步通信晶片,對從外圍器件接收的資料進行串行至并行的轉換,對從接收的資料進行并行至串行的轉換。在異步通信單元ACE(asynchronous communications element)工作的任何時候CPU均可讀和報告ACE的狀态.這些狀态資訊包括正在進行的傳輸工作類型、工作狀态以及遇到的任何錯誤條件。

TMA320C54x通過TL16C550C與PC機連接配接的電路圖如圖12所示。A0~A2為片内寄存器的位址選擇端口,對其寫入不同的電平可以實作對tl16c550c晶片的不同寄存器進行操作;D0~D8為雙向8位資料線,用于與DSP進行資料通信;CS0、CS1、CS2用于輸入片選信号,當CSO、CS1為高電平且CS2為低電平時,tl16C550被選中;R/W、RD1為讀寫控制信号輸入端,其中RD1的信号由R/W經過一非門後輸入;XIN、XOUT外接晶振,此處使用3.6864Mz的晶振,這樣可以設定精确的波特率;INT0 用于提供中斷服務;SIN、SOUT與MAX232進行通信;CTS、RTS分别為允許發送和請求發送控制端。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

                                          圖12 異步通信接口電路

TL16C550C的SOUT、CTS、SIN、RTS分别通過MAX232與序列槽的2、7、3、8引腳連接配接,在連接配接的過程中要注意區分MA X232的輸人、輸出引腳方向。

3.3 電平轉換電路設計

為了實作TMS320C54x與PC機之間的電平轉換,采用MAX232電平轉換晶片設計了該電平轉換電路,如圖13所示。

MAX232是一種雙組驅動器/接收器,片内含有一個電容性電壓發生器以便在單5V電源供電時提供EIA/TIA-232-E電平。每個接收器将EIA/TIA-232-E電平輸入轉換為5V TTL/CMOS電平。這些接收器具有1.3V的典型門限值及0.5V的典型遲滞,而且可以接收±30V的輸入。每個驅動器将TTL/CMOS輸入電平轉換為EIA/TIA-232-E電平。圖中H5為序列槽接口。

MAX232的特點:MAX232的工作溫度範圍為0℃至70℃,MAX232I的工作溫度範圍為-40℃至85℃;單5V電源工作;LinBiCMOSTM工藝技術;兩個驅動器及兩個接收器;±30V輸入電平;低電源電流:典型值是8mA;符合甚至優于ANSI标準EIA/TIA-232-E及ITU推薦标準V.28;可與Maxim公司的MAX232互換;ESD保護大于MIL-STD-883(方法3015)标準的2000V。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

圖13 電平轉換電路

4 系統程式設計

4.1 CCS簡介

CCS(Code Composer Studio)代碼調試器是一種合成開發環境。它是一種針對标準TMS320調試器接口的互動式方法。CCS目前有CCS1.1, CCS1.2 和CCS2.0等三個不同時期的版本,又有CC2000 ( 針對C2XX ),CCS5000 ( 針對C54XX )和CCS6000 (針對C6X )三個不同的型号。CCS提供了非常豐富的調試手段。從資料流角度上,使用者可以對記憶體單元和寄存器進行檢視和編輯,載入/輸出外部資料。一般的調試步驟為:調入建構好的可執行程式,先在感興趣的程式段設定斷點,然後執行程式停留在斷點處,檢視寄存器的值或記憶體單元的值,對中間資料進行線上分析。

載入可執行程式,指令“File/Load Program”載入編譯連結好的可執行程式。使用反彙編工具,在某些時候(例如調試C語言關鍵代碼),使用者可能需要深入到彙編指令一級。可以利用CCS的反彙編工具。使用者的執行程式(C程式或是彙程式設計式)載入到目标闆時,CCS自動打開一個反彙編視窗。除在反彙編視窗可以顯示反彙編代碼外,CCS允許使用者在調試視窗中混合實作C和彙編語句。可以選擇“View/Mixed Source/Asm”。程式的執行控制,在調試程式時,使用者會經常用到複位、執行、單步執行等指令,統稱為程式執行控制。

1、CCS提供的複位目标闆

(1)“Debug-Reset DSP”指令初始化所有的寄存器内容并暫停運作中的程式。

(2)“Debug-ReTLart”指令将PC恢複到目前載入程式的入口位址,此指令不執行目前程式。

(3)“Debug-GoMain”指令在主程式入口處設定一臨時斷點,然後開始執行。當程式被暫停或遇到一個斷點時,臨是時斷點被删除。此指令提供了一種快速方法來運作使用者應用程式。

2、CCS提供的程式執行控制

(1)“Debug-Run”指令,程式運作到遇見斷點為止。

(2)“Debug-Halt”指令,程式暫停執行。

(3)“Debug-Animate”指令,使用者可以反複運作執行程式,直到遇到斷點為止。

(4)“Debug-Run Free”指令,此指令禁止所有斷點,然後運作程式。在自由運作中對目标處理器的任何通路都将恢複斷點。

3、CCS提供的單步執行操作

(1)“Debug-TLep Into”,當調試語句不是最基本的彙編指令時,此操作将進入語句内部(子程式或軟體中斷)調試。

(2)“Debug-TLep Over”,此指令将函數或子程式當作一條語句執行,不進入其内部調試。

(3)“Debug-TLep Out”,此指令将從子程式中跳出。

(4)“Debug-Runto Cursor”,此指令使程式運作到光标所在的語句。

 4、斷點設定

斷點的作用在于暫停程式的運作,以便觀察/修改中間變量或寄存器數值。CCS提供了兩類斷點。設定斷點應當避免以下兩種情形:

(1)将斷點設定在屬于分支或調用的語句上。

(2)将斷點設定在塊重複操作的倒數第一或第二條語句上。

5、記憶體操作

在調試過程中,使用者可能需要不斷觀察和修改寄存器、記憶體單元、資料變量。下面,我們依次介紹如何修改記憶體塊,如何檢視和編輯記憶體單元、寄存器、資料變量。

1)記憶體塊操作

(1)拷貝資料塊,拷貝某段記憶體到一新位置。

(2)填充資料塊,用特定資料填充某段記憶體。

2)檢視、編輯記憶體

CCS允許顯示特定區域的記憶體單中繼資料。選擇“View-Memory”,在彈出的對話框中輸入記憶體變量名(或對應位址)、顯示方式即可顯示指定位址的記憶體單元,在記憶體顯示視窗中單擊右鍵,從關聯菜單中選擇“Properties”,設定記憶體顯示屬性。

6、CPU寄存器操作

(1)顯示寄存器。

(2)編輯寄存器。

觀察變量:在程式運作中,使用者可能需要不間斷地觀察某個變量的變化情況,CCS提供了觀察視窗(“Watch Window”),用于在調試過程中實時檢視修改變量值。

7、加入觀察變量

(1)選擇“View-Watch Window”指令,則觀察視窗出現在CCS的下部。CCS最多提供4個觀察視窗,每個觀察視窗使用者都可以定義若幹個觀察變量,有兩種方法可以定義觀察變量:一是将光标移到觀察視窗中按Insert鍵,彈出表達式加入對話框,在對話框中填入要觀察的變量符号即可;二是在源檔案視窗或反彙編視窗輕按兩下變量,則該變量反白顯示,右鍵單擊選擇“Add to Watch Window”則該變量直接進入目前觀察視窗中。

(2)表達式中的變量符号當作位址還是變量處理取決于目标檔案是否包含有符号調試資訊。若在編譯連結時有-g選項K(包含符号調試資訊),則變量符号當作真實變量值處理,否則作為位址。

8、删除某觀察變量

有兩種方法可以從觀察視窗中删去某變量:

(1)輕按兩下觀察視窗某變量,選中後變為彩色亮條顯示。按Delete鍵,則從清單中删除此變量。

(2)選中某變量,單擊右鍵,選擇“Remove Current Expression”。

9、觀察數組或結構變量

某些變量可能包含多個單元,如數組、結構或指針等C變量,這些變量加入到觀察視窗時,會有“+”,可以點選“+”展開觀察。

評估代碼性能:使用者完成一個算法設計和程式設計後,一般需要測試程式效率以便進一步優化代碼,CCS用“代碼性能評估”工具來幫助使用者評估代碼性能。其基本方法為:在适當的語句位置設定斷點(軟體斷點或性能斷點)。當程式執行通過斷點時,有關代碼執行的資訊被收集并統計。使用者通過統計資訊評估代碼性能,更詳細的内容請參考相關資料。

10、在CCS裡建立一個項目的步驟:

(1)建立新的工程檔案: 選擇菜單“ Project” 的 “New…” 項;在“Project Creation”對話框中,在“Project”硬體設項輸入“volume” ; 單擊“ Location ” 項末尾的浏覽按鈕, 改變目錄到“C:\5416EDULab\Lab1-UseCC”,單擊“OK”;單擊“完成”;這時建立的是一個空的工程檔案;展開主視窗左側工程管理視窗中“Projects”下建立“volume.pjt”,其中各項均為空。

(2)在工程檔案中添加程式檔案: 選擇菜單“Project” 的“Add Files to Project… ”項;在“Add Files to Project”對話框中選擇檔案目錄為“C:\5416EDULab\Lab1-UseCC”,改變檔案類型為“C Source Files(*.c;*.ccc)”,選擇顯示出來的檔案“volum.c”;重複上述各步驟,添加“volume.cmd” 檔案到“volum” 工程中;添加“C:\ti\C5400\cgtools\lib\rts.lib”。

(3)編譯連接配接工程: 選擇菜單“Project”的“Rebuild  All”項;注意編譯過程中CCS 主視窗下部的“Build”提示窗中顯示編譯資訊,最後将給出錯誤和警告的統計數。

4.2 系統程式設計流程圖

       (1) 圖14所示的為系統初始化的程式流程圖,主要是DSP的狀态等待寄存器以及狀态控制寄存器的初始化,還有系統中用到的DSP的硬體外部中斷1是以要對其初始化,用到了12864液晶是以要對GPIO初始化操作以及12864液晶的初始化操作,然後在12864液晶上顯示按鍵的控制資訊,最後關閉實驗箱上所有的LED即完成了系統的初始化過程。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

                                                       圖 14

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

圖15

       (2) 圖15主要是說明了按鍵控制GPS定位資料提取以及12864液晶顯示資料資訊的整個程式流程圖。

4.3系統程式設計

4.3.1 初始化程式子產品

DSP初始化:

1、首先要定義寄存器

    如,對軟體等待狀态寄存器(SWWSR)和軟體等待狀态控制寄存器(SWSR)進行宏定義如下:

#define SWWSR           *(volatile unsigned int *)(SWWSR_ADDR)

#define SWCR            *(volatile unsigned int *)(SWCR_ADDR)

2、對寄存器進行讀寫操作,io、ram和rom的等待周期進行設定。

1、對TL16C550C的寄存器進行宏定義,通過位址線定義TL16C550C的各個寄存器

2、對TL16C550C的寄存器進行初始化,整個程式時通過總線的形式進行操作的。

在對各個寄存器操作前,要先對線路狀态寄存器進行操作。

采用的是3.6864Mz的晶體振蕩器,得到速度為9600Baud、字長為8bit、無奇偶校驗位、1為停止位的資料流。

4.3.2 序列槽通信接收程式子產品

    系統主要是用到了序列槽通信的接收函數,

void Uart_Init(void)//序列槽初始化函數

{

    UART_LCR = 0x03; //字長為8 bit、無校驗位、1 位停止位

    UART_IER =  0;//關閉所有中斷允許位

    UART_LCR = 0x83;//設定DLAB=1時才可以設定DLL和DLM       

    UART_DLL = 0x18;  

    UART_DLM = 0x00;  

    UART_FCR = 0x00;

    UART_LCR = 0x03;

}

unsigned int Uart_rx(void)//接收程式

{

    volatile unsigned long ii = 0L;     

       while(!(UART_LSR & 0x01))//查詢通過判斷線路狀态寄存器的DR來判斷接收寄存器中是否有值

    {

       if(ii++>2000000)//查詢一段時間,在這段時間内接收函數一直傳回0xffff

       {  

           return(0xffff);

       }

    }//當接收到資料時則傳回接收緩存器中的數值

    return(UART_RBR);

}

4.3.3 按鍵掃描程式子產品

       i=Get_Key();//擷取目前鍵值存入變量i中

        waitloop( 0x040000L );//延時按鍵消抖

       j=Get_Key();//延時一段時間後再次取得鍵值

        if(i==j)//判斷後面取得的鍵值是否等于前面的鍵值

         { //前後2次的鍵值相等的話就進入if語句執行鍵值判斷

           key_val=j; //将鍵值存入變量key_val中

           while(Get_Key())//這個就是松手檢測了,就是直到檢測到鍵值為0X0000即Get_Key()函數傳回0時馬上退出while循環然後再次判斷鍵值

            {

              asm("\tnop"); //wait blank_key

            }   

            switch(key_val)//判斷鍵值進入不同的函數實作功能

   {

               default:

               break;

               case 1:

                  //init_lcd();

                  LCD_clear(0);

                  while(flag)

                  {

                     uart_rece_gprmc_0();

                  };

                  break;

在這隻是講了其中的一個case語句,其他的都是一樣的就不細說了。

下面圖即是上述程式的流程圖。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

                                             圖16

4.3.4 中斷程式子產品

       首先設定中斷标志寄存器(Interrupt Flag Register)和中斷屏蔽寄存器(Interrupt Mask Register,IMR),程式如下:

       IFR =0xffff;

      IMR =0x0002; //TINT=IMR.3       EXINT1=IMR.1

在這裡隻使能外部中斷1有效,對應的在Lsvects.s54裡設定中斷入口位址以及跳轉函數

int1:      B       _EXINT1_isr

        NOP

        NOP

        NOP

       上述過程主要是設定中斷入口位址,下面主要是main函數裡面的中斷服務子函數

interrupt void EXINT1_isr()//中斷服務子程式

{

       flag=0;//當中斷産生時則立馬将标志flag清零進而退出資料接收循環

       cur_row=5;       

       cur_col=15;      

       LCD_clear(0);//清液晶顯示屏

     display();//顯示主菜單

}

       在程式中,主要是利用中斷來改變标志位flag,進而有效的控制接收資料函數從大循環中退出來。使液晶顯示資料可以動态顯示。

4.3.5資料提取與LCD顯示子產品

(1) 資料提取關鍵代碼分析:

先講下序列槽接收函數

       while(!(UART_LSR & 0x01))//這個就是判斷LSR的第0位當接收到資料時該位則置高,否則一直是0那麼一直執行return(0xffff),

       {

              if(ii++>2000000)

              {  

                     return(0xffff);

              }

       }

//當接收到資料時則不執行while循環立馬傳回接收到的資料

       return(UART_RBR);

       Uart_Init(); //序列槽初始化

       for(ii=0;ii<shuzunum;ii++)//先将上次存儲的資料全部清空

    {   

          data[ii] =0;

    }

       while(1)

       {

              do

              {

                     jj = Uart_rx();//變量jj存下序列槽接收過來的資料

              }while(jj==0xFFFF);//在程式中使用的是查詢法,就是一直查詢序列槽是否接收到資料,如果接收到資料則跳出do..while();語句。否則一直等待

           if(locate<shuzunum)//這部分主要實作的是将接收下來的資料一幀一幀的存入data[]數組中以便後面識别顯示

              {

                     data[locate] =jj;

                     locate++;

              }

              Else//當data數組存滿以後則進行識别操作,也就是識别各個字母對應的ASCII值進而提取出我們需要的參數

              {    

                     ii=0;

                     while(ii<shuzunum)

               {

                   if(data[ii]==36)//首先識别幀頭$

                   { 

                       if((ii+1)<shuzunum&&data[ii+1]==71)//G

                         if((ii+2)<shuzunum&&data[ii+2]==80)//P

                           if((ii+3)<shuzunum&&data[ii+3]==82)//R

                             if((ii+4)<shuzunum&&data[ii+4]==77)//M

                               if((ii+5)<shuzunum&&data[ii+5]==67)//C

                                  break;//直到全部條件滿足的情況下退出while循環

                   }

                   ii++;//當有一個不滿足時則立馬在數組的位置中繼續查找

               }

               ii+=6;//當識别到$GPRMC時則将數組指向的位置往前挪6位即跳過$GPRMC進而繼續判斷後面的内容

               for(;ii<shuzunum;ii++)

               { 

                  if(data[ii]==36)//如果在$GPRMC後面緊跟着的内容是$的話則立馬退出for循環繼續等待$GPRMC的出現

                               break;

                  if(ji_dou==1)//如果逗号的個數為1的話則該段資料為時間資訊,則将它一一存入定義的time數組中直到下個逗号出現時存儲停止

                  {

                               time[data_num]=data[ii];

                               data_num++;

                  }

                  else if(ji_dou==2)//逗号個數為2後面則為定位狀态資訊

                  {

                               locate_state[data_num]=data[ii];

                               data_num++;

                  }

                        else if(ji_dou==3)//逗号個數為3時則為緯度資訊

                        {

                                weidu[data_num]=data[ii];

                                   data_num++;

                        }

                  else if(ji_dou==4)//逗号為4時則為緯度的方向資訊,是北緯還是南緯

                  {

                               N[data_num]=data[ii];

                               data_num++;

                  }

                  else if(ji_dou==5)//逗号為5時則是經度資訊

                  {

                               jingdu[data_num]=data[ii];

                               data_num++;

                  }

                  else if(ji_dou==6)//逗号為6則是東經還是西經資訊

                  {

                               E[data_num]=data[ii];

                               data_num++;

                  }

                  else if(ji_dou==7)//逗号個數為7時則為速度資訊

                  {

                               speed[data_num]=data[ii];

                               data_num++;

                  }

                  if(data[ii]==44)//這個則是遇到’,’的時候則将計算逗号個數的變量ji_dou加1進而有效的提取出兩個’,’之間的資訊

                  {

                               ji_dou++;

                               data_num=0;//當遇到下一個’,’時則将數組計數變量清零

                  }

               }

(2)  LCD顯示子產品關鍵代碼分析:

                     cur_col=50;//12864液晶顯示的列值

                     cur_row=0;//12864液晶的行值

                     LCD_pr_chars("GPRMC",5);//調用顯示字元串函數顯示

                     cur_col=0;//12864液晶行列值

                     cur_row=1;

                     LCD_pr_chars("***********************",23);

                     cur_col = 1;

               cur_row = 2; 

               LCD_pr_chars("Locate_State:",13);//顯示定位狀态

            for(ii=0;ii<4;ii++)

            {

                if(locate_state[ii]==65)

                   LCD_pr_chars("Locate:",6);//當收到’A’時則顯示定位

                else if(locate_state[ii]==86)  //如果收到的是’V’

                   LCD_pr_chars("Unlocate:",8);//則顯示不定位狀态

            }

            cur_col = 1;//12864液晶行列值

            cur_row =3;

            LCD_pr_chars("Time:",5);//顯示時間

            LCD_nextchar(chartable[time[0]-48]);

            LCD_nextchar(chartable[time[1]-48]);

            LCD_nextchar(':');

            LCD_nextchar(chartable[time[2]-48]);

            LCD_nextchar(chartable[time[3]-48]);

            LCD_nextchar(':');

            LCD_nextchar(chartable[time[4]-48]);

            LCD_nextchar(chartable[time[5]-48]);

            cur_col = 1;

            cur_row = 4;

            LCD_pr_chars("Latitude:",9);//顯示緯度

            for(ii=0;ii<9;ii++)

            {

                if(weidu[ii]==46)//當遇到’.’的ASCII值時則顯示’.’

                                   LCD_nextchar('.');//

                else  

                                   LCD_nextchar(chartable[weidu[ii]-48]);否則正常顯示

            }

            if(N[0]==78)//如果收到的為’N’則顯示N

                            LCD_nextchar('N');//北緯

            else //否則則顯示S

                            LCD_nextchar('S');//南緯

            cur_col = 1;

            cur_row = 5;

            LCD_pr_chars("Longitude:",10);

             for(ii=0;ii<9;ii++)

            {

                if(jingdu[ii]==46)LCD_nextchar('.');

                else   LCD_nextchar(chartable[jingdu[ii]-48]);

            }

            if(E[0]==69)

                            LCD_nextchar('E');//東經

            else

                            LCD_nextchar('W');//西經

            cur_col = 1;

            cur_row = 6;

            LCD_pr_chars("Speed:",6);//速度

            for(ii=0;ii<5;ii++)

            {

                if(speed[ii]==46)

                                   LCD_nextchar('.');

                else  

                                   LCD_nextchar(chartable[speed[ii]-48]);

            }

                     cur_row=7;           

                     cur_col=0;

                     LCD_pr_chars("Press <INT> to Exit",19);//當按下急救車的按鍵的時候則立馬退出顯示資料的循環顯示主菜單

5 系統調試

5.1序列槽調試器介紹

序列槽調試器是一種人機互動的軟體,從串行口擷取序列槽通信資料,支援常用的300-115200bps波特率,能設定校驗、資料位和停止位,能以ASCII碼或十六進制接收或發送任何資料或字元(包括中文),可以任意設定自動發送周期,并能将接收資料儲存成文本檔案,能發送任意大小的文本檔案。本次系統調試我使用的是“序列槽調試助手V2.1.exe”。打開後界面如圖17示:

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

                                                      圖 17

5.2 系統調試過程

1. 用RS232序列槽線将DSP實驗箱與PC機連接配接好,将硬體仿真器TH-TDS520-USB2的USB口接入PC機,Jtag口接DSP實驗箱,DSP實驗箱上電。

2. 輕按兩下運作Setup CCS2.0,配置好CPU後儲存關閉,接着會打開CCS2.0界面,同時硬體仿真器訓示燈亮。

3. 打開序列槽通信的project,編譯連結,把.out檔案加載完後運作程式;

4. 打開序列槽調試助手,選擇序列槽端口号,設定好波特率(根據DSP實驗箱所選的晶振設定為9600)及資料位、校驗位位數,并且打開序列槽,在序列槽調試小助手的發送區寫入要發送的資料,然後選擇自動發送(可以設定自動發送的發送周期,一般選擇1000ms左右),在CCS的資料空間觀察在序列槽調試助手上發送的資料。同時在接收區的視窗觀察DSP發送過來的資料(資料是由DSP程式所決定的,具體發送的内容可以根據通信程式進行修改)。

5.3 調試結果與分析

結果分析:

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

圖18主界面

       上圖18即為系統顯示的主界面,主要是顯示按鍵控制顯示相應資訊。

K1:提取GPGGA的海拔高度,時間,緯度,經度。K2:提取GPGGA定位狀态,衛星數目,HDOP水準精度因子(0.5 - 99.9)。K3提取GPRMC的時間,定位狀态,經度,速度,緯度。K4提取GPRMC的方位角,年月日,磁偏角和磁偏角的方向。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

圖 19 GPGGA資料1

       圖19提取顯示GPGGA的海拔高度為58.0,時間為06:18:21,緯度為北緯28.3546度,經度為東經115.51884度,最後一行顯示的是按下中斷按鍵則退出提取界面傳回主界面。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

圖20 GPGGA資料2

       圖 20 提取顯示GPGGA的定位狀态資訊為未定位,衛星數目為10個,HDOP水準精度因子為0.8,最後一行提示按下中斷鍵則退出資料提取界面傳回主界面。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

圖21 GPRMC資料1

       圖 21 提取顯示GPRMC的定位狀态資訊為已定位,時間為06:18:20,緯度為北緯28.443546度,經度為東經115.51884度,速度為000.0節,最後一行提示按下中斷按鍵則退出資料提取界面傳回主界面。

GPS解析程式緒   論1 GPS系統基本原理2系統總體設計3 系統硬體的具體設計方案4 系統程式設計5 系統調試

圖22 GPRMC資料2

    圖 22 提取顯示GPRMC的日期年月日為07年4月25日,方位角為000.0度,磁偏角為003.3度,磁偏角的方向為西(W)。