?? main.c
字號:
/****************************************************************************/
/* */
/* FILE NAME VERSION */
/* */
/* GPRS.C 1.0 */
/* */
/* DESCRIPTION */
/* */
/* JX44B0(S3C44B0X)GPS全球定位實驗 */
/* */
/* */
/* DATA STRUCTURES */
/* */
/* FUNCTIONS : */
/* 在JX44B0教學實驗箱進行GPS全球定位實驗 */
/* */
/* DEPENDENCIES */
/* JX44B0-3 */
/* */
/* */
/* NAME: */
/* REMARKS: */
/* */
/* Copyright (C) 2003 Wuhan CVTECH CO.,LTD */
/****************************************************************************/
/****************************************************************************/
/* 學習JX44B0中全球定位功能的實現(xiàn)方法: */
/* 注意: */
/* 1. 該實驗僅僅適用于JX44B0-3實驗箱 */
/* 2. 實驗之前請閱讀用戶手冊,并進行正確的硬件連接 */
/* 3. 實驗過程的串口使用串口1,而不是串口0,這與其他實驗有差別, */
/* 而且波特率必須設置為4800 */
/****************************************************************************/
/* 包含文件 */
#include "2410addr.h"
#include "2410lib.h"
#include "gpslib.h"
/* defines */
#define GPS_CONTROL_ADDR 0x28000004
#define GPS_CONTROL_MASK_UART (3<<0)
#define GPS_RECV_CMD_MAX_BUF 10*1024
/* globals */
int gps_ctrl_value = 0x0;
char gps_recv_buf[GPS_RECV_CMD_MAX_BUF];
int gps_recv_read = 0;
int gps_recv_write = 0;
/********************************************************************
// Function name : gps_uart_ctrl
// Description : GPS使用串口0,串口1用于顯示,GPS初始化之前請
// 調用該函數(shù)進行初始化
// Return type : void
// Argument : int uart
*********************************************************************/
void gps_uart_ctrl(int uart)
{
gps_ctrl_value &= ~GPS_CONTROL_MASK_UART;
gps_ctrl_value |= uart;
*(unsigned char *)GPS_CONTROL_ADDR = gps_ctrl_value;
}
/********************************************************************
// Function name : gps_recv_char
// Description : 從GPS接收字符
// Return type : void
// Argument :
*********************************************************************/
void gps_recv_char()
{
char ch;
// select uart 0
Uart_Select(0);
// receive command
ch = Uart_GetKey();
if(ch == 0)
{
return;
}else
{
gps_recv_buf[gps_recv_write] = ch;
gps_recv_write ++;
if(gps_recv_write >= GPS_RECV_CMD_MAX_BUF)
gps_recv_write = 0;
}
}
/********************************************************************
// Function name : gps_recv_cmd
// Description : 接收GPS定位信息
// Return type : void
// Argument : char *cmd
*********************************************************************/
void gps_recv_cmd(char *cmd)
{
int loopcnt = 0;
while(1)
{
if(gps_recv_read == gps_recv_write)
{
gps_recv_char();
continue;
}
cmd[loopcnt ++] = gps_recv_buf[gps_recv_read];
if( (gps_recv_buf[gps_recv_read] == '\r') \
)
{
gps_recv_read ++;
if(gps_recv_read >= GPS_RECV_CMD_MAX_BUF)
gps_recv_read = 0;
cmd[loopcnt ++] = 0;
break;
}
gps_recv_read ++;
if(gps_recv_read >= GPS_RECV_CMD_MAX_BUF)
gps_recv_read = 0;
}
}
/********************************************************************
// Function name : TRACE_MSG
// Description : 打印衛(wèi)星定位信息
// Return type : void
// Argument : GPSINFO * pinfo
*********************************************************************/
void TRACE_MSG(GPSINFO * pinfo)
{
Uart_Select(1);
Uart_Printf("UTC時間:%d時%d分%d秒%d毫秒\n", pinfo->hour, pinfo->min, pinfo->sec, pinfo->secFrac);
Uart_Printf("北京時間:%d時%d分%d秒%d毫秒\n", pinfo->bjhour, pinfo->min, pinfo->sec, pinfo->secFrac);
Uart_Printf("緯度:%s緯%f\n", (pinfo->latNS == 'N' ? "北" : "南"), pinfo->latitude);
Uart_Printf("經(jīng)度:%s經(jīng)%f\n", (pinfo->lgtEW == 'E' ? "東" : "西"), pinfo->longitud);
Uart_Printf("\n");
}
/********************************************************************
// Function name : gps_proc
// Description : 接收GPS定位信息并解析
// Return type : void
// Argument :
*********************************************************************/
void gps_proc()
{
char cmd_str[1024];
char *pstr;
while (1)
{
GPSINFO info;
// GPS定位信息提取
gps_recv_cmd(cmd_str);
// GPS定位信息解析
GPSReceive(&info, cmd_str, strlen(cmd_str));
// 打印定位信息
if(info.bIsGPGGA ==1)
TRACE_MSG(&info);
}
}
/********************************************************************
// Function name : gps_init
// Description : GPS模塊初始化,波特率4800
// Return type : void
// Argument :
*********************************************************************/
void gps_init()
{
/* 配置系統(tǒng)時鐘 */
ChangeClockDivider(1,1); // 1:2:4
ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz
/* 初始化端口 */
Port_Init();
/* 初始化串口 */
Uart_Init(0,4800);
Uart_Select(0);
gps_uart_ctrl(0x2);
}
/********************************************************************
// Function name : Main
// Description : 主函數(shù)
// Return type : void
// Argument :
*********************************************************************/
void Main()
{
char ch;
/* 配置系統(tǒng)時鐘 */
ChangeClockDivider(1,1); // 1:2:4
ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz
/* 中斷初始化 */
Isr_Init();
/* 初始化端口 */
Port_Init();
/* 初始化串口 */
Uart_Init(0,115200);
Uart_Select(0);
// GPS初始化
gps_init();
Uart_Select(1);
Uart_Printf("GPS Test!\n");
// 開始GPS處理
gps_proc();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -