現(xiàn)在臺灣聯(lián)發(fā)科大力發(fā)展國內的手機芯片,其價格低廉,性能穩(wěn)定為國內手機制造商帶來了福音。因此國內要大力發(fā)展MTK芯片,為國內的手機制造商提供好的平臺,而國外導航手機價格遠遠超出大多數(shù)國內消費者。這樣的背景導致國內IT公司花大量的資金投入,此課題也是基于此。
1導航核心算法設計
在各種不同的GPS導航儀器中,NMEA類型協(xié)議是一種協(xié)議基準。NMEA數(shù)據(jù)的獲取是通過GPS模塊來完成。課題MT6235芯片當中通過BB(基帶)預留的相應的UART口來與GPS模塊相連來獲取經(jīng)過GPS模塊加工處理過的NMEA數(shù)據(jù)。
在MT6235中,課題用函數(shù):
UART_Register(UART_PORT port,UartType_enum type,UartDriver_strcut* drv);
其中UartDriver_strcut是定義有關于串口的所有的集合。
(1)任務的建立
任務的建立顧名思義就是針對這款GPS模塊來建立相應的接口函數(shù),并且對收據(jù)進行接收與保存,通過下面的流程圖可以得出:
圖1NMEA數(shù)據(jù)獲取
其中所要做的就是對接口函數(shù)算法的研究與設計和對接收數(shù)據(jù)通過文件形式的保存。
首先要對接口進行配置,如下算法:
void UART_SetDCBConfig(UART_PORT port, UARTD-CBStruct *UART_Config, module_type ownerid)
{
if (port == uart_port_1) return;
ASSERT(UartHandle[port].drv->SetDCBConfig);
UartHandle [port].drv->SetDCBConfig (port,UART_Config, ownerid);
}
此算法就是特定GPS模塊配置的接口,其中此函數(shù)設置了端口,并且最重要的就是要配置相應GPS模塊的波特率,UARTDCBStruct這個就是GPS模塊LEA-5S配置相對應的波特率,以利于接收數(shù)據(jù),LEA-5S模塊要求的波特率為9600波特/秒,因此設置的波特率為UART_BORT_9600。
(2)數(shù)據(jù)的加工
為了不丟失其中的數(shù)據(jù),課題定義了一個緩沖空間,BUFFER,定義此緩沖空間的目的是為了將先來的數(shù)據(jù)存儲在緩沖空間當中,等待后續(xù)的數(shù)據(jù)。其中我們用UARTrx_buffer和UARTtx_buffer來對我們的接收(rx)和傳送(tx)數(shù)據(jù)進行操作。循環(huán)表結構如圖所示:
圖2NMEA數(shù)據(jù)處理
當信息MSG_ID_UART_READY_TO_WRITE_IND傳送來以后,底層驅動將把此信息保存在上述數(shù)組當中,通過*start指針指向接送來的數(shù)組的首地址,然后通過*read指針對指向其實地址的數(shù)據(jù)進行讀取,然后用*write指針將NMEA數(shù)據(jù)寫入UARTrx_buffer,并且當判斷是一個完成的字節(jié)數(shù)據(jù)后,就表示完成。
(3)數(shù)據(jù)消息的發(fā)送
當NMEA數(shù)據(jù)以文件的形式保存起來后,接著做的就是應用界面,信息的發(fā)送是通過NMEA的傳遞,其中此消息中GPS時間核心函數(shù)為:
void gps_utc_to_gpstime(kal_uint32 year, // Year
kal_uint8 mon,// Month: 1 ~ 12
kal_uint8 day,// Day: 1 ~ 31
kal_uint8 hour, // Hour: 0 ~ 23
kal_uint8 min,// Min: 0 ~ 59
kal_uint8 sec,// Sec
kal_int32* wn,// GPS Week Number
double*tow)// GPS Time of Week
2手機真機測試
打開工具FlashTool,Download后,會彈出一個對話框,然后將bin文件拖入即可,如下面所示:
真機下載成功后,導航界面如下圖:
3總結
通過手機真機白盒測試,手機導航界面完全滿足市場上消費者的需求,并且處理速度快,性能穩(wěn)定,必將在市場中占據(jù)一席之地。