Hi,
ich versuch grade den USART0 vom Atmega644P im 9 Bit Modus zu
initialisieren und hab wahrscheinlich mein Problem gefunden.
Im DB steht auf Seite 181 "If 9-bit characters are used (UCSZn=7)"
Ich wollte in meiner Naivität das ganze aufdröseln und UCSZ00 bis UCSZ02
einzeln setzen.
Nicht sicher ob die alle im selben Register stehen geh ich in die
Register Summary auf Seite 413.
Dort finde ich aber nur das Bit UCSZ02 in Register UCSR0B.
Ok schauen wir eben im Register UCSR0C -> Fehlanzeige.
und im Register UCSR0A -> Auch nix :(
Wo sind den die Bits UCSZ00 und UCSZ01 hingekommen?
Ist das tatsächlich ein Fehler im DB?
Hab dan nachher die Lösung auf den Seiten 190 und 191 gefunden.
Dort sind die einzelnen Zeilen der Register aufgeführt, aber anders als
in der Summary.
Die vermeintlich verschwunden Bits UCSZ00 und UCSZ01 sind im Register
UCSR0C.
Um zum Schluss noch sicher zu gehen, stimmt meine Initialisierung so:
1 | // MDB USART initialisieren 9,N,1
|
2 | void mdb_usart_init(void)
|
3 | {
|
4 | // Baudrate einstellen
|
5 | UBRR0H = (uint8_t) (UBRR_BAUD>>8);
|
6 | UBRR0L = (uint8_t) (UBRR_BAUD & 0x0ff);
|
7 |
|
8 | // Aktivieren von Receiver & Transmitter und RX Interrupt
|
9 | // Setzen des UCSZ02 für den 9 Bit Modus
|
10 | UCSR0B = (1<<RXEN0) | (1 << RXCIE0) | (1<<TXEN0) | (1<<UCSZ02);
|
11 |
|
12 | // Einstellen des Datenformats: 9 Datenbits, 1 Stoppbit
|
13 | UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
|
14 | }
|
Danke schon mal im Voraus
Elias