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ß
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
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")
|
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
Hat vielleicht jemand einen funktionierenden Code um den AT32UC3C2 mit einem 12MHz Quarz auf 66 MHz zu takten?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.