// Fce vytváří ze Fin=20MHz frekvenci Fout=348.8kHz /* spustí externí clock s pomocí XOSCK pak ho dělí 50ti (DIV = 24) pak ho násobí 218 (LDR = 217) // výstup FDPLL a pak ho v GG4 dělí 250ti a vypouští na PA14 (GG[4]) */ // 20MHz / 50 => 0.4MHz * 218 => 87.2MHz /250 => 348.8kHz (*36 = 12.5568MHz) // 20MHz/50 => DIV = 50/2-1 = 24 // 0.4MHz * 218 => LDR = 218-1 void gclk2_init(void){ // spustit XOSC s externím clockem (s krystalem by bylo potřeba XTALEN a nastavit gain...), externí clock 20MHz SYSCTRL->XOSC.reg = SYSCTRL_XOSC_ENABLE; while(!(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_XOSCRDY)){}; // počkat na naběhnutí XOSCK // nastavit FDPLL // vstupní frekvence pro FDPLL musí ležet v intervalu 32kHz - 2MHz // výstupní frekvence FDPLL musí ležet v rozsahu 48-96MHz. SYSCTRL->DPLLRATIO.reg = SYSCTRL_DPLLRATIO_LDR(217) | SYSCTRL_DPLLRATIO_LDRFRAC(0); // nastavit násobící poměr i se zlomkovou částí SYSCTRL->DPLLCTRLB.reg = SYSCTRL_DPLLCTRLB_REFCLK_REF1 | SYSCTRL_DPLLCTRLB_DIV(24); // vybrat zdroj pro PLL + nastavit dělící poměr pro signál z XOSC SYSCTRL->DPLLCTRLA.reg = SYSCTRL_DPLLCTRLA_ENABLE; // spustit FDPLL while(!(SYSCTRL->DPLLSTATUS.reg & SYSCTRL_DPLLSTATUS_LOCK)){}; // počkat na naběhnutí FDPLL // nastavit parametry generátoru 2 GCLK->GENDIV.reg = GCLK_GENDIV_ID(4) | GCLK_GENDIV_DIV(250); // generátor 2, dělíme /25 // vybrat clock generátoru 2 - FDPLL GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(4) | GCLK_GENCTRL_OE | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_SRC_FDPLL; // povolit výstup na pin GCLK_IO[2], povolit generátor 2, zdroj FDPLL // nastavení pinu PORT->Group[0].PINCFG[14].reg |= PORT_PINCFG_PMUXEN; // nastavit PA16 jako Alternativní fci PORT->Group[0].DIRSET.reg = 14; // nasatvit PA16 jako výstup PORT->Group[0].PMUX[14/2].reg = PORT_PMUX_PMUXE(PORT_PMUX_PMUXE_H_Val); // vybrat příslušnou alternativní fci (PA16 ... H - GCLK_IO) } ---------------------------------------------------------------------------------------------------------------------------- 12.5568MHz z 10MHz ve dvou čipech // Fin = 348.4kHz * 216 => 75.3408MHz / 2 / 6 = 12.5568MHz // LDR = 216-1=215 // DIV = 0 // GG DIV = 3 void gclk_init(void){ // spustit XOSC s externím clockem (s krystalem by bylo potřeba XTALEN a nastavit gain...), externí clock 348.8kHz SYSCTRL->XOSC.reg = SYSCTRL_XOSC_ENABLE; while(!(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_XOSCRDY)){}; // počkat na naběhnutí XOSCK // nastavit FDPLL // vstupní frekvence pro FDPLL musí ležet v intervalu 32kHz - 2MHz // výstupní frekvence FDPLL musí ležet v rozsahu 48-96MHz. SYSCTRL->DPLLRATIO.reg = SYSCTRL_DPLLRATIO_LDR(215) | SYSCTRL_DPLLRATIO_LDRFRAC(0); // nastavit násobící poměr i se zlomkovou částí SYSCTRL->DPLLCTRLB.reg = SYSCTRL_DPLLCTRLB_REFCLK_REF1 | SYSCTRL_DPLLCTRLB_DIV(0); // vybrat zdroj pro PLL + nastavit dělící poměr pro signál z XOSC SYSCTRL->DPLLCTRLA.reg = SYSCTRL_DPLLCTRLA_ENABLE; // spustit FDPLL while(!(SYSCTRL->DPLLSTATUS.reg & SYSCTRL_DPLLSTATUS_LOCK)){}; // počkat na naběhnutí FDPLL // nastavit parametry generátoru 2 GCLK->GENDIV.reg = GCLK_GENDIV_ID(4) | GCLK_GENDIV_DIV(3); // generátor 2, dělíme /3 // vybrat clock generátoru 2 - FDPLL GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(4) | GCLK_GENCTRL_OE | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_SRC_FDPLL; // povolit výstup na pin GCLK_IO[2], povolit generátor 2, zdroj FDPLL // nastavení pinu PORT->Group[0].PINCFG[14].reg |= PORT_PINCFG_PMUXEN; // nastavit PA16 jako Alternativní fci PORT->Group[0].DIRSET.reg = 14; // nasatvit PA16 jako výstup PORT->Group[0].PMUX[14/2].reg = PORT_PMUX_PMUXE(PORT_PMUX_PMUXE_H_Val); // vybrat příslušnou alternativní fci (PA16 ... H - GCLK_IO) } /* // 20MHz / 50 => 0.4MHz * 218 => 87.2MHz /250 => 348.8kHz (*36 = 12.5568MHz) // 20MHz/50 => DIV = 50/2-1 = 24 // 0.4MHz * 218 => LDR = 218-1 void gclk2_init(void){ // spustit XOSC s externím clockem (s krystalem by bylo potřeba XTALEN a nastavit gain...), externí clock 20MHz SYSCTRL->XOSC.reg = SYSCTRL_XOSC_ENABLE; while(!(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_XOSCRDY)){}; // počkat na naběhnutí XOSCK // nastavit FDPLL // vstupní frekvence pro FDPLL musí ležet v intervalu 32kHz - 2MHz // výstupní frekvence FDPLL musí ležet v rozsahu 48-96MHz. SYSCTRL->DPLLRATIO.reg = SYSCTRL_DPLLRATIO_LDR(217) | SYSCTRL_DPLLRATIO_LDRFRAC(0); // nastavit násobící poměr i se zlomkovou částí SYSCTRL->DPLLCTRLB.reg = SYSCTRL_DPLLCTRLB_REFCLK_REF1 | SYSCTRL_DPLLCTRLB_DIV(24); // vybrat zdroj pro PLL + nastavit dělící poměr pro signál z XOSC SYSCTRL->DPLLCTRLA.reg = SYSCTRL_DPLLCTRLA_ENABLE; // spustit FDPLL while(!(SYSCTRL->DPLLSTATUS.reg & SYSCTRL_DPLLSTATUS_LOCK)){}; // počkat na naběhnutí FDPLL // nastavit parametry generátoru 2 GCLK->GENDIV.reg = GCLK_GENDIV_ID(4) | GCLK_GENDIV_DIV(250); // generátor 2, dělíme /250 // vybrat clock generátoru 2 - FDPLL GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(4) | GCLK_GENCTRL_OE | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_SRC_FDPLL; // povolit výstup na pin GCLK_IO[2], povolit generátor 2, zdroj FDPLL // nastavení pinu PORT->Group[0].PINCFG[14].reg |= PORT_PINCFG_PMUXEN; // nastavit PA16 jako Alternativní fci PORT->Group[0].DIRSET.reg = 14; // nasatvit PA16 jako výstup PORT->Group[0].PMUX[14/2].reg = PORT_PMUX_PMUXE(PORT_PMUX_PMUXE_H_Val); // vybrat příslušnou alternativní fci (PA16 ... H - GCLK_IO) }*/ ----------------------------------------------------------------------------------------------------- 15.90528M a 10M ze 30M (oscilátor) /* CHIP 2 Fin = 0.41856MHz F_pllin = 0.41856MHz DIV = 0 F_pllout = 63.62112MHz , LDR = 152 = 151 chip_out = F_pllout / 4 = 15.90528MHz, GG4 /4 void gclk_init(void){ // spustit XOSC s externím clockem (s krystalem by bylo potřeba XTALEN a nastavit gain...), externí clock 348.8kHz SYSCTRL->XOSC.reg = SYSCTRL_XOSC_ENABLE; while(!(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_XOSCRDY)){}; // počkat na naběhnutí XOSCK // nastavit FDPLL // vstupní frekvence pro FDPLL musí ležet v intervalu 32kHz - 2MHz // výstupní frekvence FDPLL musí ležet v rozsahu 48-96MHz. SYSCTRL->DPLLRATIO.reg = SYSCTRL_DPLLRATIO_LDR(151) | SYSCTRL_DPLLRATIO_LDRFRAC(0); // nastavit násobící poměr i se zlomkovou částí SYSCTRL->DPLLCTRLB.reg = SYSCTRL_DPLLCTRLB_REFCLK_REF1 | SYSCTRL_DPLLCTRLB_DIV(0); // vybrat zdroj pro PLL + nastavit dělící poměr pro signál z XOSC SYSCTRL->DPLLCTRLA.reg = SYSCTRL_DPLLCTRLA_ENABLE; // spustit FDPLL while(!(SYSCTRL->DPLLSTATUS.reg & SYSCTRL_DPLLSTATUS_LOCK)){}; // počkat na naběhnutí FDPLL // nastavit parametry generátoru 2 GCLK->GENDIV.reg = GCLK_GENDIV_ID(4) | GCLK_GENDIV_DIV(2); // generátor 2, dělíme /3 // vybrat clock generátoru 2 - FDPLL GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(4) | GCLK_GENCTRL_OE | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_SRC_FDPLL; // povolit výstup na pin GCLK_IO[2], povolit generátor 2, zdroj FDPLL // nastavení pinu PORT->Group[0].PINCFG[14].reg |= PORT_PINCFG_PMUXEN; // nastavit PA16 jako Alternativní fci PORT->Group[0].DIRSET.reg = 14; // nasatvit PA16 jako výstup PORT->Group[0].PMUX[14/2].reg = PORT_PMUX_PMUXE(PORT_PMUX_PMUXE_H_Val); // vybrat příslušnou alternativní fci (PA16 ... H - GCLK_IO) }*/ /* CHIP 1 !!! Fin = 30MHz F_pllin = 0.12MHz DIV = 250/2-1 = 124 F_pllout = 52.32MHz , LDR = 436-1 = 435 chip_out = F_pllout / 125 = 0.41856, GG4 /125 */ void gclk_init(void){ // spustit XOSC s externím clockem (s krystalem by bylo potřeba XTALEN a nastavit gain...), externí clock 348.8kHz SYSCTRL->XOSC.reg = SYSCTRL_XOSC_ENABLE; while(!(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_XOSCRDY)){}; // počkat na naběhnutí XOSCK // nastavit FDPLL // vstupní frekvence pro FDPLL musí ležet v intervalu 32kHz - 2MHz // výstupní frekvence FDPLL musí ležet v rozsahu 48-96MHz. SYSCTRL->DPLLRATIO.reg = SYSCTRL_DPLLRATIO_LDR(435) | SYSCTRL_DPLLRATIO_LDRFRAC(0); // nastavit násobící poměr i se zlomkovou částí SYSCTRL->DPLLCTRLB.reg = SYSCTRL_DPLLCTRLB_REFCLK_REF1 | SYSCTRL_DPLLCTRLB_DIV(124); // vybrat zdroj pro PLL + nastavit dělící poměr pro signál z XOSC SYSCTRL->DPLLCTRLA.reg = SYSCTRL_DPLLCTRLA_ENABLE; // spustit FDPLL while(!(SYSCTRL->DPLLSTATUS.reg & SYSCTRL_DPLLSTATUS_LOCK)){}; // počkat na naběhnutí FDPLL // nastavit parametry generátoru 4 - výstup pro čip II GCLK->GENDIV.reg = GCLK_GENDIV_ID(4) | GCLK_GENDIV_DIV(125); // generátor 4, dělíme /125 // vybrat clock generátoru 2 - FDPLL GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(4) | GCLK_GENCTRL_OE | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_SRC_FDPLL; // povolit výstup na pin GCLK_IO[2], povolit generátor 2, zdroj FDPLL // nastavení pinu PORT->Group[0].PINCFG[14].reg |= PORT_PINCFG_PMUXEN; // nastavit PA16 jako Alternativní fci PORT->Group[0].DIRSET.reg = 14; // nasatvit PA16 jako výstup PORT->Group[0].PMUX[14/2].reg |= PORT_PMUX_PMUXE(PORT_PMUX_PMUXE_H_Val); // vybrat příslušnou alternativní fci (PA16 ... H - GCLK_IO) // 10MHz výstup na PA15 (z GG5) GCLK->GENDIV.reg = GCLK_GENDIV_ID(5) | GCLK_GENDIV_DIV(3); // generátor 5, dělíme /3 // vybrat clock generátoru 2 - FDPLL GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(5) | GCLK_GENCTRL_OE | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_SRC_XOSC; // povolit výstup na pin GCLK_IO[5], povolit generátor 5, zdroj XOSC // nastavení pinu PORT->Group[0].PINCFG[15].reg |= PORT_PINCFG_PMUXEN; // nastavit PA16 jako Alternativní fci PORT->Group[0].DIRSET.reg = 15; // nasatvit PA16 jako výstup PORT->Group[0].PMUX[15/2].reg |= PORT_PMUX_PMUXO(PORT_PMUX_PMUXO_H_Val); // vybrat příslušnou alternativní fci (PA16 ... H - GCLK_IO) }