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
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
Markus wrote: > 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 in/out: 1 Taktzyklus lds/sts: 2 Taktzyklen
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.