Statistics
| Branch: | Tag: | Revision:

amiro-os / modules / PowerManagement_1-1 / board.h @ 4c72a54c

History | View | Annotate | Download (109.386 KB)

1
/*
2
AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform.
3
Copyright (C) 2016..2019  Thomas Schöpping et al.
4

5
This program is free software: you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation, either version 3 of the License, or
8
(at your option) any later version.
9

10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
GNU General Public License for more details.
14

15
You should have received a copy of the GNU General Public License
16
along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
*/
18

    
19
/**
20
 * @file
21
 * @brief   PowerManagement v1.1 Board specific macros.
22
 *
23
 * @addtogroup powermanagement_board
24
 * @{
25
 */
26

    
27
#ifndef BOARD_H
28
#define BOARD_H
29

    
30
/*
31
 * Setup for AMiRo PowerManagement v1.1 board.
32
 */
33

    
34
/*
35
 * Board identifier.
36
 */
37
#define BOARD_POWERMANAGEMENT_1_1
38
#define BOARD_NAME                      "AMiRo PowerManagement v1.1"
39

    
40
/*
41
 * Board oscillators-related settings.
42
 * NOTE: LSE not fitted.
43
 */
44
#if !defined(STM32_LSECLK)
45
#define STM32_LSECLK                    0U
46
#endif
47

    
48
#if !defined(STM32_HSECLK)
49
#define STM32_HSECLK                    8000000U
50
#endif
51

    
52
/*
53
 * Board voltages.
54
 * Required for performance limits calculation.
55
 */
56
#define STM32_VDD                       330U
57

    
58
/*
59
 * MCU type as defined in the ST header.
60
 */
61
#define STM32F405xx
62

    
63
/*
64
 * STM32F4 alternate function definitions
65
 */
66
#define STM32F4xx_AF_system             0U
67
#define STM32F4xx_AF_TIM1to2            1U
68
#define STM32F4xx_AF_TIM3to5            2U
69
#define STM32F4xx_AF_TIM8to11           3U
70
#define STM32F4xx_AF_I2C1to3            4U
71
#define STM32F4xx_AF_SPI1to2            5U
72
#define STM32F4xx_AF_SPI3               6U
73
#define STM32F4xx_AF_USART1to3          7U
74
#define STM32F4xx_AF_USART4to6          8U
75
#define STM32F4xx_AF_CAN1to2_TIM12to14  9U
76
#define STM32F4xx_AF_OTG_HSFS           10U
77
#define STM32F4xx_AF_ETH                11U
78
#define STM32F4xx_AF_FSMC_SDIO_OTGHS    12U
79
#define STM32F4xx_AF_DCMI               13U
80
#define STM32F4xx_AF_EVENTOUT           15U
81

    
82
/*
83
 * Identifiers for the several sensor rings, which can be attached to the PowerManagement v1.1 module.
84
 */
85
#define BOARD_NOSENSORRING              0
86
#define BOARD_PROXIMITYSENSOR           1
87
#define BOARD_DISTANCESENSOR_VL53L0X    2
88
#define BOARD_DISTANCESENSOR_VL53L1X    3
89

    
90
/*
91
 * Configuration macro to define which type of sensor ring is attached.
92
 */
93
#if !defined(BOARD_SENSORRING) || defined(__DOXYGEN__)
94
#define BOARD_SENSORRING                BOARD_PROXIMITYSENSOR
95
#endif
96

    
97
/*
98
 * IO pins assignments.
99
 */
100
#define GPIOA_WKUP                      0U
101
#define GPIOA_PIN1                      1U
102
#define GPIOA_SYS_UART_TX               2U
103
#define GPIOA_SYS_UART_RX               3U
104
#define GPIOA_SYS_SPI_SS0_N             4U
105
#define GPIOA_SYS_SPI_SCLK              5U
106
#define GPIOA_SYS_SPI_MISO              6U
107
#define GPIOA_SYS_SPI_MOSI              7U
108
#define GPIOA_SYS_REG_EN                8U
109
#define GPIOA_PROG_RX                   9U
110
#define GPIOA_PROG_TX                   10U
111
#define GPIOA_CAN_RX                    11U
112
#define GPIOA_CAN_TX                    12U
113
#define GPIOA_SWDIO                     13U
114
#define GPIOA_SWCLK                     14U
115
#define GPIOA_SYS_SPI_SS1_N             15U
116

    
117
#define GPIOB_IR_INT1_N                 0U
118
#define GPIOB_VSYS_SENSE                1U
119
#define GPIOB_POWER_EN                  2U
120
#define GPIOB_SYS_UART_DN               3U
121
#define GPIOB_CHARGE_STAT2A             4U
122
#define GPIOB_BUZZER                    5U
123
#define GPIOB_GAUGE_BATLOW2             6U
124
#define GPIOB_GAUGE_BATGD2_N            7U
125
#define GPIOB_GAUGE_SCL2                8U
126
#define GPIOB_GAUGE_SDA2                9U
127
#define GPIOB_GAUGE_SCL1                10U
128
#define GPIOB_GAUGE_SDA1                11U
129
#define GPIOB_LED                       12U
130
#define GPIOB_BT_RTS                    13U
131
#define GPIOB_BT_CTS                    14U
132
#define GPIOB_SYS_UART_UP               15U
133

    
134
#define GPIOC_CHARGE_STAT1A             0U
135
#define GPIOC_GAUGE_BATLOW1             1U
136
#define GPIOC_GAUGE_BATGD1_N            2U
137
#define GPIOC_CHARGE_EN1_N              3U
138
#define GPIOC_IR_INT2_N                 4U
139
#define GPIOC_TOUCH_INT_N               5U
140
#define GPIOC_SYS_DONE                  6U
141
#define GPIOC_SYS_PROG_N                7U
142
#define GPIOC_PATH_DC                   8U
143
#define GPIOC_SYS_SPI_DIR               9U
144
#define GPIOC_BT_RX                     10U
145
#define GPIOC_BT_TX                     11U
146
#define GPIOC_SYS_INT_N                 12U
147
#define GPIOC_SYS_PD_N                  13U
148
#define GPIOC_SYS_WARMRST_N             14U
149
#define GPIOC_BT_RST                    15U
150

    
151
#define GPIOD_PIN0                      0U
152
#define GPIOD_PIN1                      1U
153
#define GPIOD_CHARGE_EN2_N              2U
154
#define GPIOD_PIN3                      3U
155
#define GPIOD_PIN4                      4U
156
#define GPIOD_PIN5                      5U
157
#define GPIOD_PIN6                      6U
158
#define GPIOD_PIN7                      7U
159
#define GPIOD_PIN8                      8U
160
#define GPIOD_PIN9                      9U
161
#define GPIOD_PIN10                     10U
162
#define GPIOD_PIN11                     11U
163
#define GPIOD_PIN12                     12U
164
#define GPIOD_PIN13                     13U
165
#define GPIOD_PIN14                     14U
166
#define GPIOD_PIN15                     15U
167

    
168
#define GPIOE_PIN0                      0U
169
#define GPIOE_PIN1                      1U
170
#define GPIOE_PIN2                      2U
171
#define GPIOE_PIN3                      3U
172
#define GPIOE_PIN4                      4U
173
#define GPIOE_PIN5                      5U
174
#define GPIOE_PIN6                      6U
175
#define GPIOE_PIN7                      7U
176
#define GPIOE_PIN8                      8U
177
#define GPIOE_PIN9                      9U
178
#define GPIOE_PIN10                     10U
179
#define GPIOE_PIN11                     11U
180
#define GPIOE_PIN12                     12U
181
#define GPIOE_PIN13                     13U
182
#define GPIOE_PIN14                     14U
183
#define GPIOE_PIN15                     15U
184

    
185
#define GPIOF_PIN0                      0U
186
#define GPIOF_PIN1                      1U
187
#define GPIOF_PIN2                      2U
188
#define GPIOF_PIN3                      3U
189
#define GPIOF_PIN4                      4U
190
#define GPIOF_PIN5                      5U
191
#define GPIOF_PIN6                      6U
192
#define GPIOF_PIN7                      7U
193
#define GPIOF_PIN8                      8U
194
#define GPIOF_PIN9                      9U
195
#define GPIOF_PIN10                     10U
196
#define GPIOF_PIN11                     11U
197
#define GPIOF_PIN12                     12U
198
#define GPIOF_PIN13                     13U
199
#define GPIOF_PIN14                     14U
200
#define GPIOF_PIN15                     15U
201

    
202
#define GPIOG_PIN0                      0U
203
#define GPIOG_PIN1                      1U
204
#define GPIOG_PIN2                      2U
205
#define GPIOG_PIN3                      3U
206
#define GPIOG_PIN4                      4U
207
#define GPIOG_PIN5                      5U
208
#define GPIOG_PIN6                      6U
209
#define GPIOG_PIN7                      7U
210
#define GPIOG_PIN8                      8U
211
#define GPIOG_PIN9                      9U
212
#define GPIOG_PIN10                     10U
213
#define GPIOG_PIN11                     11U
214
#define GPIOG_PIN12                     12U
215
#define GPIOG_PIN13                     13U
216
#define GPIOG_PIN14                     14U
217
#define GPIOG_PIN15                     15U
218

    
219
#define GPIOH_OSC_IN                    0U
220
#define GPIOH_OSC_OUT                   1U
221
#define GPIOH_PIN2                      2U
222
#define GPIOH_PIN3                      3U
223
#define GPIOH_PIN4                      4U
224
#define GPIOH_PIN5                      5U
225
#define GPIOH_PIN6                      6U
226
#define GPIOH_PIN7                      7U
227
#define GPIOH_PIN8                      8U
228
#define GPIOH_PIN9                      9U
229
#define GPIOH_PIN10                     10U
230
#define GPIOH_PIN11                     11U
231
#define GPIOH_PIN12                     12U
232
#define GPIOH_PIN13                     13U
233
#define GPIOH_PIN14                     14U
234
#define GPIOH_PIN15                     15U
235

    
236
#define GPIOI_PIN0                      0U
237
#define GPIOI_PIN1                      1U
238
#define GPIOI_PIN2                      2U
239
#define GPIOI_PIN3                      3U
240
#define GPIOI_PIN4                      4U
241
#define GPIOI_PIN5                      5U
242
#define GPIOI_PIN6                      6U
243
#define GPIOI_PIN7                      7U
244
#define GPIOI_PIN8                      8U
245
#define GPIOI_PIN9                      9U
246
#define GPIOI_PIN10                     10U
247
#define GPIOI_PIN11                     11U
248
#define GPIOI_PIN12                     12U
249
#define GPIOI_PIN13                     13U
250
#define GPIOI_PIN14                     14U
251
#define GPIOI_PIN15                     15U
252

    
253
/*
254
 * IO lines assignments.
255
 */
