Zunächst mal die Info warum ich Inline Assembler nutzen will:
Ich will das mein Programm (GCC) am Anfang nachschaut ob es intern
(8MHz) oder extern (16MHz) getaktet wird und je nach dem die Timer
einstellt.
Daher ist es das Ziel dieses Code:
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
|
Beitrag "Re: Fuses durch den AVR auslesen?"
In mein C-Programm zu bekommen.
Und die Ausgabe in C verarbeiten zu können.
Um klein an zu fangen versuche ich gerade die Variable
in einem kleinen Abschnitt hoch zu zählen, komme aber nicht wirklich
weiter / blicke nicht wirklich durch das System durch.
Aktuell schaut mein Code so aus:
1 | asm volatile (
|
2 | "nop" "\n\t"
|
3 | "inc" : : "d" (Fuses)
|
4 | );
|
Bekomme aber die Meldung "constant value required"
Wie schaffe ich es, das er die Variable nimmt?
Verwende aktuell die Infos von
http://www.rn-wissen.de/index.php/Inline-Assembler_in_avr-gcc
Ggf. kann mir ja auch jemand bei dem finalen Code helfen (Oberster asm
Code).