avr-libc
avr-libc copied to clipboard
[patch #6768] Addition to util/setbaud.h
Thu 05 Mar 2009 05:21:09 PM CET
I noticed that util/setbaud.h cannot calculate baudrate for sync mode.
I did the following modification to the file. I doubt it will it the next release, but I do beleive it is a good thing to have.
Basic explanation: if BAUD_SYNC is define and equal to 1, a modified macro is use to calculate baud rate. If BAUD_SYNC is define and equal to 0 or not define, macro works as before.
Modification should not break code that use the current version of setbaud.h.
Usage could be: #include <avr/io.h>
#define F_CPU 4000000
static void uart_9600(void) { #define BAUD_SYNC 1 #define BAUD 9600 Device specific declaration #define XCK_DDR DDRB//For ATmega16A #define XCK_DDx DDB0 #include <util/setbaud.h> UBRRH = UBRRH_VALUE; UBRRL = UBRRL_VALUE; UCSRC = _BV(1<<UMSEL); Configure as clock source XCK_DDR |= _BV(1<<XCK_DDx); }
This issue was migrated from https://savannah.nongnu.org/patch/?6768
Frédéric Nadeau
After reread, it should be:
UCSRC |= _BV(1<<UMSEL);
But I guess that most of you already spotted that.
Eric Weddington
Hi Frédéric,
On line 16 of this patch you are defining BAUD_SYNC to 0 in the header file. Then later on, you check to see if it is not defined, if so then define BAUD_SYNC to 0. Shouldn't that first definition on line 16 be removed?