256
#define LINE_WKUP                       PAL_LINE(GPIOA, GPIOA_WKUP)
257
#define LINE_SYS_UART_TX                PAL_LINE(GPIOA, GPIOA_SYS_UART_TX)
258
#define LINE_SYS_UART_RX                PAL_LINE(GPIOA, GPIOA_SYS_UART_RX)
259
#define LINE_SYS_SPI_SS0_N              PAL_LINE(GPIOA, GPIOA_SYS_SPI_SS0_N)
260
#define LINE_SYS_SPI_SCLK               PAL_LINE(GPIOA, GPIOA_SYS_SPI_SCLK)
261
#define LINE_SYS_SPI_MISO               PAL_LINE(GPIOA, GPIOA_SYS_SPI_MISO)
262
#define LINE_SYS_SPI_MOSI               PAL_LINE(GPIOA, GPIOA_SYS_SPI_MOSI)
263
#define LINE_SYS_REG_EN                 PAL_LINE(GPIOA, GPIOA_SYS_REG_EN)
264
#define LINE_PROG_RX                    PAL_LINE(GPIOA, GPIOA_PROG_RX)
265
#define LINE_PROG_TX                    PAL_LINE(GPIOA, GPIOA_PROG_TX)
266
#define LINE_CAN_RX                     PAL_LINE(GPIOA, GPIOA_CAN_RX)
267
#define LINE_CAN_TX                     PAL_LINE(GPIOA, GPIOA_CAN_TX)
268
#define LINE_SWDIO                      PAL_LINE(GPIOA, GPIOA_SWDIO)
269
#define LINE_SWCLK                      PAL_LINE(GPIOA, GPIOA_SWCLK)
270
#define LINE_SYS_SPI_SS1_N              PAL_LINE(GPIOA, GPIOA_SYS_SPI_SS1_N)
271

    
272
#define LINE_IR_INT1_N                  PAL_LINE(GPIOB, GPIOB_IR_INT1_N)
273
#define LINE_VSYS_SENSE                 PAL_LINE(GPIOB, GPIOB_VSYS_SENSE)
274
#define LINE_POWER_EN                   PAL_LINE(GPIOB, GPIOB_POWER_EN)
275
#define LINE_SYS_UART_DN                PAL_LINE(GPIOB, GPIOB_SYS_UART_DN)
276
#define LINE_CHARGE_STAT2A              PAL_LINE(GPIOB, GPIOB_CHARGE_STAT2A)
277
#define LINE_BUZZER                     PAL_LINE(GPIOB, GPIOB_BUZZER)
278
#define LINE_GAUGE_BATLOW2              PAL_LINE(GPIOB, GPIOB_GAUGE_BATLOW2)
279
#define LINE_GAUGE_BATGD2_N             PAL_LINE(GPIOB, GPIOB_GAUGE_BATGD2_N)
280
#define LINE_GAUGE_SCL2                 PAL_LINE(GPIOB, GPIOB_GAUGE_SCL2)
281
#define LINE_GAUGE_SDA2                 PAL_LINE(GPIOB, GPIOB_GAUGE_SDA2)
282
#define LINE_GAUGE_SCL1                 PAL_LINE(GPIOB, GPIOB_GAUGE_SCL1)
283
#define LINE_GAUGE_SDA1                 PAL_LINE(GPIOB, GPIOB_GAUGE_SDA1)
284
#define LINE_LED                        PAL_LINE(GPIOB, GPIOB_LED)
285
#define LINE_BT_RTS                     PAL_LINE(GPIOB, GPIOB_BT_RTS)
286
#define LINE_BT_CTS                     PAL_LINE(GPIOB, GPIOB_BT_CTS)
287
#define LINE_SYS_UART_UP                PAL_LINE(GPIOB, GPIOB_SYS_UART_UP)
288

    
289
#define LINE_CHARGE_STAT1A              PAL_LINE(GPIOC, GPIOC_CHARGE_STAT1A)
290
#define LINE_GAUGE_BATLOW1              PAL_LINE(GPIOC, GPIOC_GAUGE_BATLOW1)
291
#define LINE_GAUGE_BATGD1_N             PAL_LINE(GPIOC, GPIOC_GAUGE_BATGD1_N)
292
#define LINE_CHARGE_EN1_N               PAL_LINE(GPIOC, GPIOC_CHARGE_EN1_N)
293
#define LINE_IR_INT2_N                  PAL_LINE(GPIOC, GPIOC_IR_INT2_N)
294
#define LINE_TOUCH_INT_N                PAL_LINE(GPIOC, GPIOC_TOUCH_INT_N)
295
#define LINE_SYS_DONE                   PAL_LINE(GPIOC, GPIOC_SYS_DONE)
296
#define LINE_SYS_PROG_N                 PAL_LINE(GPIOC, GPIOC_SYS_PROG_N)
297
#define LINE_PATH_DC                    PAL_LINE(GPIOC, GPIOC_PATH_DC)
298
#define LINE_SYS_SPI_DIR                PAL_LINE(GPIOC, GPIOC_SYS_SPI_DIR)
299
#define LINE_BT_RX                      PAL_LINE(GPIOC, GPIOC_BT_RX)
300
#define LINE_BT_TX                      PAL_LINE(GPIOC, GPIOC_BT_TX)
301
#define LINE_SYS_INT_N                  PAL_LINE(GPIOC, GPIOC_SYS_INT_N)
302
#define LINE_SYS_PD_N                   PAL_LINE(GPIOC, GPIOC_SYS_PD_N)
303
#define LINE_SYS_WARMRST_N              PAL_LINE(GPIOC, GPIOC_SYS_WARMRST_N)
304
#define LINE_BT_RST                     PAL_LINE(GPIOC, GPIOC_BT_RST)
305

    
306
#define LINE_CHARGE_EN2_N               PAL_LINE(GPIOD, GPIOD_CHARGE_EN2_N)
307

    
308
#define LINE_OSC_IN                     PAL_LINE(GPIOH, 0U)
309
#define LINE_OSC_OUT                    PAL_LINE(GPIOH, 1U)
310

    
311
/*
312
 * I/O ports initial setup, this configuration is established soon after reset
313
 * in the initialization code.
314
 * Please refer to the STM32 Reference Manual for details.
315
 */
