Hallihallo,
um es abzuschließen, es funktioniert so wie ich es wollte. :-)
Da mein Bootloader in ASM geschrieben ist, bietet es sich ja an dort die
Sachen zu vergleichen und wenn irgendwas nicht stimmt eine
Signalisierung zu machen.
Sowit so gut. Mit den Infos die ich hier bekommen hatte ist es mir sehr
viel leichter gefallen die entsprechenden Sachen auch im Datenblatt zu
finden. Ich habe die Vergleiche mal rausgelassen da ja jeder vlt. andere
Vorstellungen hat was er mit den Info's machen möchte. Ich schau mir den
Inhalt an und wenn er mit dem festgelegten Wert übereinstimmt dann gibt
es ein ok, sonst eben die Fehlermeldung per LED.
Alles auf den ATmega644 bezogen, bei anderen AVR's geht das mit
Sicherheit ähnlich, da hilft dann der Blick in das Datenblat :-P
(Reading the Fuse and Lock Bits from Software)
1 | cli
|
2 |
|
3 | ldi ZH, 0 ; $0000=FLB / $0001=LB / $0002=FEB / $0003=FHB
|
4 | ldi ZL, 0
|
5 | in wrH, SPMCSR
|
6 | ori wrH,(1<<BLBSET)|(1<<SPMEN);
|
7 | out SPMCSR, wrH
|
8 | nop
|
9 | nop
|
10 | nop
|
11 | nop
|
12 | nop
|
13 | lpm wrH,Z ; Inhalt ist das abgefragte Byte
|
14 |
|
15 | sei
|
$0000=FLB ist das Fuse Low Byte
$0001=LB ist das Lock Byte
$0002=FEB ist das Fuse Extended Byte
$0003=FHB ist das Fuse High Byte
Den abschließenden Satz aus dem Datenblatt sollte man auch beachten.
"Fuse and Lock bits that are programmed, will be read as zero. Fuse and
Lock bits that are unprogrammed, will be read as one"
Also 0 ist 1 und 1 ist 0... :-D
Vielen Dank für Eure Hilfe!
MfG AVRli...