/* This file is part of the AVR-uart_ni. Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de) 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 . */ /* #include */ /* we use a modifyed version of util/setbaud where the UL suffix is removed * since the preprocessor can not handle that. */ #ifndef F_CPU # error "uart_i requires F_CPU to be defined" #endif #ifndef BAUD # error "uart_i requires UART0_BAUD_RATE to be defined" #endif #if !(F_CPU) # error "F_CPU must be a constant value" #endif #if !(BAUD) # error "UART0_BAUD_RATE must be a constant value" #endif #undef USE_2X /* Baud rate tolerance is 2 % unless previously defined */ #ifndef BAUD_TOL # define BAUD_TOL 2 #endif #define UBRR_VALUE (((F_CPU) + 8 * (BAUD)) / (16 * (BAUD)) -1) #if 100 * (F_CPU) > \ (16 * ((UBRR_VALUE) + 1)) * (100 * (BAUD) + (BAUD) * (BAUD_TOL)) # define USE_2X 1 #elif 100 * (F_CPU) < \ (16 * ((UBRR_VALUE) + 1)) * (100 * (BAUD) - (BAUD) * (BAUD_TOL)) # define USE_2X 1 #else # define USE_2X 0 #endif #if USE_2X /* U2X required, recalculate */ #undef UBRR_VALUE #define UBRR_VALUE (((F_CPU) + 4 * (BAUD)) / (8 * (BAUD)) -1) #if 100 * (F_CPU) > \ (8 * ((UBRR_VALUE) + 1)) * (100 * (BAUD) + (BAUD) * (BAUD_TOL)) # warning "Baud rate achieved is higher than allowed" #endif #if 100 * (F_CPU) < \ (8 * ((UBRR_VALUE) + 1)) * (100 * (BAUD) - (BAUD) * (BAUD_TOL)) # warning "Baud rate achieved is lower than allowed" #endif #endif /* USE_U2X */ #ifdef UBRR_VALUE # define UBRRL_VALUE ((UBRR_VALUE) & 0xff) # define UBRRH_VALUE ((UBRR_VALUE) >> 8) #endif