/* * uart.c * * Created: 20.02.2019 20:50:13 * Author: jens */ #include #include #include "uart.h" void uart_init(uint32_t baudrate) { uint16_t prescale8 = UART_PRESCALE(baudrate, 8UL); uint16_t prescale16 = UART_PRESCALE(baudrate, 16UL); uint32_t baud8 = ((prescale8+1) * 8); uint32_t baud16 = ((prescale16+1) * 16); uint32_t err8 = abs(baudrate - baud8); uint32_t err16 = abs(baudrate - baud16); uint16_t prescale = prescale16; if (err8 < err16) { prescale = prescale8; // Double UART speed UCSR0A |= 1 << U2X0; } // Set baud rate UBRR0L = (uint8_t)prescale; UBRR0H = (uint8_t)(prescale >> 8); // Enable receiver and transmitter UCSR0B = (1<> 4) & 0xF); byte <<= 4; if (nibble < 10) c = nibble + '0'; else c = nibble + 'A' - 10; uart_putc(c); } } void print_word(uint16_t word) { int i; unsigned char c; for (i=0; i < 2; i++) { c = (char) (word >> 8); print_byte(c); word <<= 8; } }