⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps.c

📁 ucosii在codefire系列的5222x上的移植
💻 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 + -