rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
board.c
Go to the documentation of this file.
1/**
2 * @file boards/S105/board.c
3 *
4 * @date Jan 03, 2023
5 * @author Andrey Gusakov, 2023
6 */
7
8#include "hal.h"
9
10/*==========================================================================*/
11/* Driver local definitions. */
12/*==========================================================================*/
13
14/*==========================================================================*/
15/* Driver exported variables. */
16/*==========================================================================*/
17
18/*==========================================================================*/
19/* Driver local variables and types. */
20/*==========================================================================*/
21
22/**
23 * @brief Type of STM32 GPIO port setup.
24 */
25typedef struct {
26 uint32_t moder;
27 uint32_t otyper;
28 uint32_t ospeedr;
29 uint32_t pupdr;
30 uint32_t odr;
31 uint32_t afrl;
32 uint32_t afrh;
33} gpio_setup_t;
34
35/**
36 * @brief Type of STM32 GPIO initialization data.
37 */
38typedef struct {
39 gpio_setup_t PAData;
40 gpio_setup_t PBData;
41 gpio_setup_t PCData;
42 gpio_setup_t PDData;
43 gpio_setup_t PEData;
44 gpio_setup_t PFData;
45 gpio_setup_t PGData;
46 gpio_setup_t PHData;
47 gpio_setup_t PIData;
48} gpio_config_t;
49
50/**
51 * @brief STM32 GPIO static initialization data.
52 */
53static const gpio_config_t gpio_default_config = {
54 {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
55 VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
56 {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
57 VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
58 {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
59 VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
60 {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
61 VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
62 {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
63 VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
64 {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
65 VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
66 {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
67 VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
68 {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
69 VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
70 {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
71 VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH},
72};
73
74/*==========================================================================*/
75/* Driver local functions. */
76/*==========================================================================*/
77
78static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config) {
79
80 gpiop->OTYPER = config->otyper;
81 gpiop->OSPEEDR = config->ospeedr;
82 gpiop->PUPDR = config->pupdr;
83 gpiop->ODR = config->odr;
84 gpiop->AFRL = config->afrl;
85 gpiop->AFRH = config->afrh;
86 gpiop->MODER = config->moder;
87}
88
89static void stm32_gpio_init(void) {
90
91 /* Enabling GPIO-related clocks, the mask comes from the
92 * registry header file.*/
93 rccResetAHB1(STM32_GPIO_EN_MASK);
94 rccEnableAHB1(STM32_GPIO_EN_MASK, true);
95
96 /* Initializing all the defined GPIO ports.*/
97 gpio_init(GPIOA, &gpio_default_config.PAData);
98 gpio_init(GPIOB, &gpio_default_config.PBData);
99 gpio_init(GPIOC, &gpio_default_config.PCData);
100 gpio_init(GPIOD, &gpio_default_config.PDData);
101 gpio_init(GPIOE, &gpio_default_config.PEData);
102 gpio_init(GPIOF, &gpio_default_config.PFData);
103 gpio_init(GPIOG, &gpio_default_config.PGData);
104 gpio_init(GPIOH, &gpio_default_config.PHData);
105 gpio_init(GPIOI, &gpio_default_config.PIData);
106}
107
108/*
109 * Early initialization code.
110 * This initialization must be performed just after stack setup and before
111 * any other initialization.
112 */
113void __early_init(void)
114{
116 stm32_clock_init();
117}
118
119/*
120 * Board-specific initialization code.
121 */
122void boardInit(void) {
123}
void __early_init(void)
Definition board.c:21
void boardInit(void)
Definition board.c:31
static constexpr persistent_config_s * config
static void stm32_gpio_init(void)
Definition board.c:181
static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config)
Definition board.c:170
static const gpio_config_t gpio_default_config
STM32 GPIO static initialization data.
Definition board.c:119