Forum: Mikrocontroller und Digitale Elektronik ATmega Registerbezeichnungen


von Johnny W. (Gast)


Lesenswert?

Nabend!
Bin gerade dabei, mit einem ATmega324 über SPI zu kommunizieren. Laut 
Datenblatt ist dazu u.A. das SPE-Bit im Register SPCR zu setzen. Soweit 
so gut.

Nun bekomme ich im MicrochipStudio den Fehler "'SPCR' undeclared (first 
use in this function)" in der entsprechenden Zeile:
1
SPCR = (1<<SPIE) | (1<<SPE) | (1<<MSTR) | (1<<SPR0) | (1 << SPR1);

Wenn ich jedoch den Register-/Bit-Bezeichnern eine Null anhänge (d.h. 
von "SPCR" zu "SPCR0" ändere), klappt es problemlos:
1
SPCR0 = (1<<SPIE0) | (1<<SPE0) | (1<<MSTR0) | (1<<SPR00) | (1 << SPR10);

Im Datenblatt steht dazu kein Wort, die Zeichenkette "SPCR0" ist sogar 
im ganzen Datenblatt nicht zu finden.
Daher meine Frage: Warum weichen die Bezeichner vom Datenblatt ab und wo 
finde ich die korrekten Bezeichner?

von c-hater (Gast)


Lesenswert?

Johnny W. schrieb:

> Im Datenblatt steht dazu kein Wort

Doch.

> die Zeichenkette "SPCR0" ist sogar
> im ganzen Datenblatt nicht zu finden.

Das stimmt.

> Daher meine Frage: Warum weichen die Bezeichner vom Datenblatt ab

Tun sie nicht wirklich.

> und wo
> finde ich die korrekten Bezeichner?

Durch Lesen dessen, was da steht und minimale geistige Transferleistung 
auf dem Level eines Grundschülers...

von Wolfgang (Gast)


Lesenswert?

Johnny W. schrieb:
> Daher meine Frage: Warum weichen die Bezeichner vom Datenblatt ab und wo
> finde ich die korrekten Bezeichner?

Weil die von dir genutzte Software die Dinger anders benannt hat. 
Manchmal passiert das, um innerhalb einer Prozessorfamilie kompatibel zu 
sein.

von Steffen H. (avrsteffen)


Lesenswert?

In dem Datenblatt steht dazu sicherlich SPCRn oder so. Und genau so ist 
es bei den Bit Bezeichnungen - SPIEn; SPEn; MSTRn; SPRn0; SPRn1 usw.

Da es inzwischen mehrere Instanzen der Schnittstellen in manchen AVR's 
geben kann muss man doch nicht für jede Instanz das gleiche nochmal 
schreiben. Zum Beispiel für den SPI0 gilt ja das gleiche wie für einen 
SPI1 oder SPI2. Das "n" steht einfach nur für die Instanz in deinem AVR.

: Bearbeitet durch User
von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,

schaue Dir mal die include-Datei z.B. m324xxxx oder so ähnlich wird sie 
wohl heißen an, die Dein Compiler benutzt. Dort stehen die Bezeichner 
aller Register, Pins und IRQs drin, die ihm bekannt sind.


Mfg

von Oliver S. (oliverso)


Lesenswert?

Die Header werden automatisch aus Atmel/Microchips Daten erzeugt. Die 
sind halt manchmal leicht inkorrekt...

Oliver

von c-hater (Gast)


Lesenswert?

Oliver S. schrieb:

> Die Header werden automatisch aus Atmel/Microchips Daten erzeugt. Die
> sind halt manchmal leicht inkorrekt...

Das ist zwar wahr, aber hier sicher nicht das Problem...

von Sebastian W. (wangnick)


Lesenswert?

c-hater schrieb:
> Das ist zwar wahr, aber hier sicher nicht das Problem...

Doch, anscheinend hat die Einführung der zweiten SPI-Schnittstelle 
einiges in den io*.h-Dateien und den Datenblättern 
durcheinandergewirbelt. Das Datenblatt des Atmega328PB ist auch so ein 
Kandidat: Im Text steht oft noch SPCR statt SPCRn.

LG, Sebastian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.