Hi, ich habe einen AT32UC3B0256. Ich benutze das AVR Studio 5 zum Programmieren. Bin grad bei meinem ersten Projekt mit einem AT32 und frage mich daher, wie ich die Fuse Bits programmieren muss!? Im AVR Studio heißen die meisten Bits nur LOCK0-LOCK15. Im Datenblatt heißen nur einige Bits in Registern wie die Fuses. Fällt beim AT32 das Fuse programmieren weg und man schreibt die ganze Konfiguration in eine Initialisierungssequenz? Hat jemand ein Beispiel wie man z.B. Oscillator 1 mit 10MHz Crystal aktiviert und daraus den Systemtakt von 60MHz generiert?
Hi, Also Die Fuses sind hauptsächlich dafür gedacht um Speicher zu sperren und zu schützen. Die CPU stellst du mit ganz normalen Registern ein. Hier ist eine einfache Funktion (Ist selbst geschrieben). Im define steht drin wieviel MHZ dein quarz hat, eigentlich sind 12Mhz üblich beim AVR32 aber naja mit 10 geht es auch :). Soweit ich weiß funktioniert die Funktion bei allen AVR32 (UC3A, UC3B, UC3C(noch nicht getestet)). Kannst aber nur Freqenzen die durch 5 Teilbar sind einstellen. z.B. 10Mhz, 15Mhz, 20Mhz ...
1 | #define crystal_quarz 10
|
2 | |
3 | void cpu_set_clk(int cclock) |
4 | {
|
5 | int clockh = (cclock/(crystal_quarz/2)) - 1; |
6 | |
7 | AVR32_PM.oscctrl0 = (AVR32_PM.oscctrl0 | 0x00000407); // Startup time / Oscillator Mode |
8 | |
9 | AVR32_PM.mcctrl = AVR32_PM_OSC0EN_MASK; // Enable Oscillator 0 |
10 | |
11 | while((AVR32_PM.poscsr & AVR32_PM_POSCSR_OSC0RDY_MASK)== 0); // Oscillator 0 is ready |
12 | |
13 | |
14 | AVR32_PM.pll[0] = 0 << AVR32_PM_PLLOSC_OFFSET | // Oscillator 0 is the source for the PLL |
15 | 1 << AVR32_PM_PLLDIV_OFFSET | // div = 1 |
16 | clockh << AVR32_PM_PLLMUL_OFFSET | // multi clock z.b. if clockh = 10 (10+1)*10=110/2Fvc = 55Mhz |
17 | 5 << AVR32_PM_PLLOPT_OFFSET; // 80MHz<fvco<180MHz / fPLL = fvco / Wide Bandwidth Mode disabled |
18 | |
19 | |
20 | AVR32_PM.cksel = 0x80808080; |
21 | |
22 | AVR32_PM.pll[0] |= AVR32_PM_PLLEN_MASK; // PLL enable |
23 | |
24 | while(!(AVR32_PM.poscsr & AVR32_PM_POSCSR_LOCK0_MASK)); // PLL 0 is locked, and ready to be selected as clock source |
25 | |
26 | |
27 | AVR32_FLASHC.fcr |= 1 << AVR32_FLASHC_FWS_OFFSET; // The flash is read with 1 wait state. |
28 | |
29 | AVR32_PM.mcctrl |= 2 << AVR32_PM_MCSEL_OFFSET; // PLL0 as main oscillator |
30 | }
|
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.