316
#define PIN_IGNORE(n)                   (1U << (n))
317
#define PIN_MODE_INPUT(n)               (0U << ((n) * 2U))
318
#define PIN_MODE_OUTPUT(n)              (1U << ((n) * 2U))
319
#define PIN_MODE_ALTERNATE(n)           (2U << ((n) * 2U))
320
#define PIN_MODE_ANALOG(n)              (3U << ((n) * 2U))
321
#define PIN_ODR_LOW(n)                  (0U << (n))
322
#define PIN_ODR_HIGH(n)                 (1U << (n))
323
#define PIN_OTYPE_PUSHPULL(n)           (0U << (n))
324
#define PIN_OTYPE_OPENDRAIN(n)          (1U << (n))
325
#define PIN_OSPEED_LOW(n)               (0U << ((n) * 2U))
326
#define PIN_OSPEED_MEDIUM(n)            (1U << ((n) * 2U))
327
#define PIN_OSPEED_HIGH(n)              (2U << ((n) * 2U))
328
#define PIN_OSPEED_VERYHIGH(n)          (3U << ((n) * 2U))
329
#define PIN_PUPDR_FLOATING(n)           (0U << ((n) * 2U))
330
#define PIN_PUPDR_PULLUP(n)             (1U << ((n) * 2U))
331
#define PIN_PUPDR_PULLDOWN(n)           (2U << ((n) * 2U))
332
#define PIN_AFIO_AF(n, v)               ((v) << (((n) % 8U) * 4U))
333

    
334
/*
335
 * GPIOA setup:
336
 *
337
 * PA0  - WKUP                          (input floating)
338
 * PA1  - PIN1                          (input pullup)
339
 * PA2  - SYS_UART_TX                   (input floating)
340
 * PA3  - SYS_UART_RX                   (alternate 7 pushpull floating)
341
 * PA4  - SYS_SPI_SS0_N                 (input floating)
342
 * PA5  - SYS_SPI_SCLK                  (alternate 5 pushpull floating)
343
 * PA6  - SYS_SPI_MISO                  (alternate 5 pushpull floating)
344
 * PA7  - SYS_SPI_MOSI                  (alternate 5 pushpull floating)
345
 * PA8  - SYS_REG_EN                    (output pushpull high)
346
 * PA9  - PROG_RX                       (alternate 7 pushpull floating)
347
 * PA10 - PROG_TX                       (alternate 7 pushpull pullup)
348
 * PA11 - CAN_RX                        (alternate 9 pushpull floating)
349
 * PA12 - CAN_TX                        (alternate 9 pushpull floating)
350
 * PA13 - SWDIO                         (alternate 0 pushpull floating)
351
 * PA14 - SWCLK                         (alternate 0 pushpull floating)
352
 * PA15 - SYS_SPI_SS1_N                 (input floating)
353
 */
354
#define VAL_GPIOA_IGNORE                0
355
#define VAL_GPIOA_MODER                 (PIN_MODE_INPUT(GPIOA_WKUP) |                                 \
356
                                         PIN_MODE_INPUT(GPIOA_PIN1) |                                 \
357
                                         PIN_MODE_INPUT(GPIOA_SYS_UART_TX) |                          \
358
                                         PIN_MODE_ALTERNATE(GPIOA_SYS_UART_RX) |                      \
359
                                         PIN_MODE_INPUT(GPIOA_SYS_SPI_SS0_N) |                        \
360
                                         PIN_MODE_ALTERNATE(GPIOA_SYS_SPI_SCLK) |                     \
361
                                         PIN_MODE_ALTERNATE(GPIOA_SYS_SPI_MISO) |                     \
362
                                         PIN_MODE_ALTERNATE(GPIOA_SYS_SPI_MOSI) |                     \
363
                                         PIN_MODE_OUTPUT(GPIOA_SYS_REG_EN) |                          \
364
                                         PIN_MODE_ALTERNATE(GPIOA_PROG_RX) |                          \
365
                                         PIN_MODE_ALTERNATE(GPIOA_PROG_TX) |                          \
366
                                         PIN_MODE_ALTERNATE(GPIOA_CAN_RX) |                           \
367
                                         PIN_MODE_ALTERNATE(GPIOA_CAN_TX) |                           \
368
                                         PIN_MODE_ALTERNATE(GPIOA_SWDIO) |                            \
369
                                         PIN_MODE_ALTERNATE(GPIOA_SWCLK) |                            \
370
                                         PIN_MODE_INPUT(GPIOA_SYS_SPI_SS1_N))
371
#define VAL_GPIOA_OTYPER                (PIN_OTYPE_PUSHPULL(GPIOA_WKUP) |                             \
372
                                         PIN_OTYPE_PUSHPULL(GPIOA_PIN1) |                             \
373
                                         PIN_OTYPE_PUSHPULL(GPIOA_SYS_UART_TX) |                      \
374
                                         PIN_OTYPE_PUSHPULL(GPIOA_SYS_UART_RX) |                      \
375
                                         PIN_OTYPE_PUSHPULL(GPIOA_SYS_SPI_SS0_N) |                    \
376
                                         PIN_OTYPE_PUSHPULL(GPIOA_SYS_SPI_SCLK) |                     \
377
                                         PIN_OTYPE_PUSHPULL(GPIOA_SYS_SPI_MISO) |                     \
378
                                         PIN_OTYPE_PUSHPULL(GPIOA_SYS_SPI_MOSI) |                     \
379
                                         PIN_OTYPE_PUSHPULL(GPIOA_SYS_REG_EN) |                       \
380
                                         PIN_OTYPE_PUSHPULL(GPIOA_PROG_RX) |                          \
381
                                         PIN_OTYPE_PUSHPULL(GPIOA_PROG_TX) |                          \
382
                                         PIN_OTYPE_PUSHPULL(GPIOA_CAN_RX) |                           \
