static void InitMainClockPll(void) { CLKSYS_XOSC_Config( OSC_FRQRANGE_2TO9_gc, 0, OSC_XOSCSEL_XTAL_16KCLK_gc ); CLKSYS_Enable( OSC_XOSCEN_bm ); do {} while ( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 ); PORTE.OUTSET = PIN0_bm; CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_XOSC_gc ); CLKSYS_Disable( OSC_RC2MEN_bm ); CLKSYS_Disable( OSC_RC32MEN_bm ); }
char system_clocks_init(void) { /****************************************************************** * System Clock 32MHz (XOSC Quarz 16MHz, PLL Faktor 2) ******************************************************************/ /* Nach dem Reset ist die Quelle des Systemtaktes der interne 2MHz RC-Oszillator (System Clock Selection: RC2MHz) */ // Oszillator XOSC konfigurieren (12..16MHz, 256 clocks startup time) CLKSYS_XOSC_Config( OSC_FRQRANGE_12TO16_gc, false, OSC_XOSCSEL_XTAL_256CLK_gc ); // Oszillator XOSC enable CLKSYS_Enable( OSC_XOSCEN_bm ); // Warten bis der Oszillator bereit ist do {} while ( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 ); // PLL source ist XOSC, Multiplikator x2 CLKSYS_PLL_Config( OSC_PLLSRC_XOSC_gc, 2 ); // Enable PLL CLKSYS_Enable( OSC_PLLEN_bm ); // Prescalers konfigurieren CLKSYS_Prescalers_Config(CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc ); // Warten bis PLL locked do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 ); // Main Clock Source ist Ausgang von PLL CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc ); // Nun ist der System Clock 32MHz ! /* Hinweis: 32kHz TOSC kann nicht in Verbindung mit PLL genutzt werden, da die minimale Eingangsfrequenz des PLLs 400kHz beträgt. */ return(1); } // Sets System Clock to 32MHz
/** \brief Initialize and set cpu and periheral clocks. * * CPU clock frequencies set are: * -CPU: 32HMZ * -Peripheral Prescaling: NONE */ void setup_clocks(void) { // set 32MHZ oscillator as CPU clock source CLKSYS_Enable(OSC_RC32MEN_bm); // enable do { nop(); } while (!CLKSYS_IsReady(OSC_RC32MRDY_bm)); // wait til stable CLKSYS_Main_ClockSource_Select(CLK_SCLKSEL_RC32M_gc); // select for CPU // disable all presacalers, until we decide otherwise CLKSYS_Prescalers_Config(CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc); // set up external 32KHz oscillator (NOTE: first param is ignored) CLKSYS_XOSC_Config(OSC_FRQRANGE_04TO2_gc, false, OSC_XOSCSEL_32KHz_gc); // set internal 32KHz oscillator as source for DFLL and autocalibrate 32MHz CLKSYS_Enable(OSC_XOSCEN_bm); //enable do { nop(); } while (!CLKSYS_IsReady(OSC_XOSCRDY_bm)); // wait til stable CLKSYS_AutoCalibration_Enable(OSC_RC32MCREF_bm, true); // true == ext 32KHz // disable unused oscillators (internal 2MHz and 32KHz oscillators) CLKSYS_Disable(OSC_RC2MEN_bm | OSC_RC32KEN_bm); }
void InitClock () { /* Clock Setup */ /* Enable for external 2-9 MHz crystal with quick startup time * (256CLK). Check if it's stable and set it as the PLL input. */ CLKSYS_XOSC_Config( OSC_FRQRANGE_2TO9_gc, false, OSC_XOSCSEL_EXTCLK_gc ); CLKSYS_Enable( OSC_XOSCEN_bm ); do {} while ( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 ); /* Configure PLL with the 8 MHz external clock as source and * multiply by 4 to get 32 MHz PLL clock and enable it. Wait * for it to be stable and set prescaler C to divide by two * to set the CPU clock to 16 MHz. */ CLKSYS_PLL_Config(OSC_PLLSRC_XOSC_gc, 4 ); CLKSYS_Enable( OSC_PLLEN_bm ); CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_2_gc ); do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 ); CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc ); }