drivers/periph&cpu: add and use common periph_init()

This commit is contained in:
Hauke Petersen 2017-01-20 11:18:38 +01:00
parent ed4cb561bb
commit 4bfce892d3
25 changed files with 152 additions and 8 deletions

View File

@ -18,12 +18,13 @@
*/ */
#include "cpu.h" #include "cpu.h"
#include "periph/init.h"
/** /**
* @brief Initialize the CPU, set IRQ priorities * @brief Initialize the CPU, set IRQ priorities
*/ */
void cpu_init(void) void cpu_init(void)
{ {
/* Right now we need to do nothing here */ /* trigger static peripheral initialization */
; periph_init();
} }

View File

@ -18,12 +18,13 @@
*/ */
#include "cpu.h" #include "cpu.h"
#include "periph/init.h"
/** /**
* @brief Initialize the CPU, set IRQ priorities * @brief Initialize the CPU, set IRQ priorities
*/ */
void cpu_init(void) void cpu_init(void)
{ {
/* Right now we need to do nothing here */ /* trigger static peripheral initialization */
; periph_init();
} }

View File

@ -18,12 +18,13 @@
*/ */
#include "cpu.h" #include "cpu.h"
#include "periph/init.h"
/** /**
* @brief Initialize the CPU, set IRQ priorities * @brief Initialize the CPU, set IRQ priorities
*/ */
void cpu_init(void) void cpu_init(void)
{ {
/* Right now we need to do nothing here */ /* trigger static peripheral initialization */
; periph_init();
} }

View File

@ -20,6 +20,7 @@
#include <assert.h> #include <assert.h>
#include "cpu.h" #include "cpu.h"
#include "periph/init.h"
#define BIT(n) ( 1UL << (n) ) #define BIT(n) ( 1UL << (n) )
@ -47,6 +48,8 @@ void cpu_init(void)
SYS_CTRL->I_MAP = 1; SYS_CTRL->I_MAP = 1;
/* initialize the clock system */ /* initialize the clock system */
cpu_clock_init(); cpu_clock_init();
/* trigger static peripheral initialization */
periph_init();
} }
/** /**

View File

@ -17,8 +17,9 @@
* @} * @}
*/ */
#include "cpu.h" #include "cpu.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
#ifndef HF_CLOCK_SOURCE #ifndef HF_CLOCK_SOURCE
#define HF_CLOCK_SOURCE DDI_0_OSC_CTL0_SCLK_HF_SRC_SEL_RCOSC /* set 48MHz RCOSC */ #define HF_CLOCK_SOURCE DDI_0_OSC_CTL0_SCLK_HF_SRC_SEL_RCOSC /* set 48MHz RCOSC */
@ -42,6 +43,9 @@ void cpu_init(void)
/* initialize the system clock */ /* initialize the system clock */
cpu_clock_init(); cpu_clock_init();
/* trigger static peripheral initialization */
periph_init();
} }
static void cpu_clock_init(void) static void cpu_clock_init(void)

View File

@ -19,6 +19,7 @@
#include "cpu.h" #include "cpu.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
/** /**
* @brief Configure clock sources and the CPU frequency * @brief Configure clock sources and the CPU frequency
@ -59,4 +60,6 @@ void cpu_init(void)
cortexm_init(); cortexm_init();
/* Initialise clock sources and generic clocks */ /* Initialise clock sources and generic clocks */
clk_init(); clk_init();
/* trigger static peripheral initialization */
periph_init();
} }

View File

@ -9,6 +9,7 @@
#include <stdint.h> #include <stdint.h>
#include "cpu.h" #include "cpu.h"
#include "board.h" #include "board.h"
#include "periph/init.h"
/** /**
* @ingroup cpu_k60 * @ingroup cpu_k60
@ -48,6 +49,8 @@ void cpu_init(void)
cortexm_init(); cortexm_init();
/* Check that we are running on the CPU that this code was built for */ /* Check that we are running on the CPU that this code was built for */
check_running_cpu_revision(); check_running_cpu_revision();
/* trigger static peripheral initialization */
periph_init();
} }
static void check_running_cpu_revision(void) static void check_running_cpu_revision(void)

View File

@ -23,6 +23,7 @@
#include "cpu.h" #include "cpu.h"
#include "mcg.h" #include "mcg.h"
#include "cpu_conf.h" #include "cpu_conf.h"
#include "periph/init.h"
#define SIM_CLKDIV1_60MHZ (SIM_CLKDIV1_OUTDIV1(0) | \ #define SIM_CLKDIV1_60MHZ (SIM_CLKDIV1_OUTDIV1(0) | \
SIM_CLKDIV1_OUTDIV2(0) | \ SIM_CLKDIV1_OUTDIV2(0) | \
@ -40,6 +41,8 @@ void cpu_init(void)
cortexm_init(); cortexm_init();
/* initialize the clock system */ /* initialize the clock system */
cpu_clock_init(); cpu_clock_init();
/* trigger static peripheral initialization */
periph_init();
} }
/** /**

View File

@ -23,6 +23,7 @@
#include "cpu.h" #include "cpu.h"
#include "mcg.h" #include "mcg.h"
#include "cpu_conf.h" #include "cpu_conf.h"
#include "periph/init.h"
#define FLASH_BASE (0x00000000) #define FLASH_BASE (0x00000000)
@ -37,6 +38,8 @@ void cpu_init(void)
cortexm_init(); cortexm_init();
/* initialize the clock system */ /* initialize the clock system */
cpu_clock_init(); cpu_clock_init();
/* trigger static peripheral initialization */
periph_init();
} }
static inline void modem_clock_init(void) static inline void modem_clock_init(void)

