mikrocontroller.net

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


Autor: Samy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.