Hallo, hab zur Programmierung der AVRs mal ne Frage. Laut Datenblatt ist der Adressraum ja wie folgt unterteilt: 0000..001F: 32 General Purpose Register (R0..R16) 0020..005F: 64 IO Register ab 0060: interner bzw. externern RAM Kann man dann auf die Register auch über den Speicher zugreifen? Quasi lds r16,4 statt mov r16,r4 oder sts $2F,r16 statt out $F,r16? Oder wird der Bereich 0..5F aus dem regulären Adressbereich ausgeblendet?
Pardon, meinte 0000..001F: 32 General Purpose Register (R0..R32) statt 0000..001F: 32 General Purpose Register (R0..R16)
Und noch ne Frage hinterher: wie kann man bei 128kB Flash auf die oberen 64k zugreifen? LPM erlaubt ja nur Zugriff auf die unteren 64...
und auch der stack kann den bereich nutzen, aber funktioniert nicht wirklich gut...
> Kann man dann auf die Register auch über den Speicher zugreifen? "Über den Speicher" kann man so nicht sagen. in dem Bereich 0x00 bis 0x5F ist kein Speicher. Man kann auf die allgemeinen Register und die I/O-Register aber tatsächlic so zugreifen, wie du meinst. > lds r16,4 statt mov r16,r4 oder > sts $2F,r16 statt out $F,r16? Ja, das geht. Ist halt etwas langsamer, aber dafür kann man auch indirekt zugreifen und damit einen Zeiger machen, der auch auf ein Regiter zeigen kann. > Oder wird der Bereich 0..5F aus dem regulären Adressbereich > ausgeblendet? Nein, denn sonst wäre ja die Angabe, daß da Register sind, ziemlich nutzlos.
> wie kann man bei 128kB Flash auf die oberen 64k zugreifen? LPM > erlaubt ja nur Zugriff auf die unteren 64... ELPM
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.