Forum: Mikrocontroller und Digitale Elektronik Rd Rr im indirekten Adressierungsmodus


von Christoph Kukulies (Gast)


Lesenswert?

Wo finde ich eine genaue Zuordnung, welche Rd bzw. Rr Register in den
jeweiligen Adressierungsmodi erlaubt sind?

Ich raufe mir seit einer Stunde an einer kleinen Programmpassage die
Haare und bin mir nicht sicher, ob ich die richtigen Register benutze.
Das AVR Handbuch von ATMEL schweigt sich da aus. Es sagt z.B. im
LD Rd,Y+ ist Rd Zielregister. (S. 4-7) Auf Seite 4-9 steht dann:

"Rd: R0-R31 or R16-R31, (depending on instruction)"

      ldi YL,low(2*data)
      ldi YH,high(2*data)
loop: ld r0,Y+
      tst r0
      breq l1
      ....
      rjmp loop
l1:   ret


Obiger Code funktioniert nicht.

     ldi ZL,low(2*data)
     ldi ZH,high(2*data)
loop: lpm
      tst r0
      breq l1
      ....
      adiw ZL,1
      rjmp loop
l1:   ret

Letztere Passage funktioniert.

von Peter D. (peda)


Lesenswert?

LD und LPM heißen nicht nur anders, die machen auch was anderes.

Schau es Dir nochmal gründlich in der Befehlsbeschreibung an.


Peter

von Christoph Kukulies (Gast)


Lesenswert?

LD Rd,Y :  Rd<-(Y)

LPM      : R0<-(Z)

Ich sehe da keinen Unterschied, lediglich, daß im LPM Falle
fest R0 als Ziel genommen wird, im ersteren Fall ein beliebiges Rd.

Liegt der Unterschied vielleicht im Wort "Program memory". Kann
ich damit nicht vom SRAM laden?

von Stefan (Gast)


Lesenswert?

ld
Load indirect rom data space

lpm
Load indirect from program memory

>Liegt der Unterschied vielleicht im Wort "Program memory". Kann
>ich damit nicht vom SRAM laden?
Könnte sein ;-)
Aus dem Flash (=program memory) bekommt Du Daten NUR mit lpm. Der AVR
ist eine Havard-Architektur, d.h. Daten- und Programmspeicher sind
komplett voneinander getrennt. Flash und RAM unterscheiden sich also
nicht nur durch ihre Adresse, sondern grundlegend durch die Art des
Zugriffs.

Stefan

von Christoph Kukulies (Gast)


Lesenswert?

Stefan, Du schreibst:
> ld
> Load indirect rom data space
                ^^^
> lpm
> Load indirect from program memory

rom? ram?

Havard? Harvard?

Etwas genauer bitte. Im ersten Falle ist ein a oder o
sicher wichtig. Im zweiten ein fehlendes 'r' vielleicht nicht so.

von knapp (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hier ist was für dich.
Lesen.


gruss
michael

von Stefan (Gast)


Lesenswert?

Oh sorry, gleich 2 Rechtschreibfehler.

Load indirect rom data space
sollte natürlich
Load indirect from data space
heissen.

Ist übrigens ein Zitat aus der Befehlsliste.

Macht richtig Spass, Dir Tips zu geben.

Stefan

von Christoph Kukulies (Gast)


Lesenswert?

Danke an alle. Das AVR Instructionset Dokument ist gut. Das hatte ich
noch nicht.

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
Noch kein Account? Hier anmelden.