0,0 → 1,148 |
//***************************************************************************** |
// File Name : gpstest.c |
// |
// Title : example usage of gps processing library functions |
// Revision : 1.0 |
// Notes : |
// Target MCU : Atmel AVR series |
// Editor Tabs : 4 |
// |
// Revision History: |
// When Who Description of change |
// ----------- ----------- ----------------------- |
// 10-Sep-2002 pstang Created the program |
//***************************************************************************** |
|
//----- Include Files --------------------------------------------------------- |
#include <avr/io.h> // include I/O definitions (port names, pin names, etc) |
#include <avr/interrupt.h> // include interrupt support |
//#include <math.h> |
#include <stdlib.h> |
#include <stdio.h> |
|
#include "global.h" // include our global settings |
#include "uart2.h" // include dual-uart function library |
#include "rprintf.h" // include printf function library |
#include "timer.h" // include timer function library (timing, PWM, etc) |
#include "gps.h" // include gps data support |
#include "tsip.h" // include TSIP gps packet handling |
#include "nmea.h" // include NMEA gps packet handling |
#include "vt100.h" // include VT100 terminal commands |
|
#include <util/delay.h> |
|
|
// LCD Library |
#include "lcd_hd44780.h" |
|
static int lcd_putc_stream(char c, FILE *unused) |
{ |
return lcd_putc(c); |
} |
|
// Define Output Stream to LCD |
static FILE lcd_stream = FDEV_SETUP_STREAM(lcd_putc_stream, NULL, _FDEV_SETUP_WRITE); |
|
// uartRxOverflow is a global variable defined in uart.c/uart2.c |
// we define it here as <extern> here so that we can use its value |
// in code contained in this file |
extern unsigned short uartRxOverflow[2]; |
|
void gpsTsipTest(void); |
void gpsNmeaTest(void); |
|
|
//----- Begin Code ------------------------------------------------------------ |
int main(void) |
{ |
sbi(DDRC, 0); // sets PC0 to be an output |
cbi(PORTC, 0); // sets PC0 to output a HIGH |
_delay_ms(100); |
sbi(PORTC, 0); // sets PC0 to output a LOW |
_delay_ms(100); |
cbi(PORTC, 0); // sets PC0 to output a HIGH |
_delay_ms(100); |
sbi(PORTC, 0); // sets PC0 to output a LOW |
_delay_ms(100); |
// initialize our libraries |
// initialize the UART (serial port) |
// uartInit(); |
uart1Init(); |
|
sbi(DDRC, 1); // sets PC0 to be an output |
cbi(PORTC, 1); // sets PC0 to output a HIGH |
_delay_ms(100); |
sbi(PORTC, 1); // sets PC0 to output a LOW |
_delay_ms(100); |
cbi(PORTC, 1); // sets PC0 to output a HIGH |
_delay_ms(100); |
sbi(PORTC, 1); // sets PC0 to output a LOW |
_delay_ms(100); |
|
// set the baud rate of UART 0 for our debug/reporting output |
// uartSetBaudRate(0,9600); |
// set uart0SendByte as the output for all rprintf statements |
// rprintfInit(uart0SendByte); |
|
// initialize the timer system |
timerInit(); |
// initialize vt100 library |
// vt100Init(); |
|
// print a little intro message so we know things are working |
// vt100ClearScreen(); |
// rprintf("\r\nWelcome to GPS Test!\r\n"); |
// timerPause(1000); |
|
lcd_init(); // Init LCD (interface and display module) |
rprintfInit(lcd_putc); |
rprintfProgStrM("Ahoj..."); rprintfCRLF(); |
_delay_ms(500); |
lcd_clear(); |
|
// run example gps processing loop |
// (pick the one appropriate for your GPS packet format) |
gpsNmeaTest(); |
|
return 0; |
} |
|
|
void gpsNmeaTest(void) |
{ |
// set the baud rate of UART 1 for NMEA |
uartSetBaudRate(1,4800); |
|
// clear screen |
// vt100ClearScreen(); |
// initialize gps library |
gpsInit(); |
// initialize gps packet decoder |
nmeaInit(); |
|
/* |
DDRA = 0b11110101; // sets PA0 O, PA1 I, PA2 O |
cbi(PORTA, 0); // sets PC0 to output a LOW |
sbi(PORTA, 2); // sets PC2 to output a HIGH |
*/ |
DDRD = 0b10100000; // sets PD7 O, PD6 I, PD5 O |
cbi(PORTD, 7); // sets PD7 to output a LOW |
sbi(PORTD, 5); // sets PD5 to output a HIGH |
|
// begin gps packet processing loop |
while(1) |
{ |
// process received gps packets until receive buffer is exhausted |
while( nmeaProcess(uartGetRxBuffer(1))== NMEA_NODATA); |
if((inb(PIND) & 0b01000000)==0) |
gpsInfoPrintLCD(); |
else |
gpsInfoPrintLCD2(); |
|
sbi(DDRC, 0); // sets PC0 to be an output |
cbi(PORTC, 0); // sets PC0 to output a LOW |
_delay_ms(5); |
sbi(PORTC, 0); // sets PC0 to output a HIGH |
} |
} |
|