AT32UC3B Bedeutung der Fuse Bits?

Gast #2462249
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?
#2466202
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren