/** * (C) Copyright Collin J. Doering 2015 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * File: USART.c * Author: Collin J. Doering * Date: Oct 6, 2015 */ #include #include "USART.h" #include #ifndef BAUD /* if not defined in Makefile... */ #define BAUD 9600 /* set a safe default baud rate */ #endif void initUSART(void) { /* requires BAUD */ UBRR0H = UBRRH_VALUE; /* defined in setbaud.h */ UBRR0L = UBRRL_VALUE; #if USE_2X UCSR0A |= (1 << U2X0); #else UCSR0A &= ~(1 << U2X0); #endif /* Enable USART transmitter/receiver */ UCSR0B = (1 << TXEN0) | (1 << RXEN0); UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); /* 8 data bits, 1 stop bit */ } void transmitByte(uint8_t data) { /* Wait for empty transmit buffer */ loop_until_bit_is_set(UCSR0A, UDRE0); UDR0 = data; /* send data */ } void transmitString(const char* data) { while (*data != '\0') { transmitByte(*data); data++; } } uint8_t receiveByte(void) { loop_until_bit_is_set(UCSR0A, RXC0); /* Wait for incoming data */ return UDR0; /* return register value */ }