aboutsummaryrefslogtreecommitdiff
path: root/keyboards/projectkb/alice/boards/ST_STM32F072B_DISCOVERY/board.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/projectkb/alice/boards/ST_STM32F072B_DISCOVERY/board.c')
-rw-r--r--keyboards/projectkb/alice/boards/ST_STM32F072B_DISCOVERY/board.c179
1 files changed, 169 insertions, 10 deletions
diff --git a/keyboards/projectkb/alice/boards/ST_STM32F072B_DISCOVERY/board.c b/keyboards/projectkb/alice/boards/ST_STM32F072B_DISCOVERY/board.c
index 9d10fbd75..7c09bd997 100644
--- a/keyboards/projectkb/alice/boards/ST_STM32F072B_DISCOVERY/board.c
+++ b/keyboards/projectkb/alice/boards/ST_STM32F072B_DISCOVERY/board.c
@@ -1,5 +1,5 @@
1/* 1/*
2 ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio 2 ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
3 3
4 Licensed under the Apache License, Version 2.0 (the "License"); 4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License. 5 you may not use this file except in compliance with the License.
@@ -20,14 +20,76 @@
20 */ 20 */
21 21
22#include "hal.h" 22#include "hal.h"
23#include "stm32_gpio.h"
24
25/*===========================================================================*/
26/* Driver local definitions. */
27/*===========================================================================*/
28
29/*===========================================================================*/
30/* Driver exported variables. */
31/*===========================================================================*/
32
33/*===========================================================================*/
34/* Driver local variables and types. */
35/*===========================================================================*/
36
37/**
38 * @brief Type of STM32 GPIO port setup.
39 */
40typedef struct {
41 uint32_t moder;
42 uint32_t otyper;
43 uint32_t ospeedr;
44 uint32_t pupdr;
45 uint32_t odr;
46 uint32_t afrl;
47 uint32_t afrh;
48} gpio_setup_t;
49
50/**
51 * @brief Type of STM32 GPIO initialization data.
52 */
53typedef struct {
54#if STM32_HAS_GPIOA || defined(__DOXYGEN__)
55 gpio_setup_t PAData;
56#endif
57#if STM32_HAS_GPIOB || defined(__DOXYGEN__)
58 gpio_setup_t PBData;
59#endif
60#if STM32_HAS_GPIOC || defined(__DOXYGEN__)
61 gpio_setup_t PCData;
62#endif
63#if STM32_HAS_GPIOD || defined(__DOXYGEN__)
64 gpio_setup_t PDData;
65#endif
66#if STM32_HAS_GPIOE || defined(__DOXYGEN__)
67 gpio_setup_t PEData;
68#endif
69#if STM32_HAS_GPIOF || defined(__DOXYGEN__)
70 gpio_setup_t PFData;
71#endif
72#if STM32_HAS_GPIOG || defined(__DOXYGEN__)
73 gpio_setup_t PGData;
74#endif
75#if STM32_HAS_GPIOH || defined(__DOXYGEN__)
76 gpio_setup_t PHData;
77#endif
78#if STM32_HAS_GPIOI || defined(__DOXYGEN__)
79 gpio_setup_t PIData;
80#endif
81#if STM32_HAS_GPIOJ || defined(__DOXYGEN__)
82 gpio_setup_t PJData;
83#endif
84#if STM32_HAS_GPIOK || defined(__DOXYGEN__)
85 gpio_setup_t PKData;
86#endif
87} gpio_config_t;
23 88
24#if HAL_USE_PAL || defined(__DOXYGEN__)
25/** 89/**
26 * @brief PAL setup. 90 * @brief STM32 GPIO static initialization data.
27 * @details Digital I/O ports static configuration as defined in @p board.h.
28 * This variable is used by the HAL when initializing the PAL driver.
29 */ 91 */
30const PALConfig pal_default_config = { 92static const gpio_config_t gpio_default_config = {
31#if STM32_HAS_GPIOA 93#if STM32_HAS_GPIOA
32 {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR, 94 {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
33 VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH}, 95 VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
@@ -62,23 +124,118 @@ const PALConfig pal_default_config = {
62#endif 124#endif
63#if STM32_HAS_GPIOI 125#if STM32_HAS_GPIOI
64 {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR, 126 {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
65 VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH} 127 VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH},
128#endif
129#if STM32_HAS_GPIOJ
130 {VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR,
131 VAL_GPIOJ_ODR, VAL_GPIOJ_AFRL, VAL_GPIOJ_AFRH},
132#endif
133#if STM32_HAS_GPIOK
134 {VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR,
135 VAL_GPIOK_ODR, VAL_GPIOK_AFRL, VAL_GPIOK_AFRH}
66#endif 136#endif
67}; 137};
138
139/*===========================================================================*/
140/* Driver local functions. */
141/*===========================================================================*/
142
143static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config) {
144
145 gpiop->OTYPER = config->otyper;
146 gpiop->OSPEEDR = config->ospeedr;
147 gpiop->PUPDR = config->pupdr;
148 gpiop->ODR = config->odr;
149 gpiop->AFRL = config->afrl;
150 gpiop->AFRH = config->afrh;
151 gpiop->MODER = config->moder;
152}
153
154static void stm32_gpio_init(void) {
155
156 /* Enabling GPIO-related clocks, the mask comes from the
157 registry header file.*/
158 rccResetAHB(STM32_GPIO_EN_MASK);
159 rccEnableAHB(STM32_GPIO_EN_MASK, true);
160
161 /* Initializing all the defined GPIO ports.*/
162#if STM32_HAS_GPIOA
163 gpio_init(GPIOA, &gpio_default_config.PAData);
164#endif
165#if STM32_HAS_GPIOB
166 gpio_init(GPIOB, &gpio_default_config.PBData);
68#endif 167#endif
168#if STM32_HAS_GPIOC
169 gpio_init(GPIOC, &gpio_default_config.PCData);
170#endif
171#if STM32_HAS_GPIOD
172 gpio_init(GPIOD, &gpio_default_config.PDData);
173#endif
174#if STM32_HAS_GPIOE
175 gpio_init(GPIOE, &gpio_default_config.PEData);
176#endif
177#if STM32_HAS_GPIOF
178 gpio_init(GPIOF, &gpio_default_config.PFData);
179#endif
180#if STM32_HAS_GPIOG
181 gpio_init(GPIOG, &gpio_default_config.PGData);
182#endif
183#if STM32_HAS_GPIOH
184 gpio_init(GPIOH, &gpio_default_config.PHData);
185#endif
186#if STM32_HAS_GPIOI
187 gpio_init(GPIOI, &gpio_default_config.PIData);
188#endif
189#if STM32_HAS_GPIOJ
190 gpio_init(GPIOJ, &gpio_default_config.PJData);
191#endif
192#if STM32_HAS_GPIOK
193 gpio_init(GPIOK, &gpio_default_config.PKData);
194#endif
195}
196
197/*===========================================================================*/
198/* Driver interrupt handlers. */
199/*===========================================================================*/
69 200
70void enter_bootloader_mode_if_requested(void); 201/*===========================================================================*/
202/* Driver exported functions. */
203/*===========================================================================*/
71 204
72/** 205/**
73 * @brief Early initialization code. 206 * @brief Early initialization code.
74 * @details This initialization must be performed just after stack setup 207 * @details GPIO ports and system clocks are initialized before everything
75 * and before any other initialization. 208 * else.
76 */ 209 */
77void __early_init(void) { 210void __early_init(void) {
211 extern void enter_bootloader_mode_if_requested(void);
78 enter_bootloader_mode_if_requested(); 212 enter_bootloader_mode_if_requested();
213 stm32_gpio_init();
79 stm32_clock_init(); 214 stm32_clock_init();
80} 215}
81 216
217#if HAL_USE_SDC || defined(__DOXYGEN__)
218/**
219 * @brief SDC card detection.
220 */
221bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
222
223 (void)sdcp;
224 /* TODO: Fill the implementation.*/
225 return true;
226}
227
228/**
229 * @brief SDC card write protection detection.
230 */
231bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
232
233 (void)sdcp;
234 /* TODO: Fill the implementation.*/
235 return false;
236}
237#endif /* HAL_USE_SDC */
238
82#if HAL_USE_MMC_SPI || defined(__DOXYGEN__) 239#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
83/** 240/**
84 * @brief MMC_SPI card detection. 241 * @brief MMC_SPI card detection.
@@ -106,4 +263,6 @@ bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
106 * @todo Add your board-specific code, if any. 263 * @todo Add your board-specific code, if any.
107 */ 264 */
108void boardInit(void) { 265void boardInit(void) {
266 SYSCFG->CFGR1 |= SYSCFG_CFGR1_I2C1_DMA_RMP;
267 SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_SPI2_DMA_RMP);
109} 268}