亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        嵌入式Linux通用GPS接口的設(shè)計(jì)與實(shí)現(xiàn)

        2008-04-12 00:00:00李學(xué)斌
        現(xiàn)代電子技術(shù) 2008年22期

        摘 要:伴隨著GPS的廣泛應(yīng)用,基于PC機(jī)的GPS由于其價(jià)格及功耗較高已不能滿(mǎn)足社會(huì)發(fā)展的需要,嵌入式定位技術(shù)迅速發(fā)展起來(lái)。結(jié)合ARM處理器及嵌入式Linux操作系統(tǒng)的優(yōu)勢(shì),提出一種基于嵌入式Linux平臺(tái)的通用GPS接口設(shè)計(jì)方案。首先介紹GPS系統(tǒng)的定位原理與通信格式,在此基礎(chǔ)上較為詳細(xì)地闡述基于串行接口的嵌入式Linux與GPS設(shè)備的通信方案,最后給出基于中斷模式的GPS信號(hào)接收與提取方法。該方案具有較強(qiáng)的通用性,可廣泛應(yīng)用于便攜式GPS系統(tǒng)中。

        關(guān)鍵詞:ARM;嵌入式Linux;GPS;串行接口

        中圖分類(lèi)號(hào):TP368.1;TP336文獻(xiàn)標(biāo)識(shí)碼:B

        文章編號(hào):1004373X(2008)2203904

        Design and Implementation of General GPS Interface Solution Based

        on Embedded Linux Operation System

        LI Xuebin

        (Changzhi College,Changzhi,046011,China)

        Abstract:With the widely deployment of GPS,the system based on desktop can not meet the application requirements due to its high prize and high energy consumption,and embedded GPS technology is more and more popular.In this paper,a new kind of GPS interface solution uniting the advantages of ARM processor and embedded Linux operation system is proposed,which is based on embedded Linux platform.The paper first introduces the position principle and communication protocol of GPS,and illuminates the new COM-based communication solution between embedded Linux operation system and GPS system.An interruption-based GPS signal receiving-resolving solution is also illustrated.The solution can be used in various packed GPS systems.

        Keywords:ARM;embedded Linux;GPS;serial interface

        1 引 言

        全球定位系統(tǒng)(Global Position System,GPS)是美國(guó)從20世紀(jì)70年代由美國(guó)國(guó)防部批準(zhǔn)開(kāi)始研制的,具有在海、陸、空進(jìn)行全方位實(shí)時(shí)三維導(dǎo)航與定位能力的新一代衛(wèi)星導(dǎo)航與定位系統(tǒng)。雖然最初GPS衛(wèi)星定位系統(tǒng)是為軍事用途而設(shè)計(jì)的,但其精密的全球定位、簡(jiǎn)便的觀測(cè)、優(yōu)異的實(shí)時(shí)性、豐富的功能、良好的抗干擾性能、極強(qiáng)的保密性等特點(diǎn),使其獲得廣泛的應(yīng)用。在火險(xiǎn)處理中,精確的地理定位具有重要的意義,GPS的以上特點(diǎn)使其特別適合于火災(zāi)報(bào)警系統(tǒng)中的精確定位。

        嵌入式系統(tǒng)是將先進(jìn)的計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)和電子技術(shù)以及各個(gè)行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物。它可以根據(jù)應(yīng)用需求對(duì)軟硬件進(jìn)行適當(dāng)裁剪,以滿(mǎn)足應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積等的需求。隨著計(jì)算機(jī)技術(shù)的發(fā)展,基于PC機(jī)的定位系統(tǒng)由于其價(jià)格及功耗較高已不能滿(mǎn)足社會(huì)發(fā)展的需要,脫離PC機(jī)的嵌入式定位技術(shù)迅速發(fā)展起來(lái)。

        基于以上2點(diǎn),本文提出以ARM器件為CPU,以嵌入式Linux為軟件內(nèi)核的GPS定位系統(tǒng),并對(duì)Linux下通用GPS接口的設(shè)計(jì)加以詳細(xì)闡述。ARM是當(dāng)前全球領(lǐng)先的16/32位RISC微處理器內(nèi)核,而Linux系統(tǒng)具有內(nèi)核小、功能強(qiáng)大、運(yùn)行穩(wěn)定、系統(tǒng)健壯、效率高及開(kāi)源等諸多優(yōu)點(diǎn)。本設(shè)計(jì)解決了單獨(dú)的基于PC機(jī)的定位系統(tǒng)和基于WinCE的嵌入式定位系統(tǒng)成本高或攜帶不便的問(wèn)題,系統(tǒng)性?xún)r(jià)比高,可彌補(bǔ)傳統(tǒng)定位系統(tǒng)的不足。

        2 GPS定位原理與通信格式

        2.1 GPS定位原理

        按目前的方案,全球定位系統(tǒng)的空間部分用24顆高度約2.02×104 km的衛(wèi)星組成衛(wèi)星星座。21+3顆衛(wèi)星均為近圓形軌道,運(yùn)行周期約為11 h 58 min,分布在6個(gè)軌道面上(每軌道面4顆),軌道傾角為55°。衛(wèi)星的分布使得在全球的任何地方、任何時(shí)間都可觀測(cè)到4顆以上的衛(wèi)星,并能保持良好定位解算精度的幾何圖形(DOP)。這就提供了在時(shí)間上連續(xù)的全球?qū)Ш侥芰Α?/p>

        GPS的基本定位原理是:衛(wèi)星不間斷地發(fā)送自身的星歷參數(shù)和時(shí)間信息,用戶(hù)接收到這些信息后,經(jīng)過(guò)計(jì)算求出接收機(jī)的三維位置、三維方向以及運(yùn)動(dòng)速度和時(shí)間信息,如圖1所示。

        圖1 GPS定位原理

        其中:

        ((x1-x)2+(y1-y)2+(z1-z)2)12+

        c·(t-t01)=d1

        ((x2-x)2+(y2-y)2+(z2-z)2)12+

        c·(t-t02)=d2

        ((x3-x)2+(y3-y)2+(z3-z)2)12+

        c·(t-t03)=d3

        ((x4-x)2+(y4-y)2+(z4-z)2)12+

        c·(t-t04)=d4(1)

        由于含有接收機(jī)衛(wèi)星鐘的誤差及大氣傳播誤差,GPS接收機(jī)對(duì)碼的量測(cè)就可得到衛(wèi)星到接收機(jī)的距離,故稱(chēng)為偽距。對(duì)CA碼(Coarse-Acquisition Code,粗捕獲碼)測(cè)得的偽距稱(chēng)為CA碼偽距,精度約為24 m,對(duì)P碼(Precise Code,精密碼)測(cè)得的偽距稱(chēng)為P碼偽距,精度約為2 m。

        2.2 GPS通信格式

        目前,幾乎所有的GPS廠(chǎng)商都遵循美國(guó)國(guó)家海洋電子協(xié)會(huì)(National Marine Electronics Association)制定的NMEA-0183V20通信標(biāo)準(zhǔn)格式。GPS接收機(jī)的輸出語(yǔ)句按照串行通信協(xié)議,數(shù)據(jù)格式為8個(gè)數(shù)據(jù)位、1個(gè)起始位、1個(gè)停止位,無(wú)奇偶校驗(yàn)位。本文中采用的數(shù)據(jù)傳輸?shù)牟ㄌ芈蕿? 600 b/s。其輸出語(yǔ)句采用的是NMEA0183即ASCII格式碼,包括GGA,GSA,RMC,GSV,RMC,RMT,VTG等。這些定位語(yǔ)句不僅給出了位置、速度、時(shí)間等信息,而且指出了當(dāng)?shù)氐男l(wèi)星接收情況。根據(jù)項(xiàng)目的實(shí)際需求,本設(shè)計(jì)只提取GGA數(shù)據(jù)。GGA數(shù)據(jù)的數(shù)據(jù)格式為:所有的信息由$開(kāi)始,以換行結(jié)束,緊跟著$后的5個(gè)字符解釋了信息的基本類(lèi)型,多重的信息之間用逗號(hào)隔開(kāi)。其中代表回車(chē)控制符,代表?yè)Q行控制符。具體說(shuō)明如下:

        $GPGGA,hhmmss,XXXX.XXXX,N/S,

        12 3

        XXXXX.XXXX,E/W,X,XX,XXX,0/-XXXX,

        4 56 7 89

        M, 0/-XXX, M,XXX,XXXX *hh

        101112 131415

        (1)世界時(shí)(UTC):hh:時(shí);mm:分;ss:秒。例如,北京時(shí)間(東八時(shí)區(qū))=UTC+8 h;

        (2)緯度:“度度分分.分分分分”方式表示,小數(shù)點(diǎn)后也以分為單位;

        (3)N:北緯;S:南緯;

        (4)經(jīng)度:以“度度度分分.分分分分”方式表示。小數(shù)點(diǎn)后也以分為單位;

        (5)E:東經(jīng);W:西經(jīng);

        (6)GPS質(zhì)量指示。0:未定位;1:GPS定位;2:差分GPS定位;

        (7)使用到的衛(wèi)星數(shù),可為0~12個(gè)。

        (8)HDOP值:水平方向的定位精度劣化程度系數(shù)。三維定位時(shí)也會(huì)輸出HDOP值。但在未定位時(shí)輸出“099”。如果輸出語(yǔ)句的經(jīng)緯度輸出設(shè)置精度達(dá)不到1/10 000時(shí),小數(shù)點(diǎn)后省略;

        (9)天線(xiàn)高度,0:正數(shù),高于海平面;-:負(fù)數(shù),低于海平面;

        (10)天線(xiàn)高度,單位為m;

        (11)地理高度,0:正數(shù),高于海平面;-:負(fù)數(shù),低于海平面;

        (12)地理高度,單位為m;

        (13)DGPS修正經(jīng)過(guò)的時(shí)間。差分?jǐn)?shù)據(jù)時(shí)間單位為s;

        (14)差分基準(zhǔn)站發(fā)播的ID編號(hào);

        (15)校驗(yàn)和。

        GPS命令格式為:

        $PFST,,,…,

        命令行以$PFST開(kāi)頭,后面跟著參數(shù),其中參數(shù)之間由逗號(hào)分隔開(kāi)。GPS可以發(fā)送的數(shù)據(jù)如表1所示。

        本設(shè)計(jì)中用到如下2個(gè)命令:

        $PFST,START,0為發(fā)送命令使GPS模塊開(kāi)始定位。

        $PFST,NMEA,2000,9600為定義要發(fā)送的數(shù)據(jù),并設(shè)置通過(guò)串口傳輸?shù)牟ㄌ芈省?/p>

        其中參數(shù)選擇2 000,即選擇了向串口發(fā)送GGA數(shù)據(jù)。

        表1 GPS 基本命令

        MessagebitMessagebit

        GLL0x1000GGA0x2000

        VTG0x4000RMC0x8000

        GSA0x0002FOM0x0020

        GSV0x0001PPS0x0010

        Reserved0x0040

        3 嵌入式Linux 通用GPS接口的實(shí)現(xiàn)

        3.1 Linux 串行接口通信的設(shè)置與操作

        3.1.1 串口初始化

        本系統(tǒng)中,GPS模塊通過(guò)串口與Philip LPC2210嵌入式系統(tǒng)通信,處理器通過(guò)串口來(lái)獲得定位信息數(shù)據(jù)。Linux通過(guò)虛擬設(shè)備文件統(tǒng)一管理硬件設(shè)備,并將硬件設(shè)備的技術(shù)細(xì)節(jié)隱藏起來(lái)。內(nèi)核提供訪(fǎng)問(wèn)設(shè)備文件的系統(tǒng)函數(shù),應(yīng)用程序通過(guò)調(diào)用這些函數(shù)完成對(duì)硬件的操作。對(duì)串口訪(fǎng)問(wèn)控制的函數(shù)如表2所示,這些函數(shù)一起構(gòu)成了通用的終端控制接口,提供了對(duì)終端的有效的控制操作。

        表2 串口訪(fǎng)問(wèn)函數(shù)功能

        函數(shù)描述

        tcgetattr/tcsetattr獲取/設(shè)置終端屬性(termios結(jié)構(gòu))

        cfgetispeed/cfsetispeed獲取/設(shè)置輸入速率

        cfgetospeed/cfsetospeed獲取設(shè)置輸出速率

        tcdrain等待所有輸出被傳送

        tcflow暫停傳送或接受

        tcflush丟棄隊(duì)列中尚未傳送或接受的數(shù)據(jù)

        tcsendbreak發(fā)送BREAK字符

        tcgetpgrp/tcsetpgrp獲取設(shè)置前臺(tái)的進(jìn)程組ID

        在對(duì)串口操作之前,首先要對(duì)參數(shù)進(jìn)行初始化、設(shè)置它的屬性以保證通信雙方的通信參數(shù)保持一致,這些屬性定義在結(jié)構(gòu)體struct termios中,如下所示:

        struct termios{

        tcflag_t c_ iflag;

        tcflag_t c_oflag;

        tcflag_ t c_cflag;

        tcflag_ t c_ lflag;

        cc_ta_cc[NCCS];

        }

        其中,c_iflag成員用于控制輸入處理選項(xiàng),它將影響到終端驅(qū)動(dòng)程序在把輸入發(fā)送給程序前是否對(duì)其進(jìn)行處理,及怎樣對(duì)其進(jìn)行處理;成員c_oflag控制輸出處理過(guò)程;c_cflag包含對(duì)端口的設(shè)置,如波特率、字符位數(shù)、停止位等;存儲(chǔ)在成員c_iflag的本地模式標(biāo)志符決定是否顯示字符,是否發(fā)送信號(hào)到應(yīng)用程序等;數(shù)組c_cc包含控制字符的定義和超時(shí)參數(shù),在對(duì)struct.termios結(jié)構(gòu)體的各個(gè)成員賦值,調(diào)用tcsetattr()函數(shù)選擇新的設(shè)置完畢后,嵌入式Linux即可采用與普通文件的輸入/輸出相同的方式訪(fǎng)問(wèn)串口。

        3.1.2 Linux下的串口I/O操作

        Linux對(duì)于串口資源采用“ttyS+編號(hào)”來(lái)命名,所有設(shè)備以設(shè)備文件的形式存儲(chǔ)在文件夾/dev中,其中每一個(gè)設(shè)備由一個(gè)主設(shè)備號(hào)和一個(gè)次設(shè)備號(hào)惟一確定。在Linux中串口設(shè)備被虛擬成文件,因此要訪(fǎng)問(wèn)1個(gè)串口,只需打開(kāi)相應(yīng)的設(shè)備文件,然后向這個(gè)文件讀寫(xiě)數(shù)據(jù)就可以完成數(shù)據(jù)的接收和發(fā)送。首先調(diào)用open函數(shù)打開(kāi)串口設(shè)備,使用完畢后用close函數(shù)關(guān)閉端口。使用的文件操作函數(shù)如下:

        int open(coast char*pathname,int flags);

        int close(int fd);

        參數(shù)pathname指向欲打開(kāi)的文件路徑字符串;參數(shù)flags為設(shè)置打開(kāi)方式;open系統(tǒng)調(diào)用返回一個(gè)整形文件標(biāo)識(shí)符;以后所有的端口操作都針對(duì)這個(gè)標(biāo)識(shí)符進(jìn)行。close的參數(shù)fd為希望關(guān)閉的文件的標(biāo)識(shí)符[7-10]。

        在完成串口配置,使用open函數(shù)打開(kāi)串口后,調(diào)用read和write函數(shù)接收和發(fā)送數(shù)據(jù)。這兩個(gè)函數(shù)返回實(shí)際讀寫(xiě)的字節(jié)數(shù),如果有錯(cuò)誤發(fā)生,則返回-1。第一個(gè)參數(shù)為要讀/寫(xiě)的文件標(biāo)識(shí)符,第二個(gè)參數(shù)為讀/寫(xiě)緩存,第三個(gè)參數(shù)表示希望讀/寫(xiě)的字節(jié)數(shù)。函數(shù)定義如下:

        ssize_t read(int fd,void*buf,size_t count);

        ssize_t write (int fd,const void*bufsize_t count);

        3.2 基于中斷模式的GPS信號(hào)提取

        中斷處理子函數(shù)主要用于處理串口接收到的數(shù)據(jù),由于GPS發(fā)送的數(shù)據(jù)類(lèi)型都是以$符號(hào)開(kāi)頭,所以首先應(yīng)檢測(cè)$符號(hào),進(jìn)而進(jìn)行下一步的處理。

        在此之前需要建立一個(gè)結(jié)構(gòu)體,用來(lái)保存GPS數(shù)據(jù),結(jié)構(gòu)體中包括數(shù)組Data[80],用來(lái)保存GPS數(shù)據(jù),數(shù)組長(zhǎng)度設(shè)為80;還有一個(gè)狀態(tài)標(biāo)志位State,用于表示當(dāng)前的接收狀態(tài),State = 1表示已經(jīng)接收到$,State = 2表示已經(jīng)接收完1組GPS數(shù)據(jù),可以對(duì)數(shù)據(jù)進(jìn)行處理。State = 0表示還沒(méi)有接收到GPS信息。定義Data[GPSDataQWPTR] 表示第GPSDataQWPTR位數(shù)據(jù)。串口在接收GPS數(shù)據(jù)的時(shí)候需要判斷GPS數(shù)據(jù)的起始位和結(jié)束位,這一過(guò)程都在中斷處理子函數(shù)中實(shí)現(xiàn),具體的流程圖如圖2所示。

        串口的中斷處理子函數(shù)起著非常關(guān)鍵的作用,一方面,它要處理來(lái)自于串口的緩沖區(qū)的GPS數(shù)據(jù),將串口中的數(shù)據(jù)寫(xiě)入一個(gè)緩沖隊(duì)列中;另一方面,它還要負(fù)責(zé)與GPS_Handle()函數(shù)通信,通知GPS_Handle()任務(wù)開(kāi)始對(duì)緩沖隊(duì)列中的數(shù)據(jù)進(jìn)行處理,將緩沖隊(duì)列中的數(shù)據(jù)寫(xiě)入RAM中。根據(jù)$GPRMC數(shù)據(jù)格式,通過(guò)設(shè)置逗號(hào)計(jì)數(shù)器即可解算出經(jīng)、緯度等信息。

        圖2 中斷處理子程序

        4 結(jié) 語(yǔ)

        GPS系統(tǒng)目前已廣泛應(yīng)用到社會(huì)的各個(gè)領(lǐng)域。Linux作為開(kāi)源軟件,開(kāi)發(fā)周期相對(duì)較短、內(nèi)核精簡(jiǎn)、功能強(qiáng)大、運(yùn)行穩(wěn)定、系統(tǒng)健壯、效率高。其易于定制裁剪,內(nèi)核和用戶(hù)界面完全獨(dú)立。它非常靈活,各部分的可定制性都很強(qiáng)。正因?yàn)榫哂羞@些特性,為L(zhǎng)inux在硬件資源有限的嵌入式領(lǐng)域提供了廣闊的舞臺(tái)。本文設(shè)計(jì)的基于嵌入式Linux平臺(tái)的GPS接口具有較強(qiáng)的通用性,可廣泛應(yīng)用于便攜式GPS系統(tǒng)中。

        參考文獻(xiàn)

        [1]何林遠(yuǎn),畢篤彥.嵌入式 Linux實(shí)時(shí)性的分析與研究\\.計(jì)算機(jī)應(yīng)用與軟件,2008,25(2):225-227.

        [2]孫守昌,韓紅芳,孟煜.嵌入式Linux實(shí)時(shí)技術(shù)改進(jìn)與實(shí)現(xiàn)\\.微計(jì)算機(jī)信息,2007,23(12):67-69.

        [3]任旭龍,周緯杰.基于嵌入式Linux操作系統(tǒng)內(nèi)核實(shí)時(shí)性的改進(jìn)方法研究\\.計(jì)算機(jī)工程與科學(xué),2006,28(1):125-127.

        [4]周立功.ARM嵌入式系統(tǒng)基本教程[M].北京:北京航空航天大學(xué)出版社,2005.

        [5]許海燕,付炎.嵌入式系統(tǒng)技術(shù)與應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2002.

        [6]符意德.嵌入式系統(tǒng)設(shè)計(jì)原理及應(yīng)用[M].北京:清華大學(xué)出版社,2004.

        [7]胃靜莊.嵌入式系統(tǒng)設(shè)計(jì)開(kāi)發(fā)實(shí)例詳解基于ARM的應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2005.

        [8]王田苗.嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開(kāi)發(fā)[M].北京:清華大學(xué)出版社,2002.

        [9]劉錚蓉,張智超,許振山,等.嵌入式Linux應(yīng)用技術(shù)詳解[M].北京:機(jī)械工業(yè)出版社,2004.

        [10]Craig Hollabaugh.嵌入式Linux硬件、軟件與接口[M].陳雷,譯.北京:電子工業(yè)出版社,2003.

        [11]馬忠梅,李善平,康慨.ARMLinux嵌入式系統(tǒng)教程[M].北京:北京航空航大大學(xué)出版社,2004.

        [12]Karim Yaghmour.Building Embedded Linux Systems[M].New York:O′Reilly Press,2003.

        作者簡(jiǎn)介 李學(xué)斌 男,1956年出生,山西長(zhǎng)治學(xué)院計(jì)算機(jī)系副教授。主要研究方向?yàn)橛?jì)算機(jī)應(yīng)用。

        注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文

        高清国产一级毛片国语| 欧美狠狠入鲁的视频777色 | 久久精品日本不卡91| 久热国产vs视频在线观看| 婷婷综合久久中文字幕蜜桃三电影| 亚洲一区二区精品久久岳| sm免费人成虐漫画网站| 老子影院午夜伦不卡| 国产精品天天狠天天看| 亚洲色婷婷综合开心网| 白白色最新福利视频二| 大学生粉嫩无套流白浆| 色欲麻豆国产福利精品| 亚洲女同系列高清在线观看| 国产情侣亚洲自拍第一页| 无码人妻精品一区二区蜜桃网站| 国产呦精品系列在线播放| 91精品人妻一区二区三区蜜臀| 青青草视频在线观看色| 亚洲 自拍 另类小说综合图区| 国产精品三级一区二区按摩| 天天综合色中文字幕在线视频| 草草影院发布页| 亚洲永久无码7777kkk| 成人综合久久精品色婷婷| 日本高清视频在线观看一区二区| 亚洲加勒比久久88色综合| 亚洲夜夜骑| 日本一二三区在线视频观看| 人妻av中文字幕久久| 中文亚洲av片在线观看不卡| 国产一区二区内射最近人| 日韩精品在线视频一二三| 成人h视频在线观看| 一本加勒比hezyo无码视频| 日韩精品一区二区三区人妻在线| 99久久婷婷国产综合精品青草免费| 欧美亚洲日本在线| 久久精品亚洲精品国产区| 人成午夜大片免费视频77777| 亚洲av无码之日韩精品|