Hallo zusammen,
ich bastel mit einem ATMega32 und Peter Fleury's uart lib herum. Dabei
kommt es zu einem folgeschweren Rechenfehler bei der Berechnung der
Baudrate. Ein UART_BAUD_RATE von 9600 wird zu dem Wert, der die
vierfache Baudrate von 38400 (UBRR = 6 @ 4MHz) einstellt, 2400 wird zu
9600 Baud (UBRR = 25 @ 4MHz) etc.
Eine doppelte Vergabe von Namen kann ich ausschliessen, lediglich XTAL
und xtalCpu werden verwendet.
Nun meine Fragen:
1. Wie kann ich dem Compiler bei der Arbeit zusehen, um festzustellen,
wie der Rechenfehler zustande kommt?
2. Hat jemand einen heissen Tip, wo ich noch suchen kann?
Den Codeausschnitt habe ich angehängt (allesamt aus der Fleury-lib):
1 | #define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu)/((baudRate)*16l)-1)
|
2 |
|
3 |
|
4 | #ifndef F_CPU
|
5 | #define F_CPU 4000000UL
|
6 | #endif
|
7 |
|
8 | /* 9600 baud */
|
9 | #define UART_BAUD_RATE 9600
|
10 |
|
11 | void UsartInit(){
|
12 | uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
|
Bin gespannt auf eure Ratschläge!
Gruß,
Christian