Bei dem Register Summary des ATmega128 Datenblatts sind immer zwei verschiedene Adressen in einer Zeile angegeben. Beispiel: Adresse | Name | $3F ($5F) SREG $3E ($5E) SPH Warum gibt es verschiedene Adressen für das gleiche Register?
Der Unterschied wird in den 32 ($20) internen Registern liegen.
Das eine ist die I/O-Adresse, wie sie zB für IN/CBI/SBIC... anzugeben ist. Das andere ist die RAM-Adressem wie sie für STS... und Adressarithmetik (in avr-gcc) verwendet wird. Johann
hmm.. schrieb: > Der Unterschied wird in den 32 ($20) internen Registern liegen. Eigentlich sind doch alle Register des Mikrocontrollers intern? (Register befinden sich innerhalb des Míkrocontrollerbausteins) Es gab ja mal CPU's welche auf einen erweiterten Cache auf den Mainboard zurückgreifen konnten. Nur da macht eine Unterscheidung interne/externe Register für mich Sinn. Meinst du mit "interne Register" vielleicht Register welche nur der Mikrocontroller selbst verändern kann? (im Gegensatz zu Register welche vom Programmierer verändert werden können) Johann L. schrieb: > Das eine ist die I/O-Adresse, wie sie zB für IN/CBI/SBIC... anzugeben > ist. Das andere ist die RAM-Adressem wie sie für STS... und > Adressarithmetik (in avr-gcc) verwendet wird. > > Johann Was ist dann was? Ist die erste angegeben Adress die I/O Adresse? Oder ist die I/O Adresse die zweite Angegebene Adresse? (welche in Klammer hinter der ersten Adresse steht)
Hi >st die erste angegeben Adress die I/O Adresse? >Oder ist die I/O Adresse die zweite Angegebene Adresse? (welche in >Klammer hinter der ersten Adresse steht) Der Wert in der Klammer ist die absolute Adresse. Der Wert davor die IO-Adresse. Bei den AVRs befinden sich r0..r31, IO-Adressen und RAM im gleichen Adressraum. Bestimmte Befehle (z.B. in/out...) addieren beim Zugriff $20 zur angegebenen Adresse. Dadurch lässt sich der Adressbereich $20...$5F mit einer 6 Bit-Adresse ansprechen. MfG Spess
Du solltest mal (anhand des Datenblattes) den Unterschied ergründen zwischen: - unteren Allzweckregistern (r0-r15), darunter die Besonderheit von r0 und r1 - oberen Allzweckregistern (r16-r31), darunter die Pointer-Register - unteren 32 I/O-Registern (und ihren Zugriffsmöglichkeiten) - oberen 32 I/O-Registern (und ihren Zugriffsmöglichkeiten) - extended I/O-Bereich (mit seinen arg begrenzten Zugriffsmöglichkeiten) - SRAM Und dann solltest Du mal die Unterschiede zwischen IN, OUT und LD, LDD, LDS, ST, STD, STS, ergründen, dabei besonders auf die Adressierung achten. Ohne dieses Wissen über die AVR-Architektur wirst Du nicht so recht voran kommen. ...
Beispiel: (M644) asm: out portb, r16 = sts portb, r16 beide Anweisungen sind gleichwertig. wird übesetzt in: out 0x05, r16 = sts 0x25, r16 Z8
edit:
3. Zeile
> out portb, r16 = sts portb, r16
ist nonsens!
sts portb, r16 ; speichert den Wert aus r16 nicht an Adr. 0x25 sondern
; an Adr. 0x05
der Reset stimmt. sorry Z8
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.