Revision 0128be0f modules/PowerManagement_1-1/board.c

View differences:

modules/PowerManagement_1-1/board.c
17 17
*/
18 18

  
19 19
#include <hal.h>
20
#include <stm32_gpio.h>
20 21

  
21
#if HAL_USE_PAL || defined(__DOXYGEN__)
22 22
/**
23
 * @brief   PAL setup.
24
 * @details Digital I/O ports static configuration as defined in @p board.h.
25
 *          This variable is used by the HAL when initializing the PAL driver.
23
 * @brief   Type of STM32 GPIO port setup.
26 24
 */
27
const PALConfig pal_default_config = {
25
typedef 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
 */
38
typedef struct {
39
#if STM32_HAS_GPIOA || defined(__DOXYGEN__)
40
  gpio_setup_t          PAData;
41
#endif
42
#if STM32_HAS_GPIOB || defined(__DOXYGEN__)
43
  gpio_setup_t          PBData;
44
#endif
45
#if STM32_HAS_GPIOC || defined(__DOXYGEN__)
46
  gpio_setup_t          PCData;
47
#endif
48
#if STM32_HAS_GPIOD || defined(__DOXYGEN__)
49
  gpio_setup_t          PDData;
50
#endif
51
#if STM32_HAS_GPIOE || defined(__DOXYGEN__)
52
  gpio_setup_t          PEData;
53
#endif
54
#if STM32_HAS_GPIOF || defined(__DOXYGEN__)
55
  gpio_setup_t          PFData;
56
#endif
57
#if STM32_HAS_GPIOG || defined(__DOXYGEN__)
58
  gpio_setup_t          PGData;
59
#endif
60
#if STM32_HAS_GPIOH || defined(__DOXYGEN__)
61
  gpio_setup_t          PHData;
62
#endif
63
#if STM32_HAS_GPIOI || defined(__DOXYGEN__)
64
  gpio_setup_t          PIData;
65
#endif
66
#if STM32_HAS_GPIOJ || defined(__DOXYGEN__)
67
  gpio_setup_t          PJData;
68
#endif
69
#if STM32_HAS_GPIOK || defined(__DOXYGEN__)
70
  gpio_setup_t          PKData;
71
#endif
72
} gpio_config_t;
73

  
74
/**
75
 * @brief   STM32 GPIO static initialization data.
76
 */
77
static const gpio_config_t gpio_default_config = {
28 78
#if STM32_HAS_GPIOA
29 79
  {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
30 80
   VAL_GPIOA_ODR,   VAL_GPIOA_AFRL,   VAL_GPIOA_AFRH},
......
59 109
#endif
60 110
#if STM32_HAS_GPIOI
61 111
  {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
62
   VAL_GPIOI_ODR,   VAL_GPIOI_AFRL,   VAL_GPIOI_AFRH}
112
   VAL_GPIOI_ODR,   VAL_GPIOI_AFRL,   VAL_GPIOI_AFRH},
113
#endif
114
#if STM32_HAS_GPIOJ
115
  {VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR,
116
   VAL_GPIOJ_ODR,   VAL_GPIOJ_AFRL,   VAL_GPIOJ_AFRH},
117
#endif
118
#if STM32_HAS_GPIOK
119
  {VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR,
120
   VAL_GPIOK_ODR,   VAL_GPIOK_AFRL,   VAL_GPIOK_AFRH}
63 121
#endif
64 122
};
123

  
124
/**
125
 * @brief   GPIO initialization.
126
 *
127
 * @param[in]   gpiop   GPIO register block. 
128
 * @param[in]   config  GPIO configuration.
129
 */
130
static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config) {
131

  
132
  gpiop->OTYPER  = config->otyper;
133
  gpiop->OSPEEDR = config->ospeedr;
134
  gpiop->PUPDR   = config->pupdr;
135
  gpiop->ODR     = config->odr;
136
  gpiop->AFRL    = config->afrl;
137
  gpiop->AFRH    = config->afrh;
138
  gpiop->MODER   = config->moder;
139
}
140

  
141
/**
142
 * @brief   GPIO initilization for all ports.
143
 */
144
static void stm32_gpio_init(void) {
145

  
146
  /* Enabling GPIO-related clocks, the mask comes from the
147
     registry header file.*/
148
  rccResetAHB1(STM32_GPIO_EN_MASK);
149
  rccEnableAHB1(STM32_GPIO_EN_MASK, true);
150

  
151
  /* Initializing all the defined GPIO ports.*/
152
#if STM32_HAS_GPIOA
153
  gpio_init(GPIOA, &gpio_default_config.PAData);
154
#endif
155
#if STM32_HAS_GPIOB
156
  gpio_init(GPIOB, &gpio_default_config.PBData);
157
#endif
158
#if STM32_HAS_GPIOC
159
  gpio_init(GPIOC, &gpio_default_config.PCData);
160
#endif
161
#if STM32_HAS_GPIOD
162
  gpio_init(GPIOD, &gpio_default_config.PDData);
163
#endif
164
#if STM32_HAS_GPIOE
165
  gpio_init(GPIOE, &gpio_default_config.PEData);
166
#endif
167
#if STM32_HAS_GPIOF
168
  gpio_init(GPIOF, &gpio_default_config.PFData);
169
#endif
170
#if STM32_HAS_GPIOG
171
  gpio_init(GPIOG, &gpio_default_config.PGData);
172
#endif
173
#if STM32_HAS_GPIOH
174
  gpio_init(GPIOH, &gpio_default_config.PHData);
175
#endif
176
#if STM32_HAS_GPIOI
177
  gpio_init(GPIOI, &gpio_default_config.PIData);
65 178
#endif
179
#if STM32_HAS_GPIOJ
180
  gpio_init(GPIOJ, &gpio_default_config.PJData);
181
#endif
182
#if STM32_HAS_GPIOK
183
  gpio_init(GPIOK, &gpio_default_config.PKData);
184
#endif
185
}
66 186

  
67 187
/**
68 188
 * @brief   Early initialization code.
......
71 191
 */
72 192
void __early_init(void) {
73 193

  
194
  stm32_gpio_init();
74 195
  stm32_clock_init();
75 196
}
76 197

  

Also available in: Unified diff