www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA644 SPI ..out of range...


Autor: Rookie644 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hilfe,

ich versuche mit AVR-Studio 4 SP4 die einfache Routine "schreiben" auf 
den SPI BUS.

Leider kommt beim erstellen immer ein Fehler!!!



.include "m644def.inc"     Version           : 2.24

sbis SPSR0,SPIF0


: error: Operand 1 out of range: 0x2d

SPSR0 hat wohl einen falschen Verweis?

Wer hat ähnliche Erfahrungen?

Gruß rookie...

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

sbis erwartet Register und Bitnummer...
Bitnummer ist 0...7

Laut Studio ist Operand 1, also SPIF0 = 0x2d, also außerhalb 0..7

Wer oder was ist SPIF0?

Gruß aus Berlin
Michael

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau Dir einfach mal die Adresse im Include oder Datenblatt an.

Die neueren AVRs haben viele IO-Register ins SRAM verlegt, d.h. sie sind 
dann nur noch per LDS/STS erreichbar.


Peter

Autor: Rookie644 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die schnellen Antworten.

In der include "m644def.inc" Datei stehen die Register jeweils immer nur 
mit der 0 deshalb SPIF0 usw.

Es kamen Fehlermeldungen weil die Registernamen nicht bekannt waren.

Hab ich vielleicht eine falsche ...inc?

.equ  SPDR0  = 0x2e
.equ  SPSR0  = 0x2d
.equ  SPCR0  = 0x2c

; SPSR0 - SPI Status Register
.equ  SPI2X0  = 0  ; Double SPI Speed Bit
.equ  WCOL0  = 6  ; Write Collision Flag
.equ  SPIF0  = 7  ; SPI Interrupt Flag

; SPCR0 - SPI Control Register
.equ  SPR00  = 0  ; SPI Clock Rate Select 0
.equ  SPR10  = 1  ; SPI Clock Rate Select 1
.equ  CPHA0  = 2  ; Clock Phase
.equ  CPOL0  = 3  ; Clock polarity
.equ  MSTR0  = 4  ; Master/Slave Select
.equ  DORD0  = 5  ; Data Order
.equ  SPE0  = 6  ; SPI Enable
.equ  SPIE0  = 7  ; SPI Interrupt Enable

Ich sehe den Wald vor lauter Bäumen nicht mehr.

Melde mich noch mal.
Vielen Danke erst einmal.


Gruß






Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Befehl sbis funktioniert nur mit den unteren 32 I/O-Registern (bis 
Adresse 0x1F). Deshalb auch die Fehlermeldung. Da steht eindeutig 
"Operand 1 out of range: 0x2d", und Operand 1 des Befehls ist die 
Registeradresse, die anscheinend sehr wohl bekannt ist, da der Assembler 
den Bezeichner korrekt mit 0x2d ersetzt hat.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Hab ich vielleicht eine falsche ...inc?

Nein.

Peter Dannegger wrote:
> Die neueren AVRs haben viele IO-Register ins SRAM verlegt, d.h. sie sind
> dann nur noch per LDS/STS erreichbar.


Man ersetze
sbis SPSR0,SPIF0

durch
lds r16, SPSR0
sbrs r16, (1<<SPIF0)

(Alle Angaben ohne Gewähr ;))

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstaunlich, dass ATMEL in der m644def.inc andere Registernamen benutzt 
als im Datenblatt (da heißen die Register SPSR, SPCR und SPDR, alles 
ohne die 0...). Die liegen aber alle noch im "normalen" I/O-Bereich, 
deshalb ist ein "lds" da nicht nötig. Da funktioniert auch noch "in" und 
"out".

Autor: Rookie644 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Denkanstöße!!

Es klappt jetzt alles wunderbar.
Der ATMEGA644 scheint wohl nicht der richtige AVR für ein Anfänger wie 
mich zu sein.

Aber learning bei doing war auch nicht schlecht.

Danke an das Forum!!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.