383
                                         PIN_OTYPE_PUSHPULL(GPIOA_CAN_TX) |                           \
384
                                         PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) |                            \
385
                                         PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) |                            \
386
                                         PIN_OTYPE_PUSHPULL(GPIOA_SYS_SPI_SS1_N))
387
#define VAL_GPIOA_OSPEEDR               (PIN_OSPEED_VERYHIGH(GPIOA_WKUP) |                            \
388
                                         PIN_OSPEED_VERYHIGH(GPIOA_PIN1) |                            \
389
                                         PIN_OSPEED_VERYHIGH(GPIOA_SYS_UART_TX) |                     \
390
                                         PIN_OSPEED_VERYHIGH(GPIOA_SYS_UART_RX) |                     \
391
                                         PIN_OSPEED_VERYHIGH(GPIOA_SYS_SPI_SS0_N) |                   \
392
                                         PIN_OSPEED_VERYHIGH(GPIOA_SYS_SPI_SCLK) |                    \
393
                                         PIN_OSPEED_VERYHIGH(GPIOA_SYS_SPI_MISO) |                    \
394
                                         PIN_OSPEED_VERYHIGH(GPIOA_SYS_SPI_MOSI) |                    \
395
                                         PIN_OSPEED_VERYHIGH(GPIOA_SYS_REG_EN) |                      \
396
                                         PIN_OSPEED_VERYHIGH(GPIOA_PROG_RX) |                         \
397
                                         PIN_OSPEED_VERYHIGH(GPIOA_PROG_TX) |                         \
398
                                         PIN_OSPEED_VERYHIGH(GPIOA_CAN_RX) |                          \
399
                                         PIN_OSPEED_VERYHIGH(GPIOA_CAN_TX) |                          \
400
                                         PIN_OSPEED_VERYHIGH(GPIOA_SWDIO) |                           \
401
                                         PIN_OSPEED_VERYHIGH(GPIOA_SWCLK) |                           \
402
                                         PIN_OSPEED_VERYHIGH(GPIOA_SYS_SPI_SS1_N))
403
#define VAL_GPIOA_PUPDR                 (PIN_PUPDR_FLOATING(GPIOA_WKUP) |                             \
404
                                         PIN_PUPDR_PULLUP(GPIOA_PIN1) |                               \
405
                                         PIN_PUPDR_FLOATING(GPIOA_SYS_UART_TX) |                      \
406
                                         PIN_PUPDR_FLOATING(GPIOA_SYS_UART_RX) |                      \
407
                                         PIN_PUPDR_FLOATING(GPIOA_SYS_SPI_SS0_N) |                    \
408
                                         PIN_PUPDR_FLOATING(GPIOA_SYS_SPI_SCLK) |                     \
409
                                         PIN_PUPDR_FLOATING(GPIOA_SYS_SPI_MISO) |                     \
410
                                         PIN_PUPDR_FLOATING(GPIOA_SYS_SPI_MOSI) |                     \
411
                                         PIN_PUPDR_FLOATING(GPIOA_SYS_REG_EN) |                       \
412
                                         PIN_PUPDR_FLOATING(GPIOA_PROG_RX) |                          \
413
                                         PIN_PUPDR_PULLUP(GPIOA_PROG_TX) |                            \
414
                                         PIN_PUPDR_FLOATING(GPIOA_CAN_RX) |                           \
415
                                         PIN_PUPDR_FLOATING(GPIOA_CAN_TX) |                           \
416
                                         PIN_PUPDR_FLOATING(GPIOA_SWDIO) |                            \
417
                                         PIN_PUPDR_FLOATING(GPIOA_SWCLK) |                            \
418
                                         PIN_PUPDR_FLOATING(GPIOA_SYS_SPI_SS1_N))
419
#define VAL_GPIOA_ODR                   (PIN_ODR_HIGH(GPIOA_WKUP) |                                   \
420
                                         PIN_ODR_HIGH(GPIOA_PIN1) |                                   \
421
                                         PIN_ODR_HIGH(GPIOA_SYS_UART_TX) |                            \
422
                                         PIN_ODR_HIGH(GPIOA_SYS_UART_RX) |                            \
423
                                         PIN_ODR_HIGH(GPIOA_SYS_SPI_SS0_N) |                          \
424
                                         PIN_ODR_HIGH(GPIOA_SYS_SPI_SCLK) |                           \
425
                                         PIN_ODR_HIGH(GPIOA_SYS_SPI_MISO) |                           \
426
                                         PIN_ODR_HIGH(GPIOA_SYS_SPI_MOSI) |                           \
427
                                         PIN_ODR_HIGH(GPIOA_SYS_REG_EN) |                             \
428
                                         PIN_ODR_HIGH(GPIOA_PROG_RX) |                                \
429
                                         PIN_ODR_HIGH(GPIOA_PROG_TX) |                                \
430
                                         PIN_ODR_HIGH(GPIOA_CAN_RX) |                                 \
431
                                         PIN_ODR_HIGH(GPIOA_CAN_TX) |                                 \
432
                                         PIN_ODR_HIGH(GPIOA_SWDIO) |                                  \
433
                                         PIN_ODR_HIGH(GPIOA_SWCLK) |                                  \
434
                                         PIN_ODR_HIGH(GPIOA_SYS_SPI_SS1_N))
435
#define VAL_GPIOA_AFRL                  (PIN_AFIO_AF(GPIOA_WKUP, STM32F4xx_AF_system) |               \
436
                                         PIN_AFIO_AF(GPIOA_PIN1, STM32F4xx_AF_system) |               \
437
                                         PIN_AFIO_AF(GPIOA_SYS_UART_TX, STM32F4xx_AF_USART1to3) |     \
438
                                         PIN_AFIO_AF(GPIOA_SYS_UART_RX, STM32F4xx_AF_USART1to3) |     \
