Forum: Mikrocontroller und Digitale Elektronik AT32UC3C2512C Initialiserung


von Christian S. (vivus)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mir den Artikel 
https://www.mikrocontroller.net/articles/AT32UC3C_-_Einstieg_in_die_Programmierung 
angeguckt und wollte die Init mal compilieren und auf einen 
AT32UC3C2512C flashen. Leider erhalte ich Fehler:

Zeile 22:
Error  5  multiple definition of `CPU_set_clk'  C:\Users\.././cpu.c

Zeile 1:
Error  6  undefined reference to `barrier'  C:\Users ... 
AT32UC3C2_ErsteTest.c

Restlichen Meldungen sind nur Warnungen.

Mehrere Definitionen von der Funktion CPU_set_clk() sind auf jeden Fall 
nicht vorhanden.

Habe versucht die Fehler zu googlen,  leider ohne Erfolg.

Würde mich über einen Tipp freuen!

Gruß

von Christian S. (vivus)


Lesenswert?

Niemand eine Idee?

von Timmo H. (masterfx)


Lesenswert?

Christian S. schrieb:
> CPU_set_clk

Mal geguckt wo das sonst noch vorkommt?

von Christian S. (vivus)


Lesenswert?

ja sicher :) Oder ich übersehe es...

von Timmo H. (masterfx)


Lesenswert?

In cpu.c gibts gibts CPU_set_clk in der cpu.h ein CPU_set_clk2.
Du rufst in der AT32UC3C2_ErsteTest.c also etwas auf was in der cpu.h 
nicht deklariert wurde, jedoch in der cpu.c und damit zweimal.

: Bearbeitet durch User
von Christian S. (vivus)


Lesenswert?

Error  6  undefined reference to `barrier'  C:\Users ...
AT32UC3C2_ErsteTest.c

habe ich gefunden. Hier ist die Fkt. barrier nicht definiert. Denke es 
müsste die CPU_barrier() Fkt. sein.
1
#define CPU_barrier()      asm volatile("" ::: "memory")

von Christian S. (vivus)


Lesenswert?

Timmo H. schrieb:
> In cpu.c gibts gibts CPU_set_clk in der cpu.h ein CPU_set_clk2.
> Du rufst in der AT32UC3C2_ErsteTest.c also etwas auf was in der cpu.h
> nicht deklariert wurde, jedoch in der cpu.c und damit zweimal.

Habe ich nur zum Testen mal umbenannt. Habe ich dummer weise vergessen 
wieder Rückgängig zu machen...

Error  5  multiple definition of `CPU_set_clk' erhalte ich auch, wenn 
ich die Fkt. CPU_set_clk() in der main nicht aufrufe

: Bearbeitet durch User
von Christian S. (vivus)


Lesenswert?

Hat vielleicht jemand einen funktionierenden Code um den AT32UC3C2 mit 
einem 12MHz Quarz auf 66 MHz zu takten?

von Christian S. (vivus)


Lesenswert?

Habe das hier gefunden
1
void UsePLL(unsigned int clock)
2
{
3
  int clockh = (clock/6) - 1;
4
5
  AVR32_PM.oscctrl0 = (AVR32_PM.oscctrl0 | 0x00000407);        // Startup time  /  Oscillator Mode
6
7
  AVR32_PM.mcctrl =       AVR32_PM_OSC0EN_MASK;          // Enable Oscillator 0
8
9
  while((AVR32_PM.poscsr & AVR32_PM_POSCSR_OSC0RDY_MASK)== 0);  // Oscillator 0 is ready
10
11
12
  AVR32_PM.pll[0] =       0 << AVR32_PM_PLLOSC_OFFSET  |    // Oscillator 0 is the source for the PLL
13
                    1 << AVR32_PM_PLLDIV_OFFSET  |    // div = 1
14
                    clockh << AVR32_PM_PLLMUL_OFFSET |  // multi clock z.b. if clockh = 10 (10+1)*12=132/2Fvc = 66Mhz
15
                    5 << AVR32_PM_PLLOPT_OFFSET;      // 80MHz<fvco<180MHz / fPLL = fvco / Wide Bandwidth Mode disabled
16
17
  AVR32_PM.cksel =       0x80808080;
18
19
  AVR32_PM.pll[0] |=       AVR32_PM_PLLEN_MASK;            // PLL enable
20
21
  while(!(AVR32_PM.poscsr & AVR32_PM_POSCSR_LOCK0_MASK));      // PLL 0 is locked, and ready to be selected as clock source
22
23
24
  AVR32_FLASHC.fcr |=      0 << AVR32_FLASHC_FWS_OFFSET;      // The flash is read with 0 wait state. (write 1 otherwise)
25
26
  AVR32_PM.mcctrl |=       2 << AVR32_PM_MCSEL_OFFSET;        // PLL0 as main oscillator
27
28
}


AVR32_PM.oscctrl0 gibt es bei mir nicht laut AVR Studio. Das Register 
OSCCTRL ist bei mir unter System Control Interface also AVR_SCIF.oscctrl

AVR32_PM.mcctrl wiederum ist unter Power Manager...

Ist das bei den AVR32 unterschiedlich? Macht für mich nicht so richtig 
Sinn. Kann mir hier jemand was zu erklären?

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.