Assembler SPI routine läuft nicht

Gast #74485
Hi,

Ich habe folgendes Problem, ich habe in Assembler eine "Libary" für
ein disply geschrieben, nun möchte ich diese assembler routinen in C
nutzen, das funzt auch soweit, doch bei meiner SPI routine erhalte ich
immer noch einen Fehler: "Error: Number must be less than 32"

Hier die Routine:

spi_send:
      out  SPDR, r24
spi_send_0:    sbis  SPSR, SPIF  ;verursacht den Error
      rjmp  spi_send_0
      in  r24,SPDR
      ret

Was mache ich Falsch? Hat jemand von euch eine Idee??

Danke schonmal im Vorraus!

MFG Jörn
Gast #74486
Ich vermute Du versuchst für den MEGA169 zu übersetzen? Ist das so?

Bei diesem Prozessor ist das SPSR Register auf Adresse 0x2D (bei allen
anderen auf 0x0E).

sbis lässt als I/O-Register Operand aber leider nur Adressen bis 0x1f
zu. In diesem Fall mußt Du einen anderen Test machen (erst in Register
laden, dann testen über andi oder so)

hoffe ich konnte helfen
Berndt
Gast #74487
Hi,

erstmal danke für die Antwort! Das Programm ist für einen Mega162, und
das Programm konnte ich auch immer ohne Probleme mit dem ATMEL
Assembler kompiliren, das lief astrein. Doch jetzt macht der Assembler
von AVRGCC mucken! Hat wer eine fertige routine die das selbe macht wie
meine, nur das sie halt in AVRGCC läuft?

Außerdem verstehe ich nicht warum ich mein Assemblerprogramm was vorher
lief umschreiben muss, damit es in AVRGCC läuft, Assembler ist doch
Assembler oder??

MFG Jörn
Gast #74489
Hi,

Danke das hat mein Problem gelöst, doch welchen nachteil hat es wenn
man die "fauhle Variante wählt", für die ich mich wegen der
einfachheit halber entschieden habe?

MFG Jörn
Gast #74490
Bißchen unsauberer, außerdem verweist die Doku auf Möglichkeiten,
wie man mit der neuen Version bspw. für Register, die in
verschiedenen AVRs in verschiedenen Speicherbereichen liegen, dennoch
automatisch das richtige tun kann.  Das geht mit der faulen Variante
nicht.

Bezüglich ,,der Einfachheit halber'' -- sowas kann man ja in Makros
verstecken, dann ist das eine fast so einfach wie das andere.  Oder
man schreibt gleich in C. :-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 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.