439
                                         PIN_AFIO_AF(GPIOA_SYS_SPI_SS0_N, STM32F4xx_AF_system) |      \
440
                                         PIN_AFIO_AF(GPIOA_SYS_SPI_SCLK, STM32F4xx_AF_SPI1to2) |      \
441
                                         PIN_AFIO_AF(GPIOA_SYS_SPI_MISO, STM32F4xx_AF_SPI1to2) |      \
442
                                         PIN_AFIO_AF(GPIOA_SYS_SPI_MOSI, STM32F4xx_AF_SPI1to2))
443
#define VAL_GPIOA_AFRH                  (PIN_AFIO_AF(GPIOA_SYS_REG_EN, STM32F4xx_AF_system) |         \
444
                                         PIN_AFIO_AF(GPIOA_PROG_RX, STM32F4xx_AF_USART1to3) |         \
445
                                         PIN_AFIO_AF(GPIOA_PROG_TX, STM32F4xx_AF_USART1to3) |         \
446
                                         PIN_AFIO_AF(GPIOA_CAN_RX, STM32F4xx_AF_CAN1to2_TIM12to14) |  \
447
                                         PIN_AFIO_AF(GPIOA_CAN_TX, STM32F4xx_AF_CAN1to2_TIM12to14) |  \
448
                                         PIN_AFIO_AF(GPIOA_SWDIO, STM32F4xx_AF_system) |              \
449
                                         PIN_AFIO_AF(GPIOA_SWCLK, STM32F4xx_AF_system) |              \
450
                                         PIN_AFIO_AF(GPIOA_SYS_SPI_SS1_N, STM32F4xx_AF_system))
451

    
452
/*
453
 * GPIOB setup:
454
 *
455
 * PB0  - IR_INT1_N                     (input floating)
456
 * PB1  - VSYS_SENSE                    (analog)
457
 * PB2  - POWER_EN                      (output pushpull high)
458
 * PB3  - SYS_UART_DN                   (output opendrain high)
459
 * PB4  - CHARGE_STAT2A                 (inout floating)
460
 * PB5  - BUZZER                        (alternate 2 pushpull floating)
461
 * PB6  - GAUGE_BATLOW2                 (input floating)
462
 * PB7  - GAUGE_BATGD2_N                (input floating)
463
 * PB8  - GAUGE_SCL2                    (alternate 4 opendrain floating)
464
 * PB9  - GAUGE_SDA2                    (alternate 4 opendrain floating)
465
 * PB10 - GAUGE_SCL1                    (alternate 4 opendrain floating)
466
 * PB11 - GAUGE_SDA1                    (alternate 4 opendrain floating)
467
 * PB12 - LED                           (output opendrain high)
468
 * PB13 - BT_RTS                        (alternate 7 pushpull floating)
469
 * PB14 - BT_CTS                        (inout floating)
470
 * PB15 - SYS_UART_UP                   (output opendrain high)
471
 */
472
#define VAL_GPIOB_IGNORE                (PIN_IGNORE(GPIOB_POWER_EN) |                                 \
473
                                         PIN_IGNORE(GPIOB_SYS_UART_DN) |                              \
474
                                         PIN_IGNORE(GPIOB_LED) |                                      \
475
                                         PIN_IGNORE(GPIOB_SYS_UART_UP)) & 0
476
#define VAL_GPIOB_MODER                 (PIN_MODE_INPUT(GPIOB_IR_INT1_N) |                            \
477
                                         PIN_MODE_ANALOG(GPIOB_VSYS_SENSE) |                          \
478
                                         PIN_MODE_OUTPUT(GPIOB_POWER_EN) |                            \
479
                                         PIN_MODE_OUTPUT(GPIOB_SYS_UART_DN) |                         \
480
                                         PIN_MODE_INPUT(GPIOB_CHARGE_STAT2A) |                        \
481
                                         PIN_MODE_ALTERNATE(GPIOB_BUZZER) |                           \
482
                                         PIN_MODE_INPUT(GPIOB_GAUGE_BATLOW2) |                        \
483
                                         PIN_MODE_INPUT(GPIOB_GAUGE_BATGD2_N) |                       \
484
                                         PIN_MODE_ALTERNATE(GPIOB_GAUGE_SCL2) |                       \
485
                                         PIN_MODE_ALTERNATE(GPIOB_GAUGE_SDA2) |                       \
486
                                         PIN_MODE_ALTERNATE(GPIOB_GAUGE_SCL1) |                       \
487
                                         PIN_MODE_ALTERNATE(GPIOB_GAUGE_SDA1) |                       \
488
                                         PIN_MODE_OUTPUT(GPIOB_LED) |                                 \
489
                                         PIN_MODE_ALTERNATE(GPIOB_BT_RTS) |                           \
490
                                         PIN_MODE_INPUT(GPIOB_BT_CTS) |                               \
491
                                         PIN_MODE_OUTPUT(GPIOB_SYS_UART_UP))
492
#define VAL_GPIOB_OTYPER                (PIN_OTYPE_PUSHPULL(GPIOB_IR_INT1_N) |                        \
493
                                         PIN_OTYPE_PUSHPULL(GPIOB_VSYS_SENSE) |                       \
494
                                         PIN_OTYPE_PUSHPULL(GPIOB_POWER_EN) |                         \
495
                                         PIN_OTYPE_OPENDRAIN(GPIOB_SYS_UART_DN) |                     \
496
                                         PIN_OTYPE_PUSHPULL(GPIOB_CHARGE_STAT2A) |                    \
497
                                         PIN_OTYPE_PUSHPULL(GPIOB_BUZZER) |                           \
498
                                         PIN_OTYPE_PUSHPULL(GPIOB_GAUGE_BATLOW2) |                    \
