李春明,李雪燕,王曉君
(河北科技大學(xué)信息科學(xué)與工程學(xué)院,石家莊050000)
一種緊耦合Ubuntu系統(tǒng)的衛(wèi)星導(dǎo)航接收機(jī)設(shè)計(jì)
李春明,李雪燕,王曉君
(河北科技大學(xué)信息科學(xué)與工程學(xué)院,石家莊050000)
提出了一種采用ARM+FPGA架構(gòu)的緊耦合Ubuntu系統(tǒng)的衛(wèi)星導(dǎo)航接收機(jī)的設(shè)計(jì),ARM上運(yùn)行Ubuntu系統(tǒng), ARM與FPGA之間通過ARM自帶的GPMC接口進(jìn)行通信,重點(diǎn)解決Ubuntu系統(tǒng)與GPMC通信相關(guān)的驅(qū)動軟件設(shè)計(jì)問題。首先介紹了ARM Cortex-A8的GPMC接口原理,然后給出了Ubuntu系統(tǒng)的主要軟件驅(qū)動模塊的設(shè)計(jì)思路。本設(shè)計(jì)結(jié)合了ARM和FPGA各自的優(yōu)點(diǎn),借助Ubuntu系統(tǒng)自身強(qiáng)大的功能,加快了接收機(jī)的研發(fā)速度,增加了其穩(wěn)定性。
ARM+FPGA;緊耦合;GPMC;AM3354;Virtex-6
隨著科技的不斷發(fā)展,嵌入式系統(tǒng)的應(yīng)用越來越廣泛,ARM公司的微處理器也受到了越來越多的關(guān)注,其可以在很短的時間內(nèi)處理大量的數(shù)據(jù),但信號處理能力有限[1];FPGA芯片規(guī)模越來越大,速度非???可以實(shí)現(xiàn)十分復(fù)雜的高速邏輯,但是FPGA在控制和驅(qū)動程序處理方面比較薄弱[2]。因此,本文采用了ARM+FPGA的組合方式,設(shè)計(jì)了緊耦合Ubuntu系統(tǒng)的衛(wèi)星導(dǎo)航接收機(jī)。該方式以ARM微處理器為控制核心,FPGA為協(xié)處理器[3],設(shè)計(jì)簡潔,結(jié)構(gòu)緊湊,成本較低,功能強(qiáng)大,可以應(yīng)用于很復(fù)雜的場合。
1.1 衛(wèi)星導(dǎo)航接收機(jī)的原理
衛(wèi)星導(dǎo)航接收機(jī)接收衛(wèi)星發(fā)射的導(dǎo)航信號,經(jīng)過捕獲、跟蹤處理以及PVT解算,得到用戶的位置、速度和時間等信息[4]。衛(wèi)星導(dǎo)航接收機(jī)的工作原理為:首先天線接收到來自衛(wèi)星的信號,經(jīng)過前置放大器把信號放大,放大后的信號下變頻到近基頻,而不是真正的基帶,此過程完成了射頻前端的功能;接著基帶數(shù)字信號處理模塊處理來自射頻前端的中頻信號,從中獲得導(dǎo)航的相關(guān)信息,解調(diào)出對應(yīng)的導(dǎo)航電文;最后導(dǎo)航定位模塊通過對基帶處理模塊傳送出來的信息進(jìn)行PVT解算,計(jì)算出用戶當(dāng)前的位置、速度和時間等信息,完成接收機(jī)的定位[5-6]。衛(wèi)星導(dǎo)航接收機(jī)框圖如圖1所示。
圖1 衛(wèi)星導(dǎo)航接收機(jī)框圖
1.2 ARM與FPGA之間的通信
在設(shè)計(jì)衛(wèi)星導(dǎo)航接收機(jī)時,基帶處理模塊基本上是在FPGA中完成的,而定位解算模塊基本上是在ARM中完成的。導(dǎo)航定位模塊需要從基帶處理模塊中獲取導(dǎo)航的相關(guān)信息[7],也就是說ARM需要從FPGA中獲取信息,因此ARM和FPGA之間就需要相互通信。
ARM和FPGA之間不是通過一個普通的串口來進(jìn)行通信的,而是采用并行通信,也就是總線傳輸?shù)姆绞? ARM和FPGA之間通過GPMC總線進(jìn)行通信。GPMC總線是ARM本身自帶的總線接口,內(nèi)部具有強(qiáng)大的訪問性能控制寄存器組,可以自動協(xié)調(diào)總線訪問的速度,還可以與更大范圍的外圍存儲芯片進(jìn)行通信。
通信之前首先要初始化ARM,在ARM初始化過程中要配置GPMC_CONFIG1_i、GPMC_CONFIG2_i、GPMC_CONFIG5_i、GPMC_CONFIG6_i、GPMC_IRQ等寄存器,依次對GPMC的時鐘和地址/數(shù)據(jù)總線、片選信號、讀使能、寫使能、中斷信號等進(jìn)行配置,為ARM與FPGA的數(shù)據(jù)傳輸做準(zhǔn)備。
初始化完成之后,FPGA接收來自外界的數(shù)據(jù),當(dāng)檢測到數(shù)據(jù)存滿之后,FPGA會通過ARM本身自帶的GPMC總線向ARM發(fā)出中斷請求,此時ARM會響應(yīng)FPGA的中斷,通過GPMC進(jìn)行數(shù)據(jù)傳輸,這種傳輸方式速度較快,而且相對穩(wěn)定。ARM和FPGA的連接示意圖如圖2所示。
圖2 ARM和FPGA的連接示意圖
ARM和FPGA之間的通信,采用了緊耦合的方式,即把硬件的驅(qū)動模塊充分嵌入到系統(tǒng)內(nèi)部,與系統(tǒng)無縫耦合在一起。采用緊耦合的好處是使ARM參與了大部分的信號處理過程和全部的信息處理,利用Ubuntu框架本身的優(yōu)勢,可以節(jié)省開發(fā)資源。因此需要設(shè)計(jì)嵌入式Ubuntu系統(tǒng)下的驅(qū)動程序[8],在驅(qū)動程序中需要中斷驅(qū)動程序和總線驅(qū)動程序的配合[9]。
2.1 中斷驅(qū)動程序
在Ubuntu系統(tǒng)中,并不直接從中斷向量表中調(diào)用設(shè)備驅(qū)動程序的中斷服務(wù)子程序,而是由Ubuntu系統(tǒng)接收硬件中斷,再由系統(tǒng)調(diào)用中斷服務(wù)子程序。設(shè)備驅(qū)動程序在設(shè)備第一次打開、硬件被告知產(chǎn)生中斷之前,調(diào)用request_irq()函數(shù)來申請中斷,在最后一次關(guān)閉、硬件設(shè)備被告知不再用中斷處理器后,調(diào)用free_irq()函數(shù)來釋放中斷[10]。
函數(shù)定義為:
參數(shù)irq表示要申請的硬件中斷號,handler指向中斷處理函數(shù),dev_id為設(shè)備標(biāo)識,regs為中斷發(fā)生時寄存器內(nèi)容,flags為0,或者是下列一個或多個標(biāo)志的位掩碼, device為設(shè)備名。
首先系統(tǒng)上電,request_irq()函數(shù)為FPGA的中斷分配中斷請求號,當(dāng)FPGA數(shù)據(jù)存滿之后,通過GPMC向ARM發(fā)送中斷請求,此時中斷請求號會發(fā)生變化。當(dāng)ARM檢測到中斷請求號的變化之后,request_irq()函數(shù)會給請求函數(shù)一個返回值,來表明請求是否成功。若request_irq()函數(shù)返回給請求函數(shù)的值為0,表示請求成功;返回值為負(fù)值,表示為錯誤碼;返回值為_EBUSY,表示現(xiàn)在有另一個驅(qū)動程序占用了要請求的中斷信號線[11]。由于中斷請求號和中斷處理例程是一一對應(yīng)的[12],所以當(dāng)請求成功之后,就會處理中斷請求號對應(yīng)的中斷處理例程。
在執(zhí)行中斷例程時,首先清除ARM中斷寄存器相應(yīng)的位;然后對狀態(tài)寄存器相應(yīng)的位進(jìn)行寫操作,這是為了能繼續(xù)響應(yīng)來自FPGA的中斷請求;最后設(shè)置數(shù)據(jù)傳輸標(biāo)志位。當(dāng)主程序檢測到標(biāo)志位時,調(diào)用總線驅(qū)動程序進(jìn)行數(shù)據(jù)傳輸,這樣可以提高系統(tǒng)的傳輸效率。中斷服務(wù)程序流程圖如圖3所示。
2.2 總線驅(qū)動程序
ARM響應(yīng)FPGA的中斷之后,通過GPMC總線來讀寫FPGA中的數(shù)據(jù),即實(shí)現(xiàn)對FPGA的訪問。
調(diào)用總線驅(qū)動程序進(jìn)行數(shù)據(jù)傳輸時,用戶空間對FPGA的訪問采用內(nèi)存映射方式,這樣用戶程序就可以直接訪問設(shè)備內(nèi)存[13],大大加快了數(shù)據(jù)傳輸?shù)乃俣?。Ubuntu環(huán)境提供了mmap函數(shù),用來將某個文件內(nèi)容映射到內(nèi)存中,對該內(nèi)存區(qū)域的存取即是直接對該文件內(nèi)容的讀寫。
在int(*mmap)(struct file*,struct vm_area_ struct*)中,參數(shù)struct vm_area_struct就是內(nèi)核為找到的用戶空間的進(jìn)程虛擬內(nèi)存區(qū)域,這就是驅(qū)動程序需要映射到設(shè)備內(nèi)存的地址。
圖3 中斷服務(wù)程序流程圖
首先驅(qū)動分配一塊內(nèi)存,然后調(diào)用mmap函數(shù)把內(nèi)存的物理地址轉(zhuǎn)換成頁幀號[14],調(diào)用mmap函數(shù)的過程就是對函數(shù)的初始化,mmap函數(shù)原型如下:
參數(shù)start指向想要讀取的內(nèi)存首地址,一般設(shè)為NULL,代表讓系統(tǒng)自動選定地址,對應(yīng)成功后返回該地址;length代表映射到內(nèi)存中的文件長度;prot代表映射區(qū)域的保護(hù)方式;flags代表影響映射區(qū)域的各種特性;fd代表要映射到內(nèi)存中的文件描述符;offsize代表文件映射的偏移量,通常設(shè)置為0(代表從最前方開始對應(yīng)),offsize必須是分頁大小的整數(shù)倍。
再調(diào)用remap_page_range函數(shù),通過頁號來建立頁表,并映射到用戶空間,這樣就可以完成用戶空間與內(nèi)核空間的數(shù)據(jù)傳輸[15]。
remap_page_range函數(shù)原型為:
其中from是映射開始的虛擬地址,這個函數(shù)為虛擬地址空間from和from+size之間的范圍構(gòu)造頁表;to是虛擬地址應(yīng)該映射到的物理地址;size是被映射區(qū)域的大小;prot是保護(hù)標(biāo)志。
本文介紹了一種基于ARM+FPGA組合方式的衛(wèi)星導(dǎo)航接收機(jī)設(shè)計(jì)方案,ARM處理器體積小、功耗低、性能高,控制接收機(jī)的整體流程;FPGA費(fèi)用低、硬件資源豐富,可以實(shí)現(xiàn)大規(guī)模的數(shù)據(jù)運(yùn)算,適用于基帶處理模塊的設(shè)計(jì)。ARM與FPGA之間采用GPMC的16位總線傳輸方式進(jìn)行通信,傳輸速度快。在Ubuntu下進(jìn)行了驅(qū)動程序的編寫,這樣ARM就可以通過調(diào)用FPGA驅(qū)動程序進(jìn)行數(shù)據(jù)的傳輸。此架構(gòu)在成本和實(shí)時性上具有一定的實(shí)用價值。
[1]趙愛萍.基于ARM的嵌入式系統(tǒng)開發(fā)及其在GPS接收機(jī)中的應(yīng)用研究[D].西安:中國科學(xué)院國家授時中心,2006.
[2]沈孝龍.基于ARM+FPGA的北斗導(dǎo)航終端的研究與設(shè)計(jì)[D].南京:南京理工大學(xué),2014.
[3]邢增強(qiáng).基于ARM+FPGA的GPS接收機(jī)設(shè)計(jì)[J].傳感器與微系統(tǒng),2011,30(7):108-110.
[4]賀陽.BD2接收機(jī)基帶系統(tǒng)的FPGA設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:武漢理工大學(xué),2013.
[5]劉競超,鄧中亮.基于ARM+FPGA北斗接收機(jī)設(shè)計(jì)[J].軟件,2012,33(12):38-39.
[6]謝鋼.GPS原理與接收機(jī)設(shè)計(jì)[M].北京:電子工業(yè)出版社, 2011.
[7]楊樹偉.基于FPGA與DSP嵌入式北斗/GPS兼容型接收機(jī)設(shè)計(jì)與試驗(yàn)[D].鎮(zhèn)江:江蘇科技大學(xué),2012.
[8]付陽.基于ARM9的嵌入式Linux移植和驅(qū)動程序設(shè)計(jì)[D].武漢:華中科技大學(xué),2012.
[9]劉剛,趙劍川.Linux系統(tǒng)移植[M].北京:清華大學(xué)出版社, 2011:26-30.
[10]程科.嵌入式Linux設(shè)備驅(qū)動程序的設(shè)計(jì)與研究[D].成都:電子科技大學(xué),2007.
[11]弓雷.ARM嵌入式Linux系統(tǒng)開發(fā)詳解[M].2版.北京:清華大學(xué)出版社,2014.
[12]張淑梅.基于ARM+FPGA的高精度數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].國外電子測量技術(shù),2014,33(11):63-64.
[13]朱曉鵬,肖鐵軍,趙蕙.ARM+FPGA的實(shí)時數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(13):3088-3090.
[14]mmap函數(shù)系統(tǒng)調(diào)用(內(nèi)核空間到用戶空間的映射)[EB/ OL].[2016-04].http://blog.csdn.net/ahstusujian/article/details/8065810.
[15]關(guān)于驅(qū)動開發(fā)中mmap函數(shù)的實(shí)現(xiàn)[EB/OL].[2016-04].http://www.cnblogs.com/hoys/archive/2012/06/26/2563319. html.
李春明(副教授)、李雪燕(研究生),主要從事運(yùn)動目標(biāo)檢測、模式識別;王曉君(教授),主要研究方向?yàn)樾l(wèi)星應(yīng)用技術(shù)。
(責(zé)任編輯:薛士然收修改稿日期:2016-04-26)
Satellite Navigation Receiver Design Based on Tight Coupling Ubuntu System
Li Chunming,Li Xueyan,Wang Xiaojun
(Hebei Universityof Science&Technology,Shijiazhuang 050000,China)
Tight coupling Ubuntu system design of satellite navigation receiver using ARM+FPGA architecture is proposed,Ubuntu system runs on the ARM,the GPMC interface is used for communication of ARM and FPGA.The design of driving software related to GPMC communication in Ubuntu system is the key point of this paper.First,the GPMC interface principle of ARM Cortex-A8 is introduced,and the main driver software module design ideas of the Ubuntu system is given.This design combines the advantages of ARM and FPGA,which increases the speed and stability of the receiver.
ARM+FPGA;tight coupling;GPMC;AM3354;Virtex-6
TP332
A