Forum: Mikrocontroller und Digitale Elektronik in Assembler indexiert auf AVR Flash zugreifen?


von Dirk Schlage (Gast)


Lesenswert?

Hallo.
Für eine Schrittmotorsteuerung will ich Werte im Flash lesen.
Eigentlich will ich ein Register als Index verwenden (Array).
Es gibt aber keinen Befehl ADIW rd,r1
Ich habe mir jetzt mit einer Schleife und ADIW rd,k63 beholfen.
Aber schön finde ich das nicht.
Was mache ich wenn meine Look-Up-Tables mal grösser sind als 4
Einträge?

Dank im Voraus.

.
.
.

  ldi ZH, high((pattern)*2)
  ldi ZL, low((pattern)*2)

TCmp1C:
  cpi temp1, 0
  breq TCmp1D
  adiw ZL, 2
  dec temp1
  rjmp TCmp1C
TCmp1D:
  lpm ; Programmspeicher nach r0
.
.
.
pattern:  .dw  0x0009, 0x000c, 0x0006, 0x0003

von mmerten (Gast)


Lesenswert?

so geht`s auch

TCmp1C:
  add  ZL,temp1
  brcc PC + 2
  inc  ZH
  add  ZL,temp1
  brcc PC + 2
  inc  ZH
TCmp1D:
  lpm ; Programmspeicher nach r0

von Dirk Schlage (Gast)


Lesenswert?

Besten Dank.
 Ich nehme an, Ich könnte auch (nur) einen Addiervorgang machen, wenn
ich die Addresse wortmässig vorliegen habe.

Dirk

von mmerten (Gast)


Lesenswert?

richtig aber danach ist dann

lsl ZL
rol ZH

zur Adresskorrektur erforderlich

  ldi  ZH, high(pattern)
  ldi  ZL, low(pattern)
  add  ZL,temp1
  brcc PC + 2
  inc  ZH
  lsl  ZL
  rol  ZH

von Dirk Schlage (Gast)


Lesenswert?

Hi.
Nochmals danke. Aber jetzt musste ich doch eine Weile überlegen.

Wenn bezogen auf deinen ersten Code mein temp1 als Byteoffset
vorliegt,
(Also quasi temp1 = 2 * temp1) muss ich doch nix korrigieren.

Dein zweite Code bezog sich doch auf die Annahme, dass temp1 die
Wortdifferenz ist, oder? Dann wird aber mit lsl ZL und rol ZH die
gesammte Adresse geshiftet. Das geht aber nur, wenn 'pattern' ein
Wort index ist, aber nicht mit einem Label, so wie ich's in meinem
ersten Code verwende?

Oder hab ich jetzt krumm gedacht?

Danke für Geduld
    Dirk

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ein Label ist im Atmel-Assembler immer eine Wort-Adresse, deshalb das
"*2" bzw. "lsl  ZL; rol  ZH".

Für den zweiten Code muss in temp1 ein Wort-Index stehen.

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.