APM:Libraries
boards.h
Go to the documentation of this file.
1 /******************************************************************************
2  * The MIT License
3 
4 (c) 2017 night_ghost@ykoctpa.ru
5 
6 based on:
7 
8  *
9  * Copyright (c) 2010 Bryan Newbold.
10  *
11  * Permission is hereby granted, free of charge, to any person
12  * obtaining a copy of this software and associated documentation
13  * files (the "Software"), to deal in the Software without
14  * restriction, including without limitation the rights to use, copy,
15  * modify, merge, publish, distribute, sublicense, and/or sell copies
16  * of the Software, and to permit persons to whom the Software is
17  * furnished to do so, subject to the following conditions:
18  *
19  * The above copyright notice and this permission notice shall be
20  * included in all copies or substantial portions of the Software.
21  *
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
26  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
28  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29  * SOFTWARE.
30  *****************************************************************************/
31 
51 #ifndef _BOARDS_H_
52 #define _BOARDS_H_
53 
54 #include <hal.h>
55 #include <stm32f4xx_conf.h>
56 #include <hal_types.h>
57 #include <exti.h>
58 #include <gpio_hal.h>
59 #include <timer.h>
60 #include <adc.h>
61 #include <usart.h>
62 #include <pwm_in.h>
63 
64 /* Set of all possible pin names; not all boards have all these (note
65  * that we use the Dx convention since all of the Maple's pins are
66  * "digital" pins (e.g. can be used with digitalRead() and
67  * digitalWrite()), but not all of them are connected to ADCs. */
68 enum {
69  D0=0, D1, D2, D3, D4, D5, D6, D7, D8, D9,
70  D10, D11, D12, D13, D14, D15, D16, D17, D18, D19,
71  D20, D21, D22, D23, D24, D25, D26, D27, D28, D29,
72  D30, D31, D32, D33, D34, D35, D36, D37, D38, D39,
73  D40, D41, D42, D43, D44, D45, D46, D47, D48, D49,
74  D50, D51, D52, D53, D54, D55, D56, D57, D58, D59,
75  D60, D61, D62, D63, D64, D65, D66, D67, D68, D69,
76  D70, D71, D72, D73, D74, D75, D76, D77, D78, D79,
77  D80, D81, D82, D83, D84, D85, D86, D87, D88, D89,
78  D90, D91, D92, D93, D94, D95, D96, D97, D98, D99,
80  D110, D111, };
81 
82 
88 typedef struct stm32_pin_info {
89  const gpio_dev * const gpio_device;
90  const timer_dev * const timer_device;
91  const adc_dev * const adc_device;
92  uint8_t gpio_bit;
94  uint8_t adc_channel;
96 
101 extern const stm32_pin_info PIN_MAP[];
102 
103 
113 void init(void);
114 
115 
125 extern void boardInit(void);
126 
127 
128 #ifdef __cplusplus
129  extern "C" {
130 #endif
131 extern void pre_init(void);
132 
133 void board_set_rtc_register(uint32_t sig, uint16_t reg);
134 uint32_t board_get_rtc_register(uint16_t reg);
135 
136 static inline void goDFU();
137 static inline void goDFU(){ // Reboot to BootROM - to DFU mode
138  asm volatile("\
139  ldr r0, =0x1FFF0000\n\
140  ldr sp,[r0, #0] \n\
141  ldr r0,[r0, #4] \n\
142  bx r0 \n\
143  ");
144 }
145 
146 extern unsigned __isr_vector_start; // defined by link script
147 
148 static inline bool is_bare_metal();
149 static inline bool is_bare_metal() {
150  return (uint32_t)&__isr_vector_start == 0x08000000;
151 }
152 
153 void NMI_Handler();
154 void emerg_delay(uint32_t n);
155 extern void SetSysClock(uint8_t oc);
156 
158 
159 extern void clock_gettime(uint32_t mode, void *ptr);
160 extern void systemInit(uint8_t oc);
161 
162 #ifdef __cplusplus
163  }
164 #endif
165 
166 
167 #ifndef BOARD_NR_GPIO_PINS
168  #error "Board type has not been selected correctly."
169 #endif
170 
171 // pin names, see PIN_MAP array
172 enum {
173  PB10 =0,
174  PB2 =1,
175  PB12 =2,
176  PB13 =3,
177  PB14 =4,
178  PB15 =5,
179  PC0 =6,
180  PC1 =7,
181  PC2 =8,
182  PC3 =9,
183  PC4 =10,
184  PC5 =11,
185  PC6 =12,
186  PC7 =13,
187  PC8 =14,
188  PC9 =15,
189  PC10 =16,
190  PC11 =17,
191  PC12 =18,
192  PC13 =19,
193  PC14 =20,
194  PC15 =21,
195  PA8 =22,
196  PA9 =23,
197  PA10 =24,
198  PB9 =25,
199  PD2 =26,
200  PD3 =27,
201  PD6 =28,
202  PG11 =29,
203  PG12 =30,
204  PG13 =31,
205  PG14 =32,
206  PG8 =33,
207  PG7 =34,
208  PG6 =35,
209  PB5 =36,
210  PB6 =37,
211  PB7 =38,
212  PF6 =39,
213  PF7 =40,
214  PF8 =41,
215  PF9 =42,
216  PF10 =43,
217  PF11 =44,
218  PB1 =45,
219  PB0 =46,
220  PA0 =47,
221  PA1 =48,
222  PA2 =49,
223  PA3 =50,
224  PA4 =51,
225  PA5 =52,
226  PA6 =53,
227  PA7 =54,
228  PF0 =55,
229  PD11 =56,
230  PD14 =57,
231  PF1 =58,
232  PD12 =59,
233  PD15 =60,
234  PF2 =61,
235  PD13 =62,
236  PD0 =63,
237  PF3 =64,
238  PE3 =65,
239  PD1 =66,
240  PF4 =67,
241  PE4 =68,
242  PE7 =69,
243  PF5 =70,
244  PE5 =71,
245  PE8 =72,
246  PF12 =73,
247  PE6 =74,
248  PE9 =75,
249  PF13 =76,
250  PE10 =77,
251  PF14 =78,
252  PG9 =79,
253  PE11 =80,
254  PF15 =81,
255  PG10 =82,
256  PE12 =83,
257  PG0 =84,
258  PD5 =85,
259  PE13 =86,
260  PG1 =87,
261  PD4 =88,
262  PE14 =89,
263  PG2 =90,
264  PE1 =91,
265  PE15 =92,
266  PG3 =93,
267  PE0 =94,
268  PD8 =95,
269  PG4 =96,
270  PD9 =97,
271  PG5 =98,
272  PD10 =99,
273  PB11 =100,
274  PB8 =101,
275  PE2 =102,
276  PA15 =103,
277  PB3 =104,
278  PB4 =105,
279  PA13 =106,
280  PA14 =107,
281  PA11 =108,
282 };
283 
284 /* Set derived definitions */
285 
286 #define CLOCK_SPEED_MHZ CYCLES_PER_MICROSECOND
287 #define CLOCK_SPEED_HZ (CLOCK_SPEED_MHZ * 1000000UL)
288 
289 // PX4 writes as
290 // *(uint32_t *)0x40002850 = 0xb007b007;
291 #define BOOT_RTC_SIGNATURE 0xb007b007
292 #define DFU_RTC_SIGNATURE 0xDEADBEEF
293 #define FORCE_APP_RTC_SIGNATURE 0x4000AbbA
294 
295 
296 #define DSM_BIND_SIGNATURE 0xD82B14D0 // "DSMBIND" last nibble for DSM code
297 #define DSM_BIND_SIGN_MASK 0xF // mask for last nibble - DSM code
298 
299 #define CONSOLE_PORT_SIGNATURE 0xC07501e0 // "console" last nibble for port number
300 #define CONSOLE_PORT_MASK 0xF // mask for last nibble - port number
301 
302 
303 #define MASS_STORAGE_SIGNATURE 0x5106a8ed // "storaged"
304 
305 
306 #define OVERCLOCK_SIGNATURE 0xFACED1A0 // "FaceDia" last nibble for mode
307 #define OVERCLOCK_SIG_MASK 0xF // mode mask
308 #define OV_GUARD_SIGNATURE 0xBABEFACE //
309 #define OV_GUARD_FAIL_SIGNATURE 0xBABEFA17
310 
311 // Backup SRAM registers usage
312 #define RTC_SIGNATURE_REG 0
313 #define RTC_DSM_BIND_REG 1
314 #define RTC_MASS_STORAGE_REG 2
315 #define RTC_CONSOLE_REG 3
316 #define RTC_OVERCLOCK_REG 4
317 #define RTC_OV_GUARD_REG 5
318 
319 
320 
321 
322 #define digitalPinToPort(P) ( PIN_MAP[P].gpio_device )
323 #define digitalPinToBitMask(P) ( BIT(PIN_MAP[P].gpio_bit) )
324 #define portOutputRegister(port) ( &(port->regs->ODR) )
325 #define portInputRegister(port) ( &(port->regs->IDR) )
326 
327 #define portSetRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->BSRR) )
328 #define portClearRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->BRR) )
329 
330 #define portConfigRegister(pin) ( &(PIN_MAP[pin].gpio_device->regs->CRL) )
331 
332 
333 #endif
void(* voidFuncPtr)(void)
Definition: hal_types.h:16
Definition: boards.h:75
Definition: boards.h:75
Definition: boards.h:77
Definition: boards.h:71
Definition: boards.h:71
Definition: boards.h:71
Definition: boards.h:255
Definition: boards.h:199
Definition: boards.h:69
Definition: boards.h:192
Definition: boards.h:75
Definition: boards.h:274
Definition: boards.h:273
const adc_dev *const adc_device
Definition: boards.h:91
Definition: boards.h:262
Definition: boards.h:280
Definition: boards.h:72
void board_set_rtc_register(uint32_t sig, uint16_t reg)
Definition: boards.cpp:141
Definition: boards.h:214
Definition: boards.h:200
Definition: boards.h:183
const stm32_pin_info PIN_MAP[]
Maps each Maple pin to a corresponding stm32_pin_info.
Definition: boards.h:209
Definition: boards.h:218
Definition: boards.h:196
Definition: boards.h:225
Definition: boards.h:79
Definition: boards.h:197
Definition: boards.h:75
Definition: boards.h:80
Definition: boards.h:229
Definition: boards.h:74
Definition: boards.h:217
Definition: boards.h:78
Definition: boards.h:235
Definition: boards.h:230
Definition: boards.h:180
Definition: boards.h:222
void boardInit(void)
Board-specific initialization function.
Definition: board.c:118
Definition: boards.h:74
Definition: boards.h:268
Definition: boards.h:213
Definition: boards.h:73
Definition: boards.h:219
timer_Channel timer_channel
Definition: boards.h:93
Definition: boards.h:193
Definition: boards.h:69
Definition: boards.h:241
Definition: boards.h:79
Definition: boards.h:250
Definition: boards.h:267
Definition: boards.h:253
Definition: boards.h:78
Definition: boards.h:75
Definition: boards.h:223
Definition: boards.h:231
Definition: boards.h:77
Definition: boards.h:246
Definition: boards.h:70
Definition: boards.h:78
Definition: boards.h:78
Definition: boards.h:176
Definition: boards.h:264
Definition: boards.h:73
Definition: boards.h:277
Definition: boards.h:185
Definition: boards.h:77
Definition: boards.h:69
void pre_init(void)
Definition: boards.cpp:250
Definition: boards.h:73
Definition: boards.h:73
Definition: boards.h:74
Definition: boards.h:69
Definition: boards.h:195
Definition: boards.h:72
Definition: boards.h:228
Definition: boards.h:227
Definition: boards.h:224
Definition: boards.h:174
Definition: boards.h:73
Definition: boards.h:248
Definition: boards.h:72
timer interface.
Definition: boards.h:72
Analog-to-Digital Conversion (ADC) header.
Definition: boards.h:78
Definition: boards.h:252
Definition: boards.h:240
Definition: boards.h:78
Definition: boards.h:76
Definition: boards.h:205
Definition: boards.h:69
Definition: boards.h:216
Definition: boards.h:72
Definition: boards.h:77
Definition: boards.h:221
void SetSysClock(uint8_t oc)
Configures the System clock source, PLL Multiplier and Divider factors, AHB/APBx prescalers and Flash...
Definition: boards.h:78
Definition: boards.h:202
Definition: boards.h:201
Definition: boards.h:79
Definition: boards.h:244
Definition: boards.h:220
Definition: boards.h:189
Definition: boards.h:70
Definition: boards.h:179
timer_Channel
Definition: timer.h:441
Definition: boards.h:247
struct stm32_pin_info stm32_pin_info
Stores STM32-specific information related to a given Maple pin.
Definition: boards.h:76
Definition: boards.h:251
Definition: boards.h:272
Definition: boards.h:74
Definition: boards.h:257
Definition: boards.h:76
Definition: boards.h:75
Definition: boards.h:77
Definition: boards.h:261
void clock_gettime(uint32_t mode, void *ptr)
Definition: syscalls.c:201
Definition: boards.h:76
Definition: boards.h:73
Definition: boards.h:76
Definition: boards.h:71
Definition: boards.h:177
Definition: boards.h:69
Definition: boards.h:72
Definition: boards.h:269
Definition: boards.h:79
const timer_dev *const timer_device
Definition: boards.h:90
Definition: boards.h:76
Definition: boards.h:73
Definition: boards.h:69
Definition: boards.h:215
Definition: boards.h:74
Definition: boards.h:233
Definition: boards.h:70
Definition: boards.h:70
void NMI_Handler()
Definition: system.cpp:45
Definition: boards.h:75
Definition: boards.h:254
Definition: boards.h:182
Definition: boards.h:188
Definition: boards.h:190
Definition: boards.h:275
Definition: boards.h:279
Definition: boards.h:181
Definition: boards.h:74
Definition: boards.h:226
Definition: boards.h:78
Definition: boards.h:70
Definition: boards.h:194
Definition: boards.h:75
static void goDFU()
Definition: boards.h:137
Definition: boards.h:69
Definition: boards.h:77
Definition: boards.h:78
Definition: boards.h:239
Definition: boards.h:71
Definition: boards.h:260
Definition: boards.h:79
Definition: boards.h:198
Definition: boards.h:265
Definition: boards.h:70
Definition: boards.h:243
Definition: boards.h:74
Definition: boards.h:278
Definition: boards.h:71
Definition: boards.h:73
Definition: boards.h:69
Definition: boards.h:78
Definition: boards.h:74
Definition: boards.h:186
Definition: boards.h:71
Definition: boards.h:70
Definition: boards.h:79
Definition: boards.h:76
Definition: boards.h:79
Definition: boards.h:73
Definition: boards.h:79
Definition: boards.h:258
Definition: boards.h:270
Definition: boards.h:70
Definition: boards.h:74
Definition: boards.h:79
Definition: boards.h:77
Definition: boards.h:256
Definition: boards.h:232
unsigned __isr_vector_start
Definition: boards.h:242
Definition: adc.h:14
Definition: boards.h:276
Definition: boards.h:76
Definition: boards.h:80
Definition: boards.h:210
Definition: boards.h:237
Definition: boards.h:281
Definition: boards.h:245
Definition: boards.h:212
Definition: boards.h:72
Definition: boards.h:77
void init(void)
Generic board initialization function.
Definition: system.cpp:136
Definition: boards.h:259
Definition: boards.h:70
Definition: boards.h:71
Definition: boards.h:77
Definition: boards.h:236
Definition: boards.h:266
Definition: boards.h:76
Definition: boards.h:72
Definition: boards.h:187
Definition: boards.h:204
Definition: boards.h:75
Definition: boards.h:75
Definition: boards.h:178
Definition: boards.h:191
uint32_t board_get_rtc_register(uint16_t reg)
Definition: boards.cpp:151
Definition: boards.h:238
Definition: boards.h:249
Definition: boards.h:70
Definition: boards.h:69
Definition: boards.h:79
Definition: boards.h:77
Definition: boards.h:72
Definition: boards.h:271
Definition: boards.h:203
Definition: boards.h:74
Definition: boards.h:184
void emerg_delay(uint32_t n)
Definition: boards.cpp:257
Definition: boards.h:71
uint8_t gpio_bit
Definition: boards.h:92
void systemInit(uint8_t oc)
Setup the microcontroller system Initialize the Embedded Flash Interface, the PLL and update the Syst...
Definition: boards.h:207
static bool is_bare_metal()
Definition: boards.h:149
Definition: boards.h:73
Definition: boards.h:173
Definition: boards.h:175
Stores STM32-specific information related to a given Maple pin.
Definition: boards.h:88
Definition: boards.h:263
Definition: boards.h:208
uint8_t adc_channel
Definition: boards.h:94
voidFuncPtr boardEmergencyHandler
Definition: boards.h:71
const gpio_dev *const gpio_device
Definition: boards.h:89
Definition: boards.h:211
Definition: boards.h:76
Definition: boards.h:234
Definition: boards.h:72
Definition: boards.h:206