View File

@ -23,6 +23,7 @@
#include "thread.h" #include "thread.h"
#include "arch/thread_arch.h" #include "arch/thread_arch.h"
#include "arch/irq_arch.h" #include "arch/irq_arch.h"
#include "periph/init.h"
/** /**
* @brief Initialize the CPU, set IRQ priorities * @brief Initialize the CPU, set IRQ priorities
@ -34,6 +35,9 @@ void cpu_init(void)
/* initialize the clock system */ /* initialize the clock system */
cpu_clock_init(CLOCK_SOURCE); cpu_clock_init(CLOCK_SOURCE);
/* trigger static peripheral initialization */
periph_init();
} }
void setup_fpu(void) void setup_fpu(void)

View File

@ -18,6 +18,7 @@
*/ */
#include "cpu.h" #include "cpu.h"
#include "periph/init.h"
#define SYSOSCCTRL_Val 0x00000000 /* Reset: 0x000 */ #define SYSOSCCTRL_Val 0x00000000 /* Reset: 0x000 */
@ -111,4 +112,6 @@ void cpu_init(void)
cortexm_init(); cortexm_init();
/* initialize the clock */ /* initialize the clock */
clk_init(); clk_init();
/* trigger static peripheral initialization */
periph_init();
} }

View File

@ -18,6 +18,7 @@
*/ */
#include "cpu.h" #include "cpu.h"
#include "periph/init.h"
/** /**
* @brief Initialize the CPU, set IRQ priorities * @brief Initialize the CPU, set IRQ priorities
@ -26,4 +27,6 @@ void cpu_init(void)
{ {
/* initialize the Cortex-M core */ /* initialize the Cortex-M core */
cortexm_init(); cortexm_init();
/* trigger static peripheral initialization */
periph_init();
} }

View File

@ -19,6 +19,7 @@
#include "cpu.h" #include "cpu.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
/** /**
* @brief Initialize the CPU, set IRQ priorities * @brief Initialize the CPU, set IRQ priorities
@ -39,4 +40,6 @@ void cpu_init(void)
NRF_CLOCK->TASKS_HFCLKSTART = 1; NRF_CLOCK->TASKS_HFCLKSTART = 1;
while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0) {} while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0) {}
#endif #endif
/* trigger static peripheral initialization */
periph_init();
} }

View File

@ -24,6 +24,7 @@
#include "cpu.h" #include "cpu.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
/* FTPAN helper functions */ /* FTPAN helper functions */
static bool ftpan_32(void); static bool ftpan_32(void);
@ -82,6 +83,9 @@ void cpu_init(void)
NVIC_EnableIRQ(SWI0_EGU0_IRQn); NVIC_EnableIRQ(SWI0_EGU0_IRQn);
NVIC_SetPriority(SWI0_EGU0_IRQn, 6); NVIC_SetPriority(SWI0_EGU0_IRQn, 6);
#endif #endif
/* trigger static peripheral initialization */
periph_init();
} }
/** /**

View File

@ -19,6 +19,7 @@
#include "cpu.h" #include "cpu.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
/** /**
* @brief Keys needed for editing certain PMC registers * @brief Keys needed for editing certain PMC registers
@ -88,4 +89,7 @@ void cpu_init(void)
PMC->PMC_MCKR = PMC_MCKR_CSS_PLLA_CLK; PMC->PMC_MCKR = PMC_MCKR_CSS_PLLA_CLK;
/* wait for master clock to be ready */ /* wait for master clock to be ready */
while (!(PMC->PMC_SR & PMC_SR_MCKRDY)); while (!(PMC->PMC_SR & PMC_SR_MCKRDY));
/* trigger static peripheral initialization */
periph_init();
} }

View File

@ -20,6 +20,7 @@
#include "cpu.h" #include "cpu.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
/** /**
* @brief Configure clock sources and the cpu frequency * @brief Configure clock sources and the cpu frequency

View File

@ -19,6 +19,7 @@
*/ */
#include "cpu.h" #include "cpu.h"
#include "periph/init.h"
static void _gclk_setup(int gclk, uint32_t reg) static void _gclk_setup(int gclk, uint32_t reg)
{ {
@ -77,4 +78,7 @@ void cpu_init(void)
*/ */
SUPC->BOD33.bit.ENABLE=0; SUPC->BOD33.bit.ENABLE=0;
#endif #endif
/* trigger static peripheral initialization */
periph_init();
} }

View File

@ -19,6 +19,7 @@
#include "cpu.h" #include "cpu.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
/* Check the source to be used for the PLL */ /* Check the source to be used for the PLL */
#if defined(CLOCK_HSI) && defined(CLOCK_HSE) #if defined(CLOCK_HSI) && defined(CLOCK_HSE)
@ -54,6 +55,8 @@ void cpu_init(void)
cortexm_init(); cortexm_init();
/* initialize the clock system */ /* initialize the clock system */
clock_init(); clock_init();
/* trigger static peripheral initialization */
periph_init();
} }
/** /**

View File

@ -27,6 +27,7 @@
#include "cpu.h" #include "cpu.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
/* Configuration of flash access cycles */ /* Configuration of flash access cycles */
#if CLOCK_CORECLOCK <= 24000000 #if CLOCK_CORECLOCK <= 24000000
@ -103,6 +104,8 @@ void cpu_init(void)
cortexm_init(); cortexm_init();
/* initialize system clocks */ /* initialize system clocks */
clk_init(); clk_init();
/* trigger static peripheral initialization */
periph_init();
} }
/** /**

View File

@ -19,6 +19,7 @@
#include "cpu.h" #include "cpu.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
#ifdef HSI_VALUE #ifdef HSI_VALUE
# define RCC_CR_SOURCE RCC_CR_HSION # define RCC_CR_SOURCE RCC_CR_HSION
@ -38,6 +39,8 @@ void cpu_init(void)
cortexm_init(); cortexm_init();
/* initialize system clocks */ /* initialize system clocks */
clk_init(); clk_init();
/* trigger static peripheral initialization */
periph_init();
} }
/** /**

View File

@ -21,6 +21,7 @@
#include <stdint.h> #include <stdint.h>
#include "cpu.h" #include "cpu.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
/* Check the source to be used for the PLL */ /* Check the source to be used for the PLL */
#if defined(CLOCK_HSI) && defined(CLOCK_HSE) #if defined(CLOCK_HSI) && defined(CLOCK_HSE)
@ -57,6 +58,8 @@ void cpu_init(void)
cortexm_init(); cortexm_init();
/* initialize the clock system */ /* initialize the clock system */
cpu_clock_init(); cpu_clock_init();
/* trigger static peripheral initialization */
periph_init();
} }
/** /**

View File

@ -21,6 +21,7 @@
#include <stdint.h> #include <stdint.h>
#include "cpu.h" #include "cpu.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
/* Check the source to be used for the PLL */ /* Check the source to be used for the PLL */
#if defined(CLOCK_HSI) && defined(CLOCK_HSE) #if defined(CLOCK_HSI) && defined(CLOCK_HSE)
@ -50,6 +51,8 @@ void cpu_init(void)
cortexm_init(); cortexm_init();
/* initialize the clock system */ /* initialize the clock system */
cpu_clock_init(); cpu_clock_init();
/* trigger static peripheral initialization */
periph_init();
} }
/** /**

View File

@ -22,6 +22,7 @@
#include "cpu.h" #include "cpu.h"
#include "board.h" #include "board.h"
#include "periph_conf.h" #include "periph_conf.h"
#include "periph/init.h"
/* Check the source to be used for the PLL */ /* Check the source to be used for the PLL */
#if defined(CLOCK_HSI) && defined(CLOCK_HSE) #if defined(CLOCK_HSI) && defined(CLOCK_HSE)
@ -46,6 +47,8 @@ void cpu_init(void)
cortexm_init(); cortexm_init();
/* initialize system clocks */ /* initialize system clocks */
clk_init(); clk_init();
/* trigger static peripheral initialization */
periph_init();
} }
/** /**

View File

@ -0,0 +1,47 @@
/*
* Copyright (C) 2017 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup drivers_periph_init Common peripheral initialization
* @ingroup drivers_periph
* @brief Common static peripheral driver initialization
*
* This interface provides a central hook for any static peripheral
* initialization that might be needed. Typical drivers that need this are
* shared peripherals like SPI and I2C.
*
* @{
* @file
* @brief Common peripheral driver initialization interface
*
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
*/
#ifndef PERIPH_INIT_H
#define PERIPH_INIT_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Common peripheral initialization function
*
* This function should call all needed static initialization functions for
* configured peripheral drivers like SPI or I2C. This function SHOULD be called
* early in the boot process, e.g. before the actual kernel initialization is
* started.
*/
void periph_init(void);
#ifdef __cplusplus
}
#endif
#endif /* PERIPH_INIT_H */
/** @} */

View File

@ -0,0 +1,31 @@
/*
* Copyright (C) 2017 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser General
* Public License v2.1. See the file LICENSE in the top level directory for more
* details.
*/
/**
* @ingroup drivers_periph_init
* @{
*
* @file
* @brief Common static peripheral driver initialization implementation
*
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
*
* @}
*/
#include "periph/spi.h"
void periph_init(void)
{
/* initialize configured SPI devices */
#ifdef SPI_NUMOF
for (unsigned i = 0; i < SPI_NUMOF; i++) {
spi_init(SPI_DEV(i));
}
#endif
}