李春明,李雪燕,王曉君
(河北科技大學信息科學與工程學院,石家莊050000)
一種緊耦合Ubuntu系統的衛星導航接收機設計
李春明,李雪燕,王曉君
(河北科技大學信息科學與工程學院,石家莊050000)
提出了一種采用ARM+FPGA架構的緊耦合Ubuntu系統的衛星導航接收機的設計,ARM上運行Ubuntu系統, ARM與FPGA之間通過ARM自帶的GPMC接口進行通信,重點解決Ubuntu系統與GPMC通信相關的驅動軟件設計問題。首先介紹了ARM Cortex-A8的GPMC接口原理,然后給出了Ubuntu系統的主要軟件驅動模塊的設計思路。本設計結合了ARM和FPGA各自的優點,借助Ubuntu系統自身強大的功能,加快了接收機的研發速度,增加了其穩定性。
ARM+FPGA;緊耦合;GPMC;AM3354;Virtex-6
隨著科技的不斷發展,嵌入式系統的應用越來越廣泛,ARM公司的微處理器也受到了越來越多的關注,其可以在很短的時間內處理大量的數據,但信號處理能力有限[1];FPGA芯片規模越來越大,速度非常快,可以實現十分復雜的高速邏輯,但是FPGA在控制和驅動程序處理方面比較薄弱[2]。因此,本文采用了ARM+FPGA的組合方式,設計了緊耦合Ubuntu系統的衛星導航接收機。該方式以ARM微處理器為控制核心,FPGA為協處理器[3],設計簡潔,結構緊湊,成本較低,功能強大,可以應用于很復雜的場合。
1.1 衛星導航接收機的原理
衛星導航接收機接收衛星發射的導航信號,經過捕獲、跟蹤處理以及PVT解算,得到用戶的位置、速度和時間等信息[4]。衛星導航接收機的工作原理為:首先天線接收到來自衛星的信號,經過前置放大器把信號放大,放大后的信號下變頻到近基頻,而不是真正的基帶,此過程完成了射頻前端的功能;接著基帶數字信號處理模塊處理來自射頻前端的中頻信號,從中獲得導航的相關信息,解調出對應的導航電文;最后導航定位模塊通過對基帶處理模塊傳送出來的信息進行PVT解算,計算出用戶當前的位置、速度和時間等信息,完成接收機的定位[5-6]。衛星導航接收機框圖如圖1所示。

圖1 衛星導航接收機框圖
1.2 ARM與FPGA之間的通信
在設計衛星導航接收機時,基帶處理模塊基本上是在FPGA中完成的,而定位解算模塊基本上是在ARM中完成的。導航定位模塊需要從基帶處理模塊中獲取導航的相關信息[7],也就是說ARM需要從FPGA中獲取信息,因此ARM和FPGA之間就需要相互通信。
ARM和FPGA之間不是通過一個普通的串口來進行通信的,而是采用并行通信,也就是總線傳輸的方式, ARM和FPGA之間通過GPMC總線進行通信。GPMC總線是ARM本身自帶的總線接口,內部具有強大的訪問性能控制寄存器組,可以自動協調總線訪問的速度,還可以與更大范圍的外圍存儲芯片進行通信。
通信之前首先要初始化ARM,在ARM初始化過程中要配置GPMC_CONFIG1_i、GPMC_CONFIG2_i、GPMC_CONFIG5_i、GPMC_CONFIG6_i、GPMC_IRQ等寄存器,依次對GPMC的時鐘和地址/數據總線、片選信號、讀使能、寫使能、中斷信號等進行配置,為ARM與FPGA的數據傳輸做準備。
初始化完成之后,FPGA接收來自外界的數據,當檢測到數據存滿之后,FPGA會通過ARM本身自帶的GPMC總線向ARM發出中斷請求,此時ARM會響應FPGA的中斷,通過GPMC進行數據傳輸,這種傳輸方式速度較快,而且相對穩定。ARM和FPGA的連接示意圖如圖2所示。

圖2 ARM和FPGA的連接示意圖
ARM和FPGA之間的通信,采用了緊耦合的方式,即把硬件的驅動模塊充分嵌入到系統內部,與系統無縫耦合在一起。采用緊耦合的好處是使ARM參與了大部分的信號處理過程和全部的信息處理,利用Ubuntu框架本身的優勢,可以節省開發資源。因此需要設計嵌入式Ubuntu系統下的驅動程序[8],在驅動程序中需要中斷驅動程序和總線驅動程序的配合[9]。
2.1 中斷驅動程序
在Ubuntu系統中,并不直接從中斷向量表中調用設備驅動程序的中斷服務子程序,而是由Ubuntu系統接收硬件中斷,再由系統調用中斷服務子程序。設備驅動程序在設備第一次打開、硬件被告知產生中斷之前,調用request_irq()函數來申請中斷,在最后一次關閉、硬件設備被告知不再用中斷處理器后,調用free_irq()函數來釋放中斷[10]。
函數定義為:

