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?
Gast
#1326434
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)
Gast
#1326558
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
Gast
#1326570
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. ...
Gast
#1326574
Zumindest in ASM.
Gast
#1326578
Beispiel: (M644) asm: out portb, r16 = sts portb, r16 beide Anweisungen sind gleichwertig. wird übesetzt in: out 0x05, r16 = sts 0x25, r16 Z8
Gast
#1326622
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.