ATmega Registerbezeichnungen

Gast #6599922
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?
Gast #6599927
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...
Gast #6599945
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.
#6599946
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.
#6600110
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.