Forum: Mikrocontroller und Digitale Elektronik Benötige Hilfe bei Inline Assembler


von Marcel (Gast)


Lesenswert?

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
1
volatile uint8_t Fuses;
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).

von Marcel (Gast)


Lesenswert?

So ... auch gut.

Nachdem ich nun seid ca. 14Uhr versuche das Zeugs hin zu bekommen und 
InlineAssembler zu kapieren habe ich diesen hier gefunden:
1
SPMCSR = 1<<BLBSET | 1<<SPMEN;
2
uint8_t lo = pgm_read_byte(0);
Beitrag "Re: [winavr] _delay_ms dauert zu lange"

Funktioniert

Vielen Dank an den damaligen Antwort Schreiber (a-k).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.