499
                                         PIN_OTYPE_PUSHPULL(GPIOB_GAUGE_BATGD2_N) |                   \
500
                                         PIN_OTYPE_OPENDRAIN(GPIOB_GAUGE_SCL2) |                      \
501
                                         PIN_OTYPE_OPENDRAIN(GPIOB_GAUGE_SDA2) |                      \
502
                                         PIN_OTYPE_OPENDRAIN(GPIOB_GAUGE_SCL1) |                      \
503
                                         PIN_OTYPE_OPENDRAIN(GPIOB_GAUGE_SDA1) |                      \
504
                                         PIN_OTYPE_OPENDRAIN(GPIOB_LED) |                             \
505
                                         PIN_OTYPE_PUSHPULL(GPIOB_BT_RTS) |                           \
506
                                         PIN_OTYPE_PUSHPULL(GPIOB_BT_CTS) |                           \
507
                                         PIN_OTYPE_OPENDRAIN(GPIOB_SYS_UART_UP))
508
#define VAL_GPIOB_OSPEEDR               (PIN_OSPEED_VERYHIGH(GPIOB_IR_INT1_N) |                       \
509
                                         PIN_OSPEED_VERYHIGH(GPIOB_VSYS_SENSE) |                      \
510
                                         PIN_OSPEED_VERYHIGH(GPIOB_POWER_EN) |                        \
511
                                         PIN_OSPEED_VERYHIGH(GPIOB_SYS_UART_DN) |                     \
512
                                         PIN_OSPEED_VERYHIGH(GPIOB_CHARGE_STAT2A) |                   \
513
                                         PIN_OSPEED_VERYHIGH(GPIOB_BUZZER) |                          \
514
                                         PIN_OSPEED_VERYHIGH(GPIOB_GAUGE_BATLOW2) |                   \
515
                                         PIN_OSPEED_VERYHIGH(GPIOB_GAUGE_BATGD2_N) |                  \
516
                                         PIN_OSPEED_VERYHIGH(GPIOB_GAUGE_SCL2) |                      \
517
                                         PIN_OSPEED_VERYHIGH(GPIOB_GAUGE_SDA2) |                      \
518
                                         PIN_OSPEED_VERYHIGH(GPIOB_GAUGE_SCL1) |                      \
519
                                         PIN_OSPEED_VERYHIGH(GPIOB_GAUGE_SDA1) |                      \
520
                                         PIN_OSPEED_VERYHIGH(GPIOB_LED) |                             \
521
                                         PIN_OSPEED_VERYHIGH(GPIOB_BT_RTS) |                          \
522
                                         PIN_OSPEED_VERYHIGH(GPIOB_BT_CTS) |                          \
523
                                         PIN_OSPEED_VERYHIGH(GPIOB_SYS_UART_UP))
524
#define VAL_GPIOB_PUPDR                 (PIN_PUPDR_FLOATING(GPIOB_IR_INT1_N) |                        \
525
                                         PIN_PUPDR_FLOATING(GPIOB_VSYS_SENSE) |                       \
526
                                         PIN_PUPDR_FLOATING(GPIOB_POWER_EN) |                         \
527
                                         PIN_PUPDR_FLOATING(GPIOB_SYS_UART_DN) |                      \
528
                                         PIN_PUPDR_FLOATING(GPIOB_CHARGE_STAT2A) |                    \
529
                                         PIN_PUPDR_FLOATING(GPIOB_BUZZER) |                           \
530
                                         PIN_PUPDR_FLOATING(GPIOB_GAUGE_BATLOW2) |                    \
531
                                         PIN_PUPDR_FLOATING(GPIOB_GAUGE_BATGD2_N) |                   \
532
                                         PIN_PUPDR_FLOATING(GPIOB_GAUGE_SCL2) |                       \
533
                                         PIN_PUPDR_FLOATING(GPIOB_GAUGE_SDA2) |                       \
534
                                         PIN_PUPDR_FLOATING(GPIOB_GAUGE_SCL1) |                       \
535
                                         PIN_PUPDR_FLOATING(GPIOB_GAUGE_SDA1) |                       \
536
                                         PIN_PUPDR_FLOATING(GPIOB_LED) |                              \
537
                                         PIN_PUPDR_FLOATING(GPIOB_BT_RTS) |                           \
538
                                         PIN_PUPDR_FLOATING(GPIOB_BT_CTS) |                           \
539
                                         PIN_PUPDR_FLOATING(GPIOB_SYS_UART_UP))
540
#define VAL_GPIOB_ODR                   (PIN_ODR_HIGH(GPIOB_IR_INT1_N) |                              \
541
                                         PIN_ODR_HIGH(GPIOB_VSYS_SENSE) |                             \
542
                                         PIN_ODR_HIGH(GPIOB_POWER_EN) |                               \
543
                                         PIN_ODR_HIGH(GPIOB_SYS_UART_DN) |                            \
544
                                         PIN_ODR_HIGH(GPIOB_CHARGE_STAT2A) |                          \
545
                                         PIN_ODR_HIGH(GPIOB_BUZZER) |                                 \
546
                                         PIN_ODR_HIGH(GPIOB_GAUGE_BATLOW2) |                          \
547
                                         PIN_ODR_HIGH(GPIOB_GAUGE_BATGD2_N) |                         \
548
                                         PIN_ODR_HIGH(GPIOB_GAUGE_SCL2) |                             \
549
                                         PIN_ODR_HIGH(GPIOB_GAUGE_SDA2) |                             \
550
                                         PIN_ODR_HIGH(GPIOB_GAUGE_SCL1) |                             \
551
                                         PIN_ODR_HIGH(GPIOB_GAUGE_SDA1) |                             \
552
                                         PIN_ODR_HIGH(GPIOB_LED) |                                    \
