/*
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