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
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/DOC0856.PDF Gruß, Arno
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.
Inzwischen hab ich den Unterschied glaub ich verstanden, danke für den Hinweis. mfg Christian
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.