Forum: Mikrocontroller und Digitale Elektronik Atemga32U4 - Pr


von flo (Gast)


Lesenswert?

Hallo,

man bekommt in AVR Studio diverse Fehlermeldungen wenn man mit diesen 
Befehlen die Clock wechseln möchte....

../Atmega32U4_test.c:30: error: expected identifier before numeric 
constant


//Wechsel zur externen Clock/Crystal
void switch_clock_rc_to_extern(void){
  if (UDINT.WAKEUPI == 1)
    {
    UDINT.WAKEUPI = 0;
    CKSEL0.EXTE = 1;
     while (CLKSTA.EXTON != 1);
    CLKSEL0 = 1;
    PLLCSR.PLLE = 1;
     CLKSEL0.RCE = 0;
    while (PLLCSR.PLOCK != 1);
     USBCON.FRZCLK = 0;
    }
}

Der richtige Controllertyp ist eingestellt. Verwendet wird AVR Studio 
4.18
An was kann es liegen, dass die Definitionen nicht bekannt sind?

Gruß Flo

von ... (Gast)


Lesenswert?

Du hättest wenigstens angeben können, welche denn nun die Zeile 30 ist!
Aber das hier:
1
if (UDINT.WAKEUPI == 1)
dürfte so nicht passen. Das sieht nach der Notation für atXmegas aus.
Für atmagas (ohne X) sollte eher sowas passen:
1
if(UDINT & (1<<WAKEUPI))
Ähnlich dann für den Rest.

von flo (Gast)


Lesenswert?

Die Fehlermeldung kommt bei jeder Zeile....

Das Beispiel ist aus dem Datenblatt... darum wundert es mich um so mehr, 
dass es nicht hinaut.....

Gruß Flo

von ... (Gast)


Lesenswert?

flo schrieb:
> Die Fehlermeldung kommt bei jeder Zeile....

Naja, die Syntax ist halt auch in jeder Zeile falsch.

flo schrieb:
> Das Beispiel ist aus dem Datenblatt

Das kann ich kaum glauben. Welches Datenblatt?

von Carsten G. (carry)


Lesenswert?

Hallo,

wenn ich mich nicht täusche, ist das Beispiel für den IAR C Compiler. Da 
sehen die Bitdefinitionen so aus. Glaube ich zumindest, habe den IAR 
Compiler noch nicht benutzt.


Carsten

von ... (Gast)


Lesenswert?

... schrieb:
> flo schrieb:
>> Das Beispiel ist aus dem Datenblatt
>
> Das kann ich kaum glauben. Welches Datenblatt?

Mist, da hab ich vorhin auch in das falsche DB geschaut :(
Steht tatsächlich so im DB, allerdings nur als Kommentar und dann auch 
noch fehlerhaft :(

Für GCC müßte das Ganze etwa so aussehen:
1
//Wechsel zur externen Clock/Crystal
2
void switch_clock_rc_to_extern(void){
3
  if(UDINT & (1<<WAKEUPI))
4
  {
5
    UDINT &= ~(1<<WAKEUPI));
6
    CLKSEL0 |= (1<<EXTE);
7
    while(!(CLKSTA & (1<<EXTON)));
8
    CLKSEL0 |= (1<<CLKS);
9
    PLLCSR |= (1<<PLLE);
10
    CLKSEL0 &= ~(1<<RCE));
11
    while(!(PLLCSR & (1<<PLOCK)));
12
    USBCON &= ~(1<<FRZCLK);
13
  }
14
}

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.