Forum: Compiler & IDEs UART Register


von Mario (Gast)


Lesenswert?

Hallo,

ich möchte ein bestehendes Programm vom Mega16 auf einem Mega 164 
portieren, dabei bin ich auf Probleme beim Ansteuern der U(S)ART 
gestossen. Beim schreiben in das Register UCSR0C wird auch das High-Byte 
der Register UBRR0H überschrieben. Beim Mega16 konnte man dies ja über 
das Bit URSEL beeinflussen.

C-Code:

UBRR0 = (uint16_t) (F_CPU / (16*Baud) - 1);  // Baurate berechnen

UCSR0C = (1<<USBS0)|(3<<UCSZ00);    // Frame 8 Data , 2 Stop

Wo liegt mein Fehler ?

Danke.

Mario

: Gesperrt durch Moderator
von Oliver (Gast)


Lesenswert?

Bits und Register der USART wurden bei den neueren AVRs neu gemischt.

Also: RTFM

Was ist danach noch unklar?

Oliver

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Wo liegt mein Fehler ?
Dein Fehler liegt in erster Linie darin, dass du irgendwelche 
Registereinstellungen portieren willst. Sinnvoller ist es, die 
Funktion zu portieren.

Also: sieh nach, wie die U(S)ART beim Mega16 eingestellt war, und 
schreib die Einstellungen (Baudrate, Stop-Bits...) auf ein Blatt Papier.
Und dann nimm das Datenblatt vom Mega164 her und sieh nach, wie du 
dessen Register einstellen mußt, um diese Betriebsart zu bekommen.

von Mario (Gast)


Lesenswert?

Hallo,

schon einmal danke für die Antworten. Mein Problem liegt nicht im 
anpassen der  Registerinhalte. Die Frage ist warum wird das 
UBRR0H-Register bei einem Schreibzugriff auf das UCSR0C überschrieben.

Danke

Mario

von Stefan E. (sternst)


Lesenswert?

Mario schrieb:

> Die Frage ist warum wird das
> UBRR0H-Register bei einem Schreibzugriff auf das UCSR0C überschrieben.

Wird es nicht.
Wenn du anderer Meinung bist, dann beschreibe mal detailliert, wie du zu 
der Schlussfolgerung kommst.

Edit: Und Crossposten ist bäh:
Beitrag "UART Mega 164P"
Die Antwort von Jörg dort, der ebenfalls nachfragt, wie du darauf 
kommst, hat dir nicht gefallen? Also hast du statt darauf zu antworten 
hier nochmal das gleiche gepostet?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan Ernst schrieb:

> Edit: Und Crossposten ist bäh:
> Beitrag "UART Mega 164P"

Er hat es ins falsche Forum gepostet, und ich hatte es verschoben.
Da er zu faul, ängstlich oder was auch immer war, eine Mailadresse
beim Posten zu hinterlegen, hat er die Verschiebung nicht bemerkt
und stattdessen den ganzen Käse nochmal angefangen.

Leute, die Frage nach der Mailadresse ist in eurem Interesse.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.