mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verwendung von lds und in


Autor: Christian Widtmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe eine Frage zu den Assembler-Befehlen lds und in, und zwar
welcher Befehl ist auf welche Register anwendbar? Speziell geht es um
einen Atmega16.
MCUCR ist z.B. mit lds ansprechbar, ebenso GICR und GIFR, ACSR benötigt
aber in. Woran kann ich erkennen, welches Register in den Speicher
gemappt wird und welches nicht? Bzw. ist es das sicherste, einfach alle
Steuer- und Kontroll-Register mit "in" einzulesen? Wohin werden die
verschiedenen Register gemappt? Das Manual konnte mich da leider nicht
hinreichend aufklären.

mfg
Christian

Autor: Conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Der Befehl "lds" läd vom SRam und der Befehl "in" läd
von den Ports.

Erklärungen zu den Befehlen findest du hier:

http://www.atmel.com/dyn/resources/prod_documents/...

Gruß,
Arno

Autor: Christian Widtmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber warum kann ich dann manche Steuerregister mit lds einlesen, und
andere wiederum nur mit in? Das ist mir bei der Sache nicht ganz klar.
Werden die Register nicht alle in den data space gemappt, gleich nach
den 32 general purpose Registern?
ACSR z.B. hat sich geweigert, mit lds gelesen zu werden, obwohl es doch
in dieselbe Klasse von Registern fällt wie GICR und GIFR, die sich
problemlos mit lds lesen lassen.

Autor: Christian Widtmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Inzwischen hab ich den Unterschied glaub ich verstanden, danke für den
Hinweis.

mfg
Christian

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die IO-Register werden übrigens allesamt in den data space gemappt.
Allerdings kostet der Zugriff über dieses MMIO (memory-mapped IO)
Interface einige Befehle/Taktzyklen mehr, der über IN/OUT ist
schneller.  Andererseits ist der Adreßraum für IN/OUT eingeschränkt,
so daß Atmel dort nur die Register zugreifbar gemacht hat, die man
häufig benötigt (insbesondere PORTn/DDRn/PINn, SREG, SP etc.), während
MMIO alle Ports addressieren kann.

AVR-GCC fährt daher auch die policy, erstmal alle IO-Register als MMIO
anzusehen und dann in der Optimierungsphase zu entscheiden, ob der
schnellere Zugriff via IN/OUT stattdessen genutzt werden kann.

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.