// setup PLL from external crystal (PR0), F_crystalu=16MHz, F_CPU=16*8/4 = 32MHz void clock_init(void){ CCP=CCP_IOREG_gc; // unlock writing to CLK.PSCTRL CLK.PSCTRL = CLK_PSADIV_8_gc; // Set up prescalers OSC.XOSCCTRL = OSC_FRQRANGE_12TO16_gc | OSC_XOSCSEL_XTAL_16KCLK_gc; // vybrat zdroj pro XOSC (krystal) a parametry oscilátoru OSC.CTRL = OSC_XOSCEN_bm; // start external clock while (!(OSC.STATUS & OSC_XOSCRDY_bm)){}; // wait until external clock is stabilized OSC.PLLCTRL = OSC_PLLSRC_XOSC_gc | 8; // setup PLL source (external clock), PLL_FAC = 30 (multiply clock 30x) OSC.CTRL |= OSC_PLLEN_bm; // enable PLL while (!(OSC.STATUS & OSC_PLLRDY_bm)){}; // wait until PLL is stabilized CCP=CCP_IOREG_gc; // unlock writing to CLK_CTRL CLK.CTRL = CLK_SCLKSEL_PLL_gc; // select PLL as system clock }