]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/serial.c
env var fmon (F_CPU)
[z180-stamp.git] / avr / serial.c
index e897c84b41077088025dc1204984f0420923f543..d3aeb4ea90511d97f4530e98dcd5203cd1a77a78 100644 (file)
@@ -1,4 +1,7 @@
 /*
+ * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <avr/io.h>
@@ -12,7 +15,7 @@
 
 
 static int _write(char c, FILE *stream);
-static FILE mystdout = FDEV_SETUP_STREAM(_write, 
+static FILE mystdout = FDEV_SETUP_STREAM(_write,
                NULL, _FDEV_SETUP_WRITE);
 
 
@@ -24,7 +27,7 @@ static FILE mystdout = FDEV_SETUP_STREAM(_write,
 #endif
 
 #if ((BUFFER_SIZE) > 256)
-# error: BUFFER_SIZE 
+# error: BUFFER_SIZE
 #endif
 
 struct ring rx_ring;
@@ -42,15 +45,14 @@ void usart0_setup(unsigned long baud) {
 
                PRR0 &= ~_BV(PRUSART0);
                UCSR0B = 0;
+               UCSR0A = 0;
+               UBRR0  = (F_CPU + (baud/2) + 8) / baud / 16 - 1;
+               UCSR0B = _BV(RXCIE0) | _BV(RXEN0) | _BV(TXEN0);
+               UCSR0C = 3 << UCSZ00;
 
                /* Initialize ring buffers. */
                ring_init(&rx_ring, rx_ring_buffer, BUFFER_SIZE);
                ring_init(&tx_ring, tx_ring_buffer, BUFFER_SIZE);
-
-               UCSR0A = 0;
-               UBRR0  = F_CPU / baud / 16 - 1;
-               UCSR0B = _BV(RXCIE0) | _BV(RXEN0) | _BV(TXEN0);
-               UCSR0C = 3 << UCSZ00;
        };
 }
 
@@ -119,5 +121,3 @@ uint_fast8_t serial_tstc(void)
 {
        return !ring_is_empty(&rx_ring);
 }
-
-