void board_init(void) { /* initialize the boards LEDs, this is done first for debugging purposes */ leds_init(); /* Initialize power control pins */ power_pins_init(); /* Turn on Vperiph for peripherals */ gpio_set(MULLE_POWER_VPERIPH); /* Turn on AVDD for reading voltages */ gpio_set(MULLE_POWER_AVDD); LED_RED_ON; /* Initialize RTC oscillator as early as possible since we are using it as a * base clock for the FLL. * It takes a while to stabilize the oscillator, therefore we do this as * soon as possible during boot in order to let it stabilize while other * stuff is initializing. */ /* If the clock is not stable then the UART will have the wrong baud rate * for debug prints as well */ rtt_init(); /* Set up clocks */ set_safe_clock_dividers(); set_fll_source(); kinetis_mcg_set_mode(KINETIS_MCG_FEE); /* At this point we need to wait for 1 ms until the clock is stable. * Since the clock is not yet stable we can only guess how long we must * wait. I have tried to make this as short as possible but still being able * to read the initialization messages written on the UART. * (If the clock is not stable all UART output is garbled until it has * stabilized) */ for (int i = 0; i < 100000; ++i) { asm volatile("nop\n"); } /* Update SystemCoreClock global var */ SystemCoreClockUpdate(); /* initialize the CPU */ cpu_init(); }
void board_init(void) { int status; /* initialize the boards LEDs */ gpio_init(LED0_PIN, GPIO_OUT); gpio_init(LED1_PIN, GPIO_OUT); gpio_init(LED2_PIN, GPIO_OUT); /* Initialize power control pins */ power_pins_init(); /* Turn on Vperiph for peripherals */ /* * By turning on Vperiph first, and before waiting for the clocks to * stabilize, we will have used enough time to have let the FRAM start up * properly when we want to access it later without having to add any extra * delays. */ gpio_set(MULLE_POWER_VPERIPH); /* Turn on AVDD for reading voltages */ gpio_set(MULLE_POWER_AVDD); /* Initialize RTC oscillator as early as possible since we are using it as a * base clock for the FLL. * It takes a while to stabilize the oscillator, therefore we do this as * soon as possible during boot in order to let it stabilize while other * stuff is initializing. */ /* If the clock is not stable then the UART will have the wrong baud rate * for debug prints as well */ rtt_init(); /* Set up clocks */ set_safe_clock_dividers(); set_fll_source(); kinetis_mcg_set_mode(KINETIS_MCG_FEE); /* At this point we need to wait for 1 ms until the clock is stable. * Since the clock is not yet stable we can only guess how long we must * wait. I have tried to make this as short as possible but still being able * to read the initialization messages written on the UART. * (If the clock is not stable all UART output is garbled until it has * stabilized) */ for (int i = 0; i < 100000; ++i) { __asm__ volatile("nop\n"); } /* Update SystemCoreClock global var */ SystemCoreClockUpdate(); /* initialize the CPU */ cpu_init(); /* NVRAM requires xtimer for timing */ xtimer_init(); /* Initialize NVRAM */ status = mulle_nvram_init(); if (status == 0) { /* Increment boot counter */ increase_boot_count(); } }