| // C1[CLKS] bits are written to 00 | // C1[CLKS] bits are written to 00 | ||||
| // C1[IREFS] bit is written to 1 | // C1[IREFS] bit is written to 1 | ||||
| // C6[PLLS] bit is written to 0 | // C6[PLLS] bit is written to 0 | ||||
| #if F_CPU <= 4000000 | |||||
| // MCG_SC[FCDIV] defaults to divide by two for internal ref clock | |||||
| // I tried changing MSG_SC to divide by 1, it didn't work for me | |||||
| #if F_CPU <= 2000000 | |||||
| // use the internal oscillator | // use the internal oscillator | ||||
| MCG_C1 = MCG_C1_CLKS(1) | MCG_C2_IRCS; | MCG_C1 = MCG_C1_CLKS(1) | MCG_C2_IRCS; | ||||
| // wait for MCGOUT to use oscillator | // wait for MCGOUT to use oscillator | ||||
| // config divisors: 8 MHz core, 8 MHz bus, 8 MHz flash | // config divisors: 8 MHz core, 8 MHz bus, 8 MHz flash | ||||
| SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(1) | SIM_CLKDIV1_OUTDIV2(1) | SIM_CLKDIV1_OUTDIV4(1); | SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(1) | SIM_CLKDIV1_OUTDIV2(1) | SIM_CLKDIV1_OUTDIV4(1); | ||||
| #elif F_CPU == 4000000 | #elif F_CPU == 4000000 | ||||
| // config divisors: 4 MHz core, 4 MHz bus, 2 MHz flash | |||||
| SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0) | SIM_CLKDIV1_OUTDIV2(0) | SIM_CLKDIV1_OUTDIV4(1); | |||||
| // config divisors: 4 MHz core, 4 MHz bus, 2 MHz flash | |||||
| // since we are running from external clock 16MHz | |||||
| // fix outdiv too -> cpu 16/4, bus 16/4, flash 16/4 | |||||
| // here we can go into vlpr? | |||||
| // config divisors: 4 MHz core, 4 MHz bus, 4 MHz flash | |||||
| SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(3) | SIM_CLKDIV1_OUTDIV2(3) | SIM_CLKDIV1_OUTDIV4(3); | |||||
| #elif F_CPU == 2000000 | #elif F_CPU == 2000000 | ||||
| // since we are running from the fast internal reference clock 4MHz | |||||
| // but is divided down by 2 so we actually have a 2MHz, MCG_SC[FCDIV] default is 2 | |||||
| // fix outdiv -> cpu 2/1, bus 2/1, flash 2/2 | |||||
| // config divisors: 2 MHz core, 2 MHz bus, 1 MHz flash | // config divisors: 2 MHz core, 2 MHz bus, 1 MHz flash | ||||
| SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(1) | SIM_CLKDIV1_OUTDIV2(1) | SIM_CLKDIV1_OUTDIV4(3); | |||||
| SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0) | SIM_CLKDIV1_OUTDIV2(0) | SIM_CLKDIV1_OUTDIV4(1); | |||||
| #else | #else | ||||
| #error "Error, F_CPU must be 168, 144, 120, 96, 72, 48, 24, 16, 8, 4, or 2 MHz" | #error "Error, F_CPU must be 168, 144, 120, 96, 72, 48, 24, 16, 8, 4, or 2 MHz" | ||||
| #endif | #endif |