參數irq表示要申請的硬件中斷號,handler指向中斷處理函數,dev_id為設備標識,regs為中斷發生時寄存器內容,flags為0,或者是下列一個或多個標志的位掩碼, device為設備名。
首先系統上電,request_irq()函數為FPGA的中斷分配中斷請求號,當FPGA數據存滿之后,通過GPMC向ARM發送中斷請求,此時中斷請求號會發生變化。當ARM檢測到中斷請求號的變化之后,request_irq()函數會給請求函數一個返回值,來表明請求是否成功。若request_irq()函數返回給請求函數的值為0,表示請求成功;返回值為負值,表示為錯誤碼;返回值為_EBUSY,表示現在有另一個驅動程序占用了要請求的中斷信號線[11]。由于中斷請求號和中斷處理例程是一一對應的[12],所以當請求成功之后,就會處理中斷請求號對應的中斷處理例程。
在執行中斷例程時,首先清除ARM中斷寄存器相應的位;然后對狀態寄存器相應的位進行寫操作,這是為了能繼續響應來自FPGA的中斷請求;最后設置數據傳輸標志位。當主程序檢測到標志位時,調用總線驅動程序進行數據傳輸,這樣可以提高系統的傳輸效率。中斷服務程序流程圖如圖3所示。
2.2 總線驅動程序
ARM響應FPGA的中斷之后,通過GPMC總線來讀寫FPGA中的數據,即實現對FPGA的訪問。
調用總線驅動程序進行數據傳輸時,用戶空間對FPGA的訪問采用內存映射方式,這樣用戶程序就可以直接訪問設備內存[13],大大加快了數據傳輸的速度。Ubuntu環境提供了mmap函數,用來將某個文件內容映射到內存中,對該內存區域的存取即是直接對該文件內容的讀寫。
在int(*mmap)(struct file*,struct vm_area_ struct*)中,參數struct vm_area_struct就是內核為找到的用戶空間的進程虛擬內存區域,這就是驅動程序需要映射到設備內存的地址。

圖3 中斷服務程序流程圖
首先驅動分配一塊內存,然后調用mmap函數把內存的物理地址轉換成頁幀號[14],調用mmap函數的過程就是對函數的初始化,mmap函數原型如下:

參數start指向想要讀取的內存首地址,一般設為NULL,代表讓系統自動選定地址,對應成功后返回該地址;length代表映射到內存中的文件長度;prot代表映射區域的保護方式;flags代表影響映射區域的各種特性;fd代表要映射到內存中的文件描述符;offsize代表文件映射的偏移量,通常設置為0(代表從最前方開始對應),offsize必須是分頁大小的整數倍。
再調用remap_page_range函數,通過頁號來建立頁表,并映射到用戶空間,這樣就可以完成用戶空間與內核空間的數據傳輸[15]。
remap_page_range函數原型為:

其中from是映射開始的虛擬地址,這個函數為虛擬地址空間from和from+size之間的范圍構造頁表;to是虛擬地址應該映射到的物理地址;size是被映射區域的大小;prot是保護標志。
本文介紹了一種基于ARM+FPGA組合方式的衛星導航接收機設計方案,ARM處理器體積小、功耗低、性能高,控制接收機的整體流程;FPGA費用低、硬件資源豐富,可以實現大規模的數據運算,適用于基帶處理模塊的設計。ARM與FPGA之間采用GPMC的16位總線傳輸方式進行通信,傳輸速度快。在Ubuntu下進行了驅動程序的編寫,這樣ARM就可以通過調用FPGA驅動程序進行數據的傳輸。此架構在成本和實時性上具有一定的實用價值。
[1]趙愛萍.基于ARM的嵌入式系統開發及其在GPS接收機中的應用研究[D].西安:中國科學院國家授時中心,2006.
[2]沈孝龍.基于ARM+FPGA的北斗導航終端的研究與設計[D].南京:南京理工大學,2014.
[3]邢增強.基于ARM+FPGA的GPS接收機設計[J].傳感器與微系統,2011,30(7):108-110.
[4]賀陽.BD2接收機基帶系統的FPGA設計與實現[D].武漢:武漢理工大學,2013.
[5]劉競超,鄧中亮.基于ARM+FPGA北斗接收機設計[J].軟件,2012,33(12):38-39.
[6]謝鋼.GPS原理與接收機設計[M].北京:電子工業出版社, 2011.
[7]楊樹偉.基于FPGA與DSP嵌入式北斗/GPS兼容型接收機設計與試驗[D].鎮江:江蘇科技大學,2012.
[8]付陽.基于ARM9的嵌入式Linux移植和驅動程序設計[D].武漢:華中科技大學,2012.
[9]劉剛,趙劍川.Linux系統移植[M].北京:清華大學出版社, 2011:26-30.
[10]程科.嵌入式Linux設備驅動程序的設計與研究[D].成都:電子科技大學,2007.
[11]弓雷.ARM嵌入式Linux系統開發詳解[M].2版.北京:清華大學出版社,2014.
[12]張淑梅.基于ARM+FPGA的高精度數據采集系統設計[J].國外電子測量技術,2014,33(11):63-64.
[13]朱曉鵬,肖鐵軍,趙蕙.ARM+FPGA的實時數據采集系統設計[J].計算機工程與設計,2009,30(13):3088-3090.
[14]mmap函數系統調用(內核空間到用戶空間的映射)[EB/ OL].[2016-04].http://blog.csdn.net/ahstusujian/article/details/8065810.
[15]關于驅動開發中mmap函數的實現[EB/OL].[2016-04].http://www.cnblogs.com/hoys/archive/2012/06/26/2563319. html.
李春明(副教授)、李雪燕(研究生),主要從事運動目標檢測、模式識別;王曉君(教授),主要研究方向為衛星應用技術。
(責任編輯:薛士然收修改稿日期: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