AVR: Newbie Fragen

Gast #711008
Lesenswert?

Hallo,

beschäftge mich seit kurzem mit dem AVR und habe ein paar "Newie" 
Fragen. Falls es eine FAQ gibt, die diese enthält bin ich auch für den 
Hinweis dankbar.

Habe schon vorher 6502 (C64) und 68000 (Amiga) inkl. der entsprechenden 
Peripheriebausteine in Assembler programmiert, beim AVR ist aber doch 
einiges etwas anders :-) Zum experimentieren nutze ich einen ATmega8515. 
So nun die Fragen:

Die Register r0..r31 werden ja auch im SRAM in den Adressen $0000-$001f 
abgebildet. Welchen praktischen Nutzen hat das denn?

Im Speicherbereich $0020-$005f sind ja auch die I/O-Register gemappt. 
Welchen Unterschied macht es denn, ob ich IN/OUT bzw. LDS/STS für den 
Zugriff verwende? Also z.B.

in r16, $00
oder
lds r16, $0020

Ciao...
Markus
#711119
Lesenswert?

Hallo,

warum Atmel das so gemacht hat, wird wohl nur Atmel selbst wissen. ;)

Wenn Du 6502/68000 progranniert hast, sag ich es mal so:

In Deinem Beispiel macht es keinen Unterschied, ob Du memory-mapped oder 
über die IO-Befehle zugreifst.

Aber: es gibt Befehle, die nur als IO-Zugriff existieren (SBI/CBI) als 
Beispiel), die das Leben auf dem AVR erleichtern.

Wenn Du memory-mapped zugreifst, mußt Du den Wert erst in ein Register 
holen, ändern und zurück schreiben.

Andererseits kann man mit den Speicherzugriffen auf Register indiziert 
über X/Y/Z zugreifen, was bei bestimmten Sachen (Rechnerei in Registern) 
das Assembler-Leben vereinfachen kann.

Man findet da auch in den AVR-AppNotes von Atmel Beispiele dazu.

Gruß aus Berlin
Michael

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren