write gps time to rtc
This commit is contained in:
@@ -4,5 +4,6 @@
|
||||
#include <avr/io.h>
|
||||
|
||||
uint32_t DS3231_read(void);
|
||||
void DS3231_write(uint8_t inbuffer[3]);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -15,3 +15,12 @@ uint32_t DS3231_read(){
|
||||
i2c_stop();
|
||||
return ((uint32_t)std<<16) | ((uint32_t)min<<8) | sec;
|
||||
}
|
||||
|
||||
void DS3231_write(uint8_t inbuffer[3]){
|
||||
i2c_start_wait(0xD0);
|
||||
i2c_write(0x00);
|
||||
i2c_write(inbuffer[0]);
|
||||
i2c_write(inbuffer[1]);
|
||||
i2c_write(inbuffer[2]);
|
||||
i2c_stop();
|
||||
}
|
||||
|
||||
@@ -42,14 +42,14 @@ uint8_t parse_nmea_gps(char input_string[RX_INPUT_BUFFER_SIZE], uint8_t output_b
|
||||
}
|
||||
|
||||
// craft bcd values
|
||||
output_buffer[0] = (time[0] - 48) << 4;
|
||||
output_buffer[0] |= time[1] - 48;
|
||||
output_buffer[2] = (time[0] - 48) << 4;
|
||||
output_buffer[2] |= time[1] - 48;
|
||||
|
||||
output_buffer[1] = (time[2] - 48) << 4;
|
||||
output_buffer[1] |= time[3] - 48;
|
||||
|
||||
output_buffer[2] = (time[4] - 48) << 4;
|
||||
output_buffer[2] |= time[5] - 48;
|
||||
output_buffer[0] = (time[4] - 48) << 4;
|
||||
output_buffer[0] |= time[5] - 48;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -262,8 +262,10 @@ ISR(USART0_RX_vect)
|
||||
async_buffer_pointer=0;
|
||||
PORTB ^=STATUS_LED_C;
|
||||
uint8_t test[3];
|
||||
if(!parse_nmea_gps(async_input_buffer, test))
|
||||
printf("parse: %x %x %x\n\r", test[0], test[1], test[2]);
|
||||
if(!parse_nmea_gps(async_input_buffer, test)){
|
||||
printf("parse: %x %x %x\n\r", test[2], test[1], test[0]);
|
||||
DS3231_write(test);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user