WhiteTiger
29.05.2005, 18:17
Guten Abend
Bin gerade dabei, einen Bootloader (Atmega8) 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.
Bin gerade dabei, einen Bootloader (Atmega8) 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.