Forum: Mikrocontroller und Digitale Elektronik Kapier was nicht. Bitte um Hilfe


von Samy (Gast)


Lesenswert?

Guten Abend

Ihr werdet mich jetzt sicher auslachen aber ich komme mit folgendem
Code nicht ganz klar.
Was ich nicht verstehe sind die Zeilen 7-9! Wann erfolgt ein Sprung?
CPI vergleicht zl u. 0x60 und setzt die Flags
CPC vergleicht zh u. r0 und bezieht Carry Flag mit ein
Sprung wenn Zero-Flag =0 also z.b. x und y sind gleich

01  ldi  zl, low(ramend)
02  out  spl, zl
03  ldi  zh, high(ramend)
04  out  sph, zh        ;if >= Mega8
05  clr  r0
06_ini1:  st  z, r0        ;clear SRAM
07  cpi  zl, 0x60
08  cpc  zh, r0
09  brne  _ini2
10  ldi  zl, 30        ;clear register
11_ini2:  sbiw  zh:zl, 1
12  brne  _ini1

Sorry nochmals --> ich steige dda nicht durch.

von Andi (Gast)


Lesenswert?

Das ist eine Routine um den SRAM zu löschen (initialisieren).
Unter anderem initialisiert/löscht die auch die Register r0 bis r29
welche sich im sogenannten Register-File von Adresse 0 bis 31 (inkl. zl
und zh) befinden.
Durch das Prüfen der Adresse 0x60 wird der I/O-Bereich übersprungen und
dann auf Adresse 30 - 1 (nachträgliches sbiw = 29) umgeschaltet.

Gruß
Andi

von A.K. (Gast)


Lesenswert?

Funktion: Gesamtes RAM und Register r0-r29 werden gelöscht, abwärts.
Die Zeilen 7-10 sorgen dafür, dass der Bereich 30(dez) bis 0x5F
übersprungen wird, denn da ist ja die I/O.

von Jörg (Gast)


Lesenswert?

Die Routinen kenne ich aus einem Programm von Peter Danneger. Ist
wirklich "genial" kurz und einfach und funktioniert prima.

ABER. Richtig sauber ist das ganze nur für AVRs ohne extended
IO-Bereich (0x60-0xFF). Der würde bei diesen Typen nicht! vom löschen
ausgenommen. Um den IO-Bereich bei solchen AVRs komplett rauß zu
halten, müsste der Vergleich (Zeile 7-9) "aufgebohrt" werden.
Möglicherweise kann man sich aber auch mit dem Löschen der IO-Register
arangieren, da die meisten nach einem RESET eh den Wert 0 haben
sollten.

Jörg

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.