553
                                         PIN_ODR_HIGH(GPIOB_BT_RTS) |                                 \
554
                                         PIN_ODR_HIGH(GPIOB_BT_CTS) |                                 \
555
                                         PIN_ODR_HIGH(GPIOB_SYS_UART_UP))
556
#define VAL_GPIOB_AFRL                  (PIN_AFIO_AF(GPIOB_IR_INT1_N, STM32F4xx_AF_system) |          \
557
                                         PIN_AFIO_AF(GPIOB_VSYS_SENSE, STM32F4xx_AF_system) |         \
558
                                         PIN_AFIO_AF(GPIOB_POWER_EN, STM32F4xx_AF_system) |           \
559
                                         PIN_AFIO_AF(GPIOB_SYS_UART_DN, STM32F4xx_AF_system) |        \
560
                                         PIN_AFIO_AF(GPIOB_CHARGE_STAT2A, STM32F4xx_AF_system) |      \
561
                                         PIN_AFIO_AF(GPIOB_BUZZER, STM32F4xx_AF_TIM3to5) |            \
562
                                         PIN_AFIO_AF(GPIOB_GAUGE_BATLOW2, STM32F4xx_AF_system) |      \
563
                                         PIN_AFIO_AF(GPIOB_GAUGE_BATGD2_N, STM32F4xx_AF_system))
564
#define VAL_GPIOB_AFRH                  (PIN_AFIO_AF(GPIOB_GAUGE_SCL2, STM32F4xx_AF_I2C1to3) |        \
565
                                         PIN_AFIO_AF(GPIOB_GAUGE_SDA2, STM32F4xx_AF_I2C1to3) |        \
566
                                         PIN_AFIO_AF(GPIOB_GAUGE_SCL1, STM32F4xx_AF_I2C1to3) |        \
567
                                         PIN_AFIO_AF(GPIOB_GAUGE_SDA1, STM32F4xx_AF_I2C1to3) |        \
568
                                         PIN_AFIO_AF(GPIOB_LED, STM32F4xx_AF_system) |                \
569
                                         PIN_AFIO_AF(GPIOB_BT_RTS, STM32F4xx_AF_USART1to3) |          \
570
                                         PIN_AFIO_AF(GPIOB_BT_CTS, STM32F4xx_AF_USART1to3) |          \
571
                                         PIN_AFIO_AF(GPIOB_SYS_UART_UP, STM32F4xx_AF_system))
572

    
573
/*
574
 * GPIOC setup:
575
 *
576
 * PC0  - CHARGE_STAT1A                 (input floating)
577
 * PC1  - GAUGE_BATLOW1                 (input floating)
578
 * PC2  - GAUGE_BATGD1_N                (input floating)
579
 * PC3  - CHARGE_EN1_N                  (output opendrain high)
580
 * PC4  - IR_INT2_N                     (input floating)
581
 * PC5  - TOUCH_INT_N                   (input floating)
582
 * PC6  - SYS_DONE                      (input floating)
583
 * PC7  - SYS_PROG_N                    (output opendrain high)
584
 * PC8  - PATH_DC                       (input floating)
585
 * PC9  - SYS_SPI_DIR                   (output opendrain high)
586
 * PC10 - BT_RX                         (alternate 7 pushpull floating)
587
 * PC11 - BT_TX                         (alternate 7 pushpull floating)
588
 * PC12 - SYS_INT_N                     (output opendrain low)
589
 * PC13 - SYS_PD_N                      (output opendrain high)
590
 * PC14 - SYS_WARMRST_N                 (output opendrain high)
591
 * PC15 - BT_RST                        (output opendrain high)
592
 */
593
#define VAL_GPIOC_IGNORE                (PIN_IGNORE(GPIOC_CHARGE_EN1_N) |                             \
594
                                         PIN_IGNORE(GPIOC_SYS_INT_N) |                                \
595
                                         PIN_IGNORE(GPIOC_SYS_PD_N)) & 0
596
#define VAL_GPIOC_MODER                 (PIN_MODE_INPUT(GPIOC_CHARGE_STAT1A) |                        \
597
                                         PIN_MODE_INPUT(GPIOC_GAUGE_BATLOW1) |                        \
598
                                         PIN_MODE_INPUT(GPIOC_GAUGE_BATGD1_N) |                       \
599
                                         PIN_MODE_OUTPUT(GPIOC_CHARGE_EN1_N) |                        \
600
                                         PIN_MODE_INPUT(GPIOC_IR_INT2_N) |                            \
601
                                         PIN_MODE_INPUT(GPIOC_TOUCH_INT_N) |                          \
602
                                         PIN_MODE_INPUT(GPIOC_SYS_DONE) |                             \
603
                                         PIN_MODE_OUTPUT(GPIOC_SYS_PROG_N) |                          \
604
                                         PIN_MODE_INPUT(GPIOC_PATH_DC) |                              \
605
                                         PIN_MODE_OUTPUT(GPIOC_SYS_SPI_DIR) |                         \
606
                                         PIN_MODE_ALTERNATE(GPIOC_BT_RX) |                            \
607
                                         PIN_MODE_ALTERNATE(GPIOC_BT_TX) |                            \
608
                                         PIN_MODE_OUTPUT(GPIOC_SYS_INT_N) |                           \
609
                                         PIN_MODE_OUTPUT(GPIOC_SYS_PD_N) |                            \
610
                                         PIN_MODE_OUTPUT(GPIOC_SYS_WARMRST_N) |                       \
611
                                         PIN_MODE_OUTPUT(GPIOC_BT_RST))
612
#define VAL_GPIOC_OTYPER                (PIN_OTYPE_PUSHPULL(GPIOC_CHARGE_STAT1A) |                    \
613
                                         PIN_OTYPE_PUSHPULL(GPIOC_GAUGE_BATLOW1) |