Fixed serial.c after tests on real hardware

This commit is contained in:
Simen Svale Skogsrud 2011-06-05 20:54:23 +02:00
parent 74db3e6c5b
commit 553c44a93f
2 changed files with 10 additions and 7 deletions

4
main.c
View File

@ -36,6 +36,8 @@
int main(void)
{
sei();
serial_init(BAUD_RATE);
protocol_init();
settings_init();
@ -45,8 +47,6 @@ int main(void)
gc_init();
limits_init();
sei();
for(;;){
sleep_mode(); // Wait for it ...
protocol_process(); // ... process the serial protocol

View File

@ -42,11 +42,15 @@ uint8_t tx_buffer[TX_BUFFER_SIZE];
uint8_t tx_buffer_head = 0;
volatile uint8_t tx_buffer_tail = 0;
static void set_baud_rate(long baud) {
uint16_t UBRR0_value = ((F_CPU / 16 + baud / 2) / baud - 1);
UBRR0H = UBRR0_value >> 8;
UBRR0L = UBRR0_value;
}
void serial_init(long baud)
{
UBRR0H = ((F_CPU / 16 + baud / 2) / baud - 1) >> 8;
UBRR0L = ((F_CPU / 16 + baud / 2) / baud - 1);
set_baud_rate(baud);
/* baud doubler off - Only needed on Uno XXX */
UCSR0A &= ~(1 << U2X0);
@ -96,8 +100,7 @@ SIGNAL(USART_UDRE_vect) {
uint8_t serial_read()
{
if (rx_buffer_head != rx_buffer_tail) {
// Return magic number if no data pending
if (rx_buffer_head == rx_buffer_tail) {
return SERIAL_NO_DATA;
} else {
uint8_t data = rx_buffer[rx_buffer_tail];