Headerdatei für USART / ATMEGA644 gesucht

OP #1648332
Lesenswert?

Hallo,

welche Headerdatei gehört zu einem ATmega644 - P20, wenn man den USART
benutzen möchte? Im Manual steht leider nur von den part specific header 
files.

Die Initialisierung funktioniert nicht, weil schon
UBRRH1 / UBRRL1
(wie es es im Manual steht, im Forum fand ich auch die Bezeichnung
UBRR1H / UBRR1L)
vom Compiler als undeklariert zurückgewiesen wird.

Ich habe also mit der Suchfunktion im Verzeichnis WINAVR20100110 nach
UBRRH1 bzw. UBRR1H gesucht und nichts gefunden.
UBRRH würde ich finden - in Dateien mit iom..., allerdings nicht in 
einer, die iom644 heißt.
Dann habe ich nach uart /usart.h gesucht - nichts (außer an abseitiger 
Stelle uart).

In WinAVR scheint diese Headerdatei (noch?) nicht enthalten sein. Muß 
man sich die Headerdatei aus irgendwelchen anderen Quellen besorgen oder 
alles selbst definieren?

mfg
Alexander
#1648343
Lesenswert?

Alexander Schmeil schrieb:
> welche Headerdatei gehört zu einem ATmega644 - P20, wenn man den USART
> benutzen möchte?
1
#include <avr/io.h>

Alexander Schmeil schrieb:
> Die Initialisierung funktioniert nicht, weil schon
> UBRRH1 / UBRRL1
> (wie es es im Manual steht, im Forum fand ich auch die Bezeichnung
> UBRR1H / UBRR1L)
> vom Compiler als undeklariert zurückgewiesen wird.

Benutze die Bezeichnungen, wie sie im Datenblatt stehen. Wenn es dann 
Fehler gibt, hast du wahrscheinlich beim Compilieren nicht den richtigen 
µC-Typ angegeben.
#1648355
Lesenswert?

Hc Zimmerer schrieb:
> Nach Definitionen für den zweiten UART wirst Du beim 644 lange suchen
> können.  Den hat nur der 644*P*.  Kleiner Buchstabe, große Wirkung.

Kleiner Nachtrag:  Dass nach dem Bindestrich ein P steht, macht aus dem 
644 keinen 644P.  Dieses P bezeichnet nur die Gehäuseform.
OP #1648415
Lesenswert?

Stefan Ernst schrieb:
> Benutze die Bezeichnungen, wie sie im Datenblatt stehen. Wenn es dann
> Fehler gibt, hast du wahrscheinlich beim Compilieren nicht den richtigen
> µC-Typ angegeben.


<avr/io.h> ist vorhanden,
UBRRH0 bzw UBRRL0 steht in der Initialisierungsfunktion,
und in makefile steht
# MCU name
MCU = atmega644.

auf dem µP ist aufgedruckt
ATMEGA644
20PU
0842
(egal, wo das P ist, ich brauche nur einen UART).

Leider funktioniert es nicht.
#1648425
Lesenswert?

Alexander Schmeil schrieb:
> UBRRH0 bzw UBRRL0 steht in der Initialisierungsfunktion

Die Register heißen UBRR0H und UBRR0L. Die Datenblätter sind leider oft 
nicht konsistent in Bezug auf die Bezeichnungen in den Beispielen oder 
dem Fließtext. Entscheidend sind die Bezeichnungen bei der Beschreibung 
der Register:
1
18.11.5  UBRRnL and UBRRnH – USART Baud Rate Registers
oder in der Registerliste am Ende des Datenblattes:
1
(0xC5)UBRR0H ...
2
(0xC4)UBRR0L ...
OP #1649886
Lesenswert?

Stefan Ernst schrieb:
> oder in der Registerliste am Ende des Datenblattes:(0xC5)UBRR0H ...
> (0xC4)UBRR0L ...

Ich habe es geändert - und die anderen Registerbezeichnungen auch und 
nun mault der Compiler nicht mehr.

Es mußte ein Programm, das auf dem ATMEGA16 lief, auf einen ATMEGA644 
übertragen werden. Leider haben sich dabei manche Register- u. 
BitBezeichnungen geändert.
Außerdem mußte ich feststellen, daß mein Manual nicht konsistent ist 
(Mischung von ATmega644 und ATmega644P; ist inzwischen behoben)

Ist denn wenigstens mein Versuch,
die Übertragung auf asynchr. 8N1 einzustellen, gelungen?
1
 UCSR0C |=  (1<<UCSZ01) |(1<<UCSZ00) ;  // Asynchr 8N1 ???

Gruß
Alexander
#1649945
Lesenswert?

Alexander Schmeil schrieb:
> Ist denn wenigstens mein Versuch,
> die Übertragung auf asynchr. 8N1 einzustellen, gelungen?
1
>  UCSR0C |=  (1<<UCSZ01) |(1<<UCSZ00) ;  // Asynchr 8N1 ???

Ja. Ist aber andererseits auch komplett überflüssig. "Async 8N1" ist der 
Default-Inhalt des Registers.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren