Programmspeicher löschen

Gast #170313
Guten Abend

Bin gerade dabei, einen Bootloader (Atmega 8) zu entwickeln.
In einem AVR-Buch habe einen Code zum löschen des Programmspeichers
entdekt.

NextPage:
ldi temp, 0x03       ;
out spmcr, temp      ;Programmspeicher/Löschmodus aktivieren
spm                  ;Page löschen starten

WaitSpm:
in temp, spmcr       ;
sbrc temp, spmen     ;warten bis Sreibaktion.....
rjmp WaitSpm         ;beendet ist
adiw zl,32           ;nächste Seiteadresse (Adresse=Adresse+32)....
rjmp NextPage        ;löschen next Page

Tja dieser Code löscht zwar den Speicher, aber jede Page 2x (das 2x
wird Page nicht kommplett gelöscht)!!
Wenn ich 64 zu zl addiere (geht mit adiw natürlich nicht) wird jede
Seite nur 1x gelöscht!

Der Atmega 8 hat zwar pro Page 32Words also 64Bytes, ricchtig??
Wie kommt der Autor des Buches dann auf +32???

Habe das ganze nur mit AVR-Studio 4 simuliert --> nicht das es am
AVR-Studio liegt.

Vielleicht bringt mal jemand etwas licht ins dunkle, thanks.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.