📄 gps.c
字号:
#include "mcf5xxx.h"
#include "mcf5222x.h"
#include "mwerks.h"
#include "m5222x_evb.h"
#include "INCLUDES.H"
#include "uart.h"
OS_STK AppTaskGpsStk[256];
extern OS_EVENT *sem_gps;
INT8U Gps_data_buffer[100] = {0};
const INT8U buffer[21] =
{
'h','f','u','t',',','h','f','u','t','A','0','0','0','0','0','1',',','G','P','S'
};
INT8U GPS_head[21]= // 15309691718 original number
{
"hfut,15301234567,GPS"
};
INT8U Gps_data;
INT8U ReceivingFlag = 0;
INT8U Bytes_counter = 0;
INT8U Command = 0;
INT8U Segment;
INT8U comma = 0;
INT8U count;
void cdma_send1(int num);
void gps_int_init(void);
void AppTaskGps (void * pdata)
{
INT8U err;
int buf_len;
pdata = pdata;
OSSemPend (sem_gps,0,&err);
gps_int_init();
while(1)
{
OSSemPend (sem_gps,0,&err);
buf_len = strlen ((const char *) Gps_data_buffer);
cdma_send1(buf_len);
OSTimeDly(200);
}
}
__interrupt__
void gps_receive_interrupt(void) //接收GPS 数据:get GPS DATA from GPS module
{
MCF_INTC0_IMRL |= 0x00002000; //disable interrupt uart0
Gps_data = uart_getchar(0);
if(Gps_data == '$') //????
{
ReceivingFlag = 1;
Bytes_counter = 0;
Segment = 1;
MCF_INTC0_IMRL &= ~0x00002000; //enable interrupt
return;
}
if(ReceivingFlag)
{
++Bytes_counter;
if((Segment == 1)&&(Bytes_counter == 5))
{
if(Gps_data == 'C')
{
Bytes_counter = 0;
Segment = 0;
Command = 1;
comma = 0;
count = 0;
MCF_INTC0_IMRL &= ~0x00002000; //enable interrupt
return;
}
else
{
ReceivingFlag = 0;
MCF_INTC0_IMRL &= ~0x00002000; //enable interrupt
return;
}
}
if(Gps_data == '*') //??????
{
ReceivingFlag = 0;
Command = 0;
OSSemPost (sem_gps);
}
if(Command)
{
if(Gps_data == ',')
++comma;
switch(comma)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 9:
Gps_data_buffer[count++] = Gps_data;
break;
default :
break;
}
}
}
MCF_INTC0_IMRL &= ~0x00002000; //enable interrupt
}
void cdma_send1(int num)
{
int f;
int k=num+30;
UBYTE n1,n2;
n1=(UBYTE)(k/256); //k????????
n2=k-(int)n1*256; //??????
uart_putchar(1,0xa5);
uart_putchar(1,0xc3);
uart_putchar(1,0x00);
uart_putchar(1,n1);
uart_putchar(1,n2);
uart_putchar(1,0x00);
for(f=0;f<20;f++)
uart_putchar(1,GPS_head[f]);
for(f=0;f<num;f++)
uart_putchar(1,Gps_data_buffer[f]);
uart_putchar(1,',');
uart_putchar(1,'#');
uart_putchar(1,0xa5);
uart_putchar(1,0x99);
}
void gps_int_init(void)
{
MCF_INTC0_ICR13 = 0x0E; // Int level 1 priority 1
MCF_INTC0_IMRH &= 0xFFFFFFFF; // Enable uart0 Int and Global Ints
MCF_INTC0_IMRL &= 0xFFFFDFFE;
OSVectSet(64+13, (void (*)(void))gps_receive_interrupt);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -