#DEFINE SIZE_BUFFER_UART1 200 // Serial Buffer Size
#DEFINE SIZE_BUFFER_GPRMC 80 // Serial Buffer Size
enum letras
{
PRIMER_LETRA, // $
LETRA_G, // G
LETRA_P, // P
LETRA_R, // R
LETRA_M, // M
LETRA_C, // C
RESTANTE // .....
};
enum letras estado;
int counter_read2 = 0x00; // Serial Buffer Counter
char c=0x00;
char GPRMC_buff[SIZE_BUFFER_GPRMC];
char Receive_String_uart1[SIZE_BUFFER_UART1]; // Serial Buffer
#INT_RDA
void RDA_isr1() {
switch(estado){
case PRIMER_LETRA
: if(getchar(GPS
)=='$') estado
= LETRA_G
; break; case LETRA_G
: if(getchar(GPS
)=='G') estado
= LETRA_P
; break; case LETRA_P
: if(getchar(GPS
)=='P') estado
= LETRA_R
; break; case LETRA_R
: if(getchar(GPS
)=='R') estado
= LETRA_M
; break; case LETRA_M
: if(getchar(GPS
)=='M') estado
= LETRA_C
; break; case LETRA_C
: if(getchar(GPS
)=='C') estado
= RESTANTE
; counter_read2 = 0x00; break;
case RESTANTE:
if(c == '$'){ // Proximo "$"
disable_interrupts(INT_RDA);
memcpy(GPRMC_buff
,Receive_String_uart1
,SIZE_BUFFER_UART1
); estado = LETRA_G;
break;
}
Receive_String_uart1[counter_read2]=c;
counter_read2++;
break;
default: estado = PRIMER_LETRA; break;
}
}