Forum: Mikrocontroller und Digitale Elektronik AT32UC3B Bedeutung der Fuse Bits?


von kai (Gast)


Lesenswert?

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?

von kai (Gast)


Lesenswert?

Kennst sich keiner aus?

von Phil S. (zippi)


Lesenswert?

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
Noch kein Account? Hier anmelden.