Paparazzi UAS  v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
common_board.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2022 Freek van Tienen <freek.v.tienen@gmail.com>
3  *
4  * This file is part of Paparazzi.
5  *
6  * Paparazzi is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * Paparazzi is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Paparazzi; see the file COPYING. If not, write to
18  * the Free Software Foundation, 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  *
21  */
22 
27 #ifndef ARCH_COMMON_BOARD_H
28 #define ARCH_COMMON_BOARD_H
32 #include "board.h"
33 #include <hal.h>
34 
35 /*
36  * Concat macro
37  */
38 #define _CONCAT_BOARD_PARAM(_s1, _s2) _s1 ## _s2
39 #define CONCAT_BOARD_PARAM(_s1, _s2) _CONCAT_BOARD_PARAM(_s1, _s2)
40 
41 /*
42  * LEDs
43  */
44 #if defined(LINE_LED1)
45 #ifndef USE_LED_1
46 #define USE_LED_1 1
47 #endif
48 #define LED_1_GPIO PAL_PORT(LINE_LED1)
49 #define LED_1_GPIO_PIN PAL_PAD(LINE_LED1)
50 #define LED_1_GPIO_ON gpio_clear
51 #define LED_1_GPIO_OFF gpio_set
52 #elif defined(LINE_NLED1)
53 #ifndef USE_LED_1
54 #define USE_LED_1 1
55 #endif
56 #define LED_1_GPIO PAL_PORT(LINE_NLED1)
57 #define LED_1_GPIO_PIN PAL_PAD(LINE_NLED1)
58 #define LED_1_GPIO_ON gpio_set
59 #define LED_1_GPIO_OFF gpio_clear
60 #endif
61 
62 #if defined(LINE_LED2)
63 #ifndef USE_LED_2
64 #define USE_LED_2 1
65 #endif
66 #define LED_2_GPIO PAL_PORT(LINE_LED2)
67 #define LED_2_GPIO_PIN PAL_PAD(LINE_LED2)
68 #define LED_2_GPIO_ON gpio_clear
69 #define LED_2_GPIO_OFF gpio_set
70 #elif defined(LINE_NLED2)
71 #ifndef USE_LED_2
72 #define USE_LED_2 1
73 #endif
74 #define LED_2_GPIO PAL_PORT(LINE_NLED2)
75 #define LED_2_GPIO_PIN PAL_PAD(LINE_NLED2)
76 #define LED_2_GPIO_ON gpio_set
77 #define LED_2_GPIO_OFF gpio_clear
78 #endif
79 
80 #if defined(LINE_LED3)
81 #ifndef USE_LED_3
82 #define USE_LED_3 1
83 #endif
84 #define LED_3_GPIO PAL_PORT(LINE_LED3)
85 #define LED_3_GPIO_PIN PAL_PAD(LINE_LED3)
86 #define LED_3_GPIO_ON gpio_clear
87 #define LED_3_GPIO_OFF gpio_set
88 #elif defined(LINE_NLED3)
89 #ifndef USE_LED_3
90 #define USE_LED_3 1
91 #endif
92 #define LED_3_GPIO PAL_PORT(LINE_NLED3)
93 #define LED_3_GPIO_PIN PAL_PAD(LINE_NLED3)
94 #define LED_3_GPIO_ON gpio_set
95 #define LED_3_GPIO_OFF gpio_clear
96 #endif
97 
98 #if defined(LINE_LED4)
99 #ifndef USE_LED_4
100 #define USE_LED_4 1
101 #endif
102 #define LED_4_GPIO PAL_PORT(LINE_LED4)
103 #define LED_4_GPIO_PIN PAL_PAD(LINE_LED4)
104 #define LED_4_GPIO_ON gpio_clear
105 #define LED_4_GPIO_OFF gpio_set
106 #elif defined(LINE_NLED4)
107 #ifndef USE_LED_4
108 #define USE_LED_4 1
109 #endif
110 #define LED_4_GPIO PAL_PORT(LINE_NLED4)
111 #define LED_4_GPIO_PIN PAL_PAD(LINE_NLED4)
112 #define LED_4_GPIO_ON gpio_set
113 #define LED_4_GPIO_OFF gpio_clear
114 #endif
115 
116 #if defined(LINE_LED5)
117 #ifndef USE_LED_5
118 #define USE_LED_5 1
119 #endif
120 #define LED_5_GPIO PAL_PORT(LINE_LED5)
121 #define LED_5_GPIO_PIN PAL_PAD(LINE_LED5)
122 #define LED_5_GPIO_ON gpio_clear
123 #define LED_5_GPIO_OFF gpio_set
124 #elif defined(LINE_NLED5)
125 #ifndef USE_LED_5
126 #define USE_LED_5 1
127 #endif
128 #define LED_5_GPIO PAL_PORT(LINE_NLED5)
129 #define LED_5_GPIO_PIN PAL_PAD(LINE_NLED5)
130 #define LED_5_GPIO_ON gpio_set
131 #define LED_5_GPIO_OFF gpio_clear
132 #endif
133 
134 #if defined(LINE_LED6)
135 #ifndef USE_LED_6
136 #define USE_LED_6 1
137 #endif
138 #define LED_6_GPIO PAL_PORT(LINE_LED6)
139 #define LED_6_GPIO_PIN PAL_PAD(LINE_LED6)
140 #define LED_6_GPIO_ON gpio_clear
141 #define LED_6_GPIO_OFF gpio_set
142 #elif defined(LINE_NLED6)
143 #ifndef USE_LED_6
144 #define USE_LED_6 1
145 #endif
146 #define LED_6_GPIO PAL_PORT(LINE_NLED6)
147 #define LED_6_GPIO_PIN PAL_PAD(LINE_NLED6)
148 #define LED_6_GPIO_ON gpio_set
149 #define LED_6_GPIO_OFF gpio_clear
150 #endif
151 
152 /*
153  * IMU Heater
154  */
155 #if defined(LINE_IMU_HEATER)
156 #define IMU_HEATER_GPIO PAL_PORT(LINE_IMU_HEATER)
157 #define IMU_HEATER_GPIO_PIN PAL_PAD(LINE_IMU_HEATER)
158 #endif
159 
160 /*
161  * ADCs
162  */
163 #if defined(LINE_ADC1)
164 #ifndef USE_ADC_1
165 #define USE_ADC_1 1
166 #endif
167 #if USE_ADC_1
168 #if defined(ADC1_ADC_IN)
169 #define AD1_1_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC1_ADC_IN)
170 #elif defined(ADC1_ADC_INP)
171 #define AD1_1_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC1_ADC_INP)
172 #endif
173 #define ADC_1 AD1_1
174 #define ADC_1_GPIO_PORT PAL_PORT(LINE_ADC1)
175 #define ADC_1_GPIO_PIN PAL_PAD(LINE_ADC1)
176 #endif
177 #endif
178 
179 #if defined(LINE_ADC2)
180 #ifndef USE_ADC_2
181 #define USE_ADC_2 1
182 #endif
183 #if USE_ADC_2
184 #if defined(ADC2_ADC_IN)
185 #define AD1_2_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC2_ADC_IN)
186 #elif defined(ADC2_ADC_INP)
187 #define AD1_2_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC2_ADC_INP)
188 #endif
189 #define ADC_2 AD1_2
190 #define ADC_2_GPIO_PORT PAL_PORT(LINE_ADC2)
191 #define ADC_2_GPIO_PIN PAL_PAD(LINE_ADC2)
192 #endif
193 #endif
194 
195 #if defined(LINE_ADC3)
196 #ifndef USE_ADC_3
197 #define USE_ADC_3 1
198 #endif
199 #if USE_ADC_3
200 #if defined(ADC3_ADC_IN)
201 #define AD1_3_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC3_ADC_IN)
202 #elif defined(ADC3_ADC_INP)
203 #define AD1_3_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC3_ADC_INP)
204 #endif
205 #define ADC_3 AD1_3
206 #define ADC_3_GPIO_PORT PAL_PORT(LINE_ADC3)
207 #define ADC_3_GPIO_PIN PAL_PAD(LINE_ADC3)
208 #endif
209 #endif
210 
211 #if defined(LINE_ADC4)
212 #ifndef USE_ADC_4
213 #define USE_ADC_4 1
214 #endif
215 #if USE_ADC_4
216 #if defined(ADC4_ADC_IN)
217 #define AD1_4_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC4_ADC_IN)
218 #elif defined(ADC4_ADC_INP)
219 #define AD1_4_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC4_ADC_INP)
220 #endif
221 #define ADC_4 AD1_4
222 #define ADC_4_GPIO_PORT PAL_PORT(LINE_ADC4)
223 #define ADC_4_GPIO_PIN PAL_PAD(LINE_ADC4)
224 #endif
225 #endif
226 
227 #if defined(LINE_ADC5)
228 #ifndef USE_ADC_5
229 #define USE_ADC_5 1
230 #endif
231 #if USE_ADC_5
232 #if defined(ADC5_ADC_IN)
233 #define AD1_5_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC5_ADC_IN)
234 #elif defined(ADC5_ADC_INP)
235 #define AD1_5_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC5_ADC_INP)
236 #endif
237 #define ADC_5 AD1_5
238 #define ADC_5_GPIO_PORT PAL_PORT(LINE_ADC5)
239 #define ADC_5_GPIO_PIN PAL_PAD(LINE_ADC5)
240 #endif
241 #endif
242 
243 #if defined(LINE_ADC6)
244 #if USE_ADC_6
245 #if defined(ADC6_ADC_IN)
246 #define AD1_6_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC6_ADC_IN)
247 #elif defined(ADC6_ADC_INP)
248 #define AD1_6_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, ADC6_ADC_INP)
249 #endif
250 #define ADC_6 AD1_6
251 #define ADC_6_GPIO_PORT PAL_PORT(LINE_ADC6)
252 #define ADC_6_GPIO_PIN PAL_PAD(LINE_ADC6)
253 #endif
254 #endif
255 
256 /*
257  * PWM defines
258  */
259 #if defined(LINE_SERVO1)
260 #ifndef USE_PWM1
261 #define USE_PWM1 1
262 #endif
263 #if USE_PWM1
264 #define PWM_SERVO_1 0
265 #define PWM_SERVO_1_GPIO PAL_PORT(LINE_SERVO1)
266 #define PWM_SERVO_1_PIN PAL_PAD(LINE_SERVO1)
267 #define PWM_SERVO_1_AF AF_LINE_SERVO1
268 #define PWM_SERVO_1_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO1_TIM)
269 #define PWM_SERVO_1_CHANNEL (SERVO1_TIM_CH-1)
270 #define PWM_SERVO_1_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO1_TIM)
271 #endif
272 #endif
273 
274 #if defined(LINE_SERVO2)
275 #ifndef USE_PWM2
276 #define USE_PWM2 1
277 #endif
278 #if USE_PWM2
279 #define PWM_SERVO_2 1
280 #define PWM_SERVO_2_GPIO PAL_PORT(LINE_SERVO2)
281 #define PWM_SERVO_2_PIN PAL_PAD(LINE_SERVO2)
282 #define PWM_SERVO_2_AF AF_LINE_SERVO2
283 #define PWM_SERVO_2_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO2_TIM)
284 #define PWM_SERVO_2_CHANNEL (SERVO2_TIM_CH-1)
285 #define PWM_SERVO_2_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO2_TIM)
286 #endif
287 #endif
288 
289 #if defined(LINE_SERVO3)
290 #ifndef USE_PWM3
291 #define USE_PWM3 1
292 #endif
293 #if USE_PWM3
294 #define PWM_SERVO_3 2
295 #define PWM_SERVO_3_GPIO PAL_PORT(LINE_SERVO3)
296 #define PWM_SERVO_3_PIN PAL_PAD(LINE_SERVO3)
297 #define PWM_SERVO_3_AF AF_LINE_SERVO3
298 #define PWM_SERVO_3_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO3_TIM)
299 #define PWM_SERVO_3_CHANNEL (SERVO3_TIM_CH-1)
300 #define PWM_SERVO_3_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO3_TIM)
301 #endif
302 #endif
303 
304 #if defined(LINE_SERVO4)
305 #ifndef USE_PWM4
306 #define USE_PWM4 1
307 #endif
308 #if USE_PWM4
309 #define PWM_SERVO_4 3
310 #define PWM_SERVO_4_GPIO PAL_PORT(LINE_SERVO4)
311 #define PWM_SERVO_4_PIN PAL_PAD(LINE_SERVO4)
312 #define PWM_SERVO_4_AF AF_LINE_SERVO4
313 #define PWM_SERVO_4_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO4_TIM)
314 #define PWM_SERVO_4_CHANNEL (SERVO4_TIM_CH-1)
315 #define PWM_SERVO_4_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO4_TIM)
316 #endif
317 #endif
318 
319 #if defined(LINE_SERVO5)
320 #ifndef USE_PWM5
321 #define USE_PWM5 1
322 #endif
323 #if USE_PWM5
324 #define PWM_SERVO_5 4
325 #define PWM_SERVO_5_GPIO PAL_PORT(LINE_SERVO5)
326 #define PWM_SERVO_5_PIN PAL_PAD(LINE_SERVO5)
327 #define PWM_SERVO_5_AF AF_LINE_SERVO5
328 #define PWM_SERVO_5_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO5_TIM)
329 #define PWM_SERVO_5_CHANNEL (SERVO5_TIM_CH-1)
330 #define PWM_SERVO_5_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO5_TIM)
331 #endif
332 #endif
333 
334 #if defined(LINE_SERVO6)
335 #ifndef USE_PWM6
336 #define USE_PWM6 1
337 #endif
338 #if USE_PWM6
339 #define PWM_SERVO_6 5
340 #define PWM_SERVO_6_GPIO PAL_PORT(LINE_SERVO6)
341 #define PWM_SERVO_6_PIN PAL_PAD(LINE_SERVO6)
342 #define PWM_SERVO_6_AF AF_LINE_SERVO6
343 #define PWM_SERVO_6_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO6_TIM)
344 #define PWM_SERVO_6_CHANNEL (SERVO6_TIM_CH-1)
345 #define PWM_SERVO_6_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO6_TIM)
346 #endif
347 #endif
348 
349 #if defined(LINE_SERVO7)
350 #ifndef USE_PWM7
351 #define USE_PWM7 1
352 #endif
353 #if USE_PWM7
354 #define PWM_SERVO_7 6
355 #define PWM_SERVO_7_GPIO PAL_PORT(LINE_SERVO7)
356 #define PWM_SERVO_7_PIN PAL_PAD(LINE_SERVO7)
357 #define PWM_SERVO_7_AF AF_LINE_SERVO7
358 #define PWM_SERVO_7_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO7_TIM)
359 #define PWM_SERVO_7_CHANNEL (SERVO7_TIM_CH-1)
360 #define PWM_SERVO_7_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO7_TIM)
361 #endif
362 #endif
363 
364 #if defined(LINE_SERVO8)
365 #ifndef USE_PWM8
366 #define USE_PWM8 1
367 #endif
368 #if USE_PWM8
369 #define PWM_SERVO_8 7
370 #define PWM_SERVO_8_GPIO PAL_PORT(LINE_SERVO8)
371 #define PWM_SERVO_8_PIN PAL_PAD(LINE_SERVO8)
372 #define PWM_SERVO_8_AF AF_LINE_SERVO8
373 #define PWM_SERVO_8_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO8_TIM)
374 #define PWM_SERVO_8_CHANNEL (SERVO8_TIM_CH-1)
375 #define PWM_SERVO_8_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO8_TIM)
376 #endif
377 #endif
378 
379 /*
380  * ALARM defines
381  */
382 #if defined(LINE_ALARM)
383 #define ALARM_GPIO PAL_PORT(LINE_ALARM)
384 #define ALARM_PIN PAL_PAD(LINE_ALARM)
385 #define ALARM_AF AF_LINE_SERVO1
386 #define ALARM_DRIVER CONCAT_BOARD_PARAM(PWMD, ALARM_TIM)
387 #define ALARM_CHANNEL (ALARM_TIM_CH-1)
388 #define ALARM_CONF CONCAT_BOARD_PARAM(pwmcfg, ALARM_TIM)
389 #endif
390 
391 /*
392  * PWM input
393  */
394 #define PWM_INPUT1_ICU CONCAT_BOARD_PARAM(ICUD, PWM_INPUT1_TIM)
395 #define PWM_INPUT1_CHANNEL CONCAT_BOARD_PARAM(ICU_CHANNEL_, PWM_INPUT1_TIM_CH)
396 #define PWM_INPUT1_GPIO_PORT PAL_PORT(LINE_PWM_INPUT1)
397 #define PWM_INPUT1_GPIO_PIN PAL_PAD(LINE_PWM_INPUT1)
398 #define PWM_INPUT1_GPIO_AF AF_LINE_PWM_INPUT1
399 
403 #if defined(LINE_UART1_TX)
404 #define UART1_GPIO_PORT_TX PAL_PORT(LINE_UART1_TX)
405 #define UART1_GPIO_TX PAL_PAD(LINE_UART1_TX)
406 #endif
407 #if defined(LINE_UART1_RX)
408 #define UART1_GPIO_PORT_RX PAL_PORT(LINE_UART1_RX)
409 #define UART1_GPIO_RX PAL_PAD(LINE_UART1_RX)
410 #endif
411 #if defined(AF_LINE_UART1_TX)
412 #define UART1_GPIO_AF AF_LINE_UART1_TX
413 #elif defined(AF_LINE_UART1_RX)
414 #define UART1_GPIO_AF AF_LINE_UART1_RX
415 #else
416 #define UART1_GPIO_AF ((void)0)
417 #endif
418 
419 #if defined(LINE_UART2_TX)
420 #define UART2_GPIO_PORT_TX PAL_PORT(LINE_UART2_TX)
421 #define UART2_GPIO_TX PAL_PAD(LINE_UART2_TX)
422 #endif
423 #if defined(LINE_UART2_RX)
424 #define UART2_GPIO_PORT_RX PAL_PORT(LINE_UART2_RX)
425 #define UART2_GPIO_RX PAL_PAD(LINE_UART2_RX)
426 #endif
427 #if defined(AF_LINE_UART2_TX)
428 #define UART2_GPIO_AF AF_LINE_UART2_TX
429 #elif defined(AF_LINE_UART2_RX)
430 #define UART2_GPIO_AF AF_LINE_UART2_RX
431 #else
432 #define UART2_GPIO_AF ((void)0)
433 #endif
434 
435 #if defined(LINE_UART3_TX)
436 #define UART3_GPIO_PORT_TX PAL_PORT(LINE_UART3_TX)
437 #define UART3_GPIO_TX PAL_PAD(LINE_UART3_TX)
438 #endif
439 #if defined(LINE_UART3_RX)
440 #define UART3_GPIO_PORT_RX PAL_PORT(LINE_UART3_RX)
441 #define UART3_GPIO_RX PAL_PAD(LINE_UART3_RX)
442 #endif
443 #if defined(AF_LINE_UART3_TX)
444 #define UART3_GPIO_AF AF_LINE_UART3_TX
445 #elif defined(AF_LINE_UART3_RX)
446 #define UART3_GPIO_AF AF_LINE_UART3_RX
447 #else
448 #define UART3_GPIO_AF ((void)0)
449 #endif
450 
451 #if defined(LINE_UART4_TX)
452 #define UART4_GPIO_PORT_TX PAL_PORT(LINE_UART4_TX)
453 #define UART4_GPIO_TX PAL_PAD(LINE_UART4_TX)
454 #endif
455 #if defined(LINE_UART4_RX)
456 #define UART4_GPIO_PORT_RX PAL_PORT(LINE_UART4_RX)
457 #define UART4_GPIO_RX PAL_PAD(LINE_UART4_RX)
458 #endif
459 #if defined(AF_LINE_UART4_TX)
460 #define UART4_GPIO_AF AF_LINE_UART4_TX
461 #elif defined(AF_LINE_UART4_RX)
462 #define UART4_GPIO_AF AF_LINE_UART4_RX
463 #else
464 #define UART4_GPIO_AF ((void)0)
465 #endif
466 
467 #if defined(LINE_UART5_TX)
468 #define UART5_GPIO_PORT_TX PAL_PORT(LINE_UART5_TX)
469 #define UART5_GPIO_TX PAL_PAD(LINE_UART5_TX)
470 #endif
471 #if defined(LINE_UART5_RX)
472 #define UART5_GPIO_PORT_RX PAL_PORT(LINE_UART5_RX)
473 #define UART5_GPIO_RX PAL_PAD(LINE_UART5_RX)
474 #endif
475 #if defined(AF_LINE_UART5_TX)
476 #define UART5_GPIO_AF AF_LINE_UART5_TX
477 #elif defined(AF_LINE_UART5_RX)
478 #define UART5_GPIO_AF AF_LINE_UART5_RX
479 #else
480 #define UART5_GPIO_AF ((void)0)
481 #endif
482 
483 #if defined(LINE_UART6_TX)
484 #define UART6_GPIO_PORT_TX PAL_PORT(LINE_UART6_TX)
485 #define UART6_GPIO_TX PAL_PAD(LINE_UART6_TX)
486 #endif
487 #if defined(LINE_UART6_RX)
488 #define UART6_GPIO_PORT_RX PAL_PORT(LINE_UART6_RX)
489 #define UART6_GPIO_RX PAL_PAD(LINE_UART6_RX)
490 #endif
491 #if defined(AF_LINE_UART6_TX)
492 #define UART6_GPIO_AF AF_LINE_UART6_TX
493 #elif defined(AF_LINE_UART6_RX)
494 #define UART6_GPIO_AF AF_LINE_UART6_RX
495 #else
496 #define UART6_GPIO_AF ((void)0)
497 #endif
498 
499 #if defined(LINE_UART7_TX)
500 #define UART7_GPIO_PORT_TX PAL_PORT(LINE_UART7_TX)
501 #define UART7_GPIO_TX PAL_PAD(LINE_UART7_TX)
502 #endif
503 #if defined(LINE_UART7_RX)
504 #define UART7_GPIO_PORT_RX PAL_PORT(LINE_UART7_RX)
505 #define UART7_GPIO_RX PAL_PAD(LINE_UART7_RX)
506 #endif
507 #if defined(AF_LINE_UART7_TX)
508 #define UART7_GPIO_AF AF_LINE_UART7_TX
509 #elif defined(AF_LINE_UART7_RX)
510 #define UART7_GPIO_AF AF_LINE_UART7_RX
511 #else
512 #define UART7_GPIO_AF ((void)0)
513 #endif
514 
515 #if defined(LINE_UART8_TX)
516 #define UART8_GPIO_PORT_TX PAL_PORT(LINE_UART8_TX)
517 #define UART8_GPIO_TX PAL_PAD(LINE_UART8_TX)
518 #endif
519 #if defined(LINE_UART8_RX)
520 #define UART8_GPIO_PORT_RX PAL_PORT(LINE_UART8_RX)
521 #define UART8_GPIO_RX PAL_PAD(LINE_UART8_RX)
522 #endif
523 #if defined(AF_LINE_UART8_TX)
524 #define UART8_GPIO_AF AF_LINE_UART8_TX
525 #elif defined(AF_LINE_UART8_RX)
526 #define UART8_GPIO_AF AF_LINE_UART8_RX
527 #else
528 #define UART8_GPIO_AF ((void)0)
529 #endif
530 
534 // Digital noise filter: 0 disabled, [0x1 - 0xF] enable up to n t_I2CCLK
535 #define STM32_CR1_DNF(n) ((n & 0x0f) << 8)
536 
537 // Timing register
538 #if defined(STM32F7XX)
539 #define I2C_CFG_100KHZ_TIMINGR (STM32_TIMINGR_PRESC(3U) | STM32_TIMINGR_SCLDEL(8U) | STM32_TIMINGR_SDADEL(1U) | STM32_TIMINGR_SCLH(46U) | STM32_TIMINGR_SCLL(62U)) // 0x30812E3E
540 #define I2C_CFG_400KHZ_TIMINGR (STM32_TIMINGR_PRESC(6U) | STM32_TIMINGR_SCLDEL(0U) | STM32_TIMINGR_SDADEL(0U) | STM32_TIMINGR_SCLH(3U) | STM32_TIMINGR_SCLL(13U)) // 0x6000030D
541 #elif defined(STM32H7XX)
542 #define I2C_CFG_100KHZ_TIMINGR (STM32_TIMINGR_PRESC(0U) | STM32_TIMINGR_SCLDEL(7U) | STM32_TIMINGR_SDADEL(0U) | STM32_TIMINGR_SCLH(124U) | STM32_TIMINGR_SCLL(187U)) // 0x00707CBB
543 #define I2C_CFG_400KHZ_TIMINGR (STM32_TIMINGR_PRESC(0U) | STM32_TIMINGR_SCLDEL(3U) | STM32_TIMINGR_SDADEL(0U) | STM32_TIMINGR_SCLH(15U) | STM32_TIMINGR_SCLL(56U)) // 0x00300F38
544 #endif
545 
546 
547 #ifndef I2C1_CLOCK_SPEED
548 #define I2C1_CLOCK_SPEED 400000
549 #endif
550 
551 #if I2C1_CLOCK_SPEED == 400000
552 #define I2C1_CFG_DEF { \
553  .timingr = I2C_CFG_400KHZ_TIMINGR, \
554  .cr1 = STM32_CR1_DNF(0), \
555  .cr2 = 0 \
556 }
557 #elif I2C1_CLOCK_SPEED == 100000
558 #define I2C1_CFG_DEF { \
559  .timingr = I2C_CFG_100KHZ_TIMINGR, \
560  .cr1 = STM32_CR1_DNF(0), \
561  .cr2 = 0 \
562 }
563 #else
564 #error "Unknown I2C1 clock speed"
565 #endif
566 
567 #ifndef I2C2_CLOCK_SPEED
568 #define I2C2_CLOCK_SPEED 400000
569 #endif
570 
571 #if I2C2_CLOCK_SPEED == 400000
572 #define I2C2_CFG_DEF { \
573  .timingr = I2C_CFG_400KHZ_TIMINGR, \
574  .cr1 = STM32_CR1_DNF(0), \
575  .cr2 = 0 \
576 }
577 #elif I2C2_CLOCK_SPEED == 100000
578 #define I2C2_CFG_DEF { \
579  .timingr = I2C_CFG_100KHZ_TIMINGR, \
580  .cr1 = STM32_CR1_DNF(0), \
581  .cr2 = 0 \
582 }
583 #else
584 #error "Unknown I2C2 clock speed"
585 #endif
586 
587 #ifndef I2C3_CLOCK_SPEED
588 #define I2C3_CLOCK_SPEED 400000
589 #endif
590 
591 #if I2C3_CLOCK_SPEED == 400000
592 #define I2C3_CFG_DEF { \
593  .timingr = I2C_CFG_400KHZ_TIMINGR, \
594  .cr1 = STM32_CR1_DNF(0), \
595  .cr2 = 0 \
596 }
597 #elif I2C3_CLOCK_SPEED == 100000
598 #define I2C3_CFG_DEF { \
599  .timingr = I2C_CFG_100KHZ_TIMINGR, \
600  .cr1 = STM32_CR1_DNF(0), \
601  .cr2 = 0 \
602 }
603 #else
604 #error "Unknown I2C3 clock speed"
605 #endif
606 
607 #ifndef I2C4_CLOCK_SPEED
608 #define I2C4_CLOCK_SPEED 400000
609 #endif
610 
611 #if I2C4_CLOCK_SPEED == 400000
612 #define I2C4_CFG_DEF { \
613  .timingr = I2C_CFG_400KHZ_TIMINGR, \
614  .cr1 = STM32_CR1_DNF(0), \
615  .cr2 = 0 \
616 }
617 #elif I2C4_CLOCK_SPEED == 100000
618 #define I2C4_CFG_DEF { \
619  .timingr = I2C_CFG_100KHZ_TIMINGR, \
620  .cr1 = STM32_CR1_DNF(0), \
621  .cr2 = 0 \
622 }
623 #else
624 #error "Unknown I2C4 clock speed"
625 #endif
626 
630 #if defined(LINE_SPI1_MISO) && defined(LINE_SPI1_MOSI) && defined(LINE_SPI1_SCK)
631 #define SPI1_GPIO_PORT_MISO PAL_PORT(LINE_SPI1_MISO)
632 #define SPI1_GPIO_MISO PAL_PAD(LINE_SPI1_MISO)
633 #define SPI1_GPIO_PORT_MOSI PAL_PORT(LINE_SPI1_MOSI)
634 #define SPI1_GPIO_MOSI PAL_PAD(LINE_SPI1_MOSI)
635 #define SPI1_GPIO_PORT_SCK PAL_PORT(LINE_SPI1_SCK)
636 #define SPI1_GPIO_SCK PAL_PAD(LINE_SPI1_SCK)
637 
638 #if defined(AF_LINE_SPI1_SCK)
639 #define SPI1_GPIO_AF AF_LINE_SPI1_SCK
640 #endif
641 #endif
642 
643 #if defined(LINE_SPI2_MISO) && defined(LINE_SPI2_MOSI) && defined(LINE_SPI2_SCK)
644 #define SPI2_GPIO_PORT_MISO PAL_PORT(LINE_SPI2_MISO)
645 #define SPI2_GPIO_MISO PAL_PAD(LINE_SPI2_MISO)
646 #define SPI2_GPIO_PORT_MOSI PAL_PORT(LINE_SPI2_MOSI)
647 #define SPI2_GPIO_MOSI PAL_PAD(LINE_SPI2_MOSI)
648 #define SPI2_GPIO_PORT_SCK PAL_PORT(LINE_SPI2_SCK)
649 #define SPI2_GPIO_SCK PAL_PAD(LINE_SPI2_SCK)
650 
651 #if defined(AF_LINE_SPI2_SCK)
652 #define SPI2_GPIO_AF AF_LINE_SPI2_SCK
653 #endif
654 #endif
655 
656 #if defined(LINE_SPI3_MISO) && defined(LINE_SPI3_MOSI) && defined(LINE_SPI3_SCK)
657 #define SPI3_GPIO_PORT_MISO PAL_PORT(LINE_SPI3_MISO)
658 #define SPI3_GPIO_MISO PAL_PAD(LINE_SPI3_MISO)
659 #define SPI3_GPIO_PORT_MOSI PAL_PORT(LINE_SPI3_MOSI)
660 #define SPI3_GPIO_MOSI PAL_PAD(LINE_SPI3_MOSI)
661 #define SPI3_GPIO_PORT_SCK PAL_PORT(LINE_SPI3_SCK)
662 #define SPI3_GPIO_SCK PAL_PAD(LINE_SPI3_SCK)
663 
664 #if defined(AF_LINE_SPI3_SCK)
665 #define SPI3_GPIO_AF AF_LINE_SPI3_SCK
666 #endif
667 #endif
668 
669 #if defined(LINE_SPI4_MISO) && defined(LINE_SPI4_MOSI) && defined(LINE_SPI4_SCK)
670 #define SPI4_GPIO_PORT_MISO PAL_PORT(LINE_SPI4_MISO)
671 #define SPI4_GPIO_MISO PAL_PAD(LINE_SPI4_MISO)
672 #define SPI4_GPIO_PORT_MOSI PAL_PORT(LINE_SPI4_MOSI)
673 #define SPI4_GPIO_MOSI PAL_PAD(LINE_SPI4_MOSI)
674 #define SPI4_GPIO_PORT_SCK PAL_PORT(LINE_SPI4_SCK)
675 #define SPI4_GPIO_SCK PAL_PAD(LINE_SPI4_SCK)
676 
677 #if defined(AF_LINE_SPI4_SCK)
678 #define SPI4_GPIO_AF AF_LINE_SPI4_SCK
679 #endif
680 #endif
681 
682 #if defined(LINE_SPI5_MISO) && defined(LINE_SPI5_MOSI) && defined(LINE_SPI5_SCK)
683 #define SPI5_GPIO_PORT_MISO PAL_PORT(LINE_SPI5_MISO)
684 #define SPI5_GPIO_MISO PAL_PAD(LINE_SPI5_MISO)
685 #define SPI5_GPIO_PORT_MOSI PAL_PORT(LINE_SPI5_MOSI)
686 #define SPI5_GPIO_MOSI PAL_PAD(LINE_SPI5_MOSI)
687 #define SPI5_GPIO_PORT_SCK PAL_PORT(LINE_SPI5_SCK)
688 #define SPI5_GPIO_SCK PAL_PAD(LINE_SPI5_SCK)
689 
690 #if defined(AF_LINE_SPI5_SCK)
691 #define SPI5_GPIO_AF AF_LINE_SPI5_SCK
692 #endif
693 #endif
694 
695 #if defined(LINE_SPI6_MISO) && defined(LINE_SPI6_MOSI) && defined(LINE_SPI6_SCK)
696 #define SPI6_GPIO_PORT_MISO PAL_PORT(LINE_SPI6_MISO)
697 #define SPI6_GPIO_MISO PAL_PAD(LINE_SPI6_MISO)
698 #define SPI6_GPIO_PORT_MOSI PAL_PORT(LINE_SPI6_MOSI)
699 #define SPI6_GPIO_MOSI PAL_PAD(LINE_SPI6_MOSI)
700 #define SPI6_GPIO_PORT_SCK PAL_PORT(LINE_SPI6_SCK)
701 #define SPI6_GPIO_SCK PAL_PAD(LINE_SPI6_SCK)
702 
703 #if defined(AF_LINE_SPI6_SCK)
704 #define SPI6_GPIO_AF AF_LINE_SPI6_SCK
705 #endif
706 #endif
707 
711 #if defined(LINE_SPI_SLAVE0)
712 #define SPI_SELECT_SLAVE0_PORT PAL_PORT(LINE_SPI_SLAVE0)
713 #define SPI_SELECT_SLAVE0_PIN PAL_PAD(LINE_SPI_SLAVE0)
714 #endif
715 
716 #if defined(LINE_SPI_SLAVE1)
717 #define SPI_SELECT_SLAVE1_PORT PAL_PORT(LINE_SPI_SLAVE1)
718 #define SPI_SELECT_SLAVE1_PIN PAL_PAD(LINE_SPI_SLAVE1)
719 #endif
720 
721 #if defined(LINE_SPI_SLAVE2)
722 #define SPI_SELECT_SLAVE2_PORT PAL_PORT(LINE_SPI_SLAVE2)
723 #define SPI_SELECT_SLAVE2_PIN PAL_PAD(LINE_SPI_SLAVE2)
724 #endif
725 
726 #if defined(LINE_SPI_SLAVE3)
727 #define SPI_SELECT_SLAVE3_PORT PAL_PORT(LINE_SPI_SLAVE3)
728 #define SPI_SELECT_SLAVE3_PIN PAL_PAD(LINE_SPI_SLAVE3)
729 #endif
730 
731 #if defined(LINE_SPI_SLAVE4)
732 #define SPI_SELECT_SLAVE4_PORT PAL_PORT(LINE_SPI_SLAVE4)
733 #define SPI_SELECT_SLAVE4_PIN PAL_PAD(LINE_SPI_SLAVE4)
734 #endif
735 
736 #if defined(LINE_SPI_SLAVE5)
737 #define SPI_SELECT_SLAVE5_PORT PAL_PORT(LINE_SPI_SLAVE5)
738 #define SPI_SELECT_SLAVE5_PIN PAL_PAD(LINE_SPI_SLAVE5)
739 #endif
740 
741 #if defined(LINE_SPI_SLAVE6)
742 #define SPI_SELECT_SLAVE6_PORT PAL_PORT(LINE_SPI_SLAVE6)
743 #define SPI_SELECT_SLAVE6_PIN PAL_PAD(LINE_SPI_SLAVE6)
744 #endif
745 
746 #if defined(LINE_SPI_SLAVE7)
747 #define SPI_SELECT_SLAVE7_PORT PAL_PORT(LINE_SPI_SLAVE7)
748 #define SPI_SELECT_SLAVE7_PIN PAL_PAD(LINE_SPI_SLAVE7)
749 #endif
750 
751 #if defined(LINE_SPI_SLAVE8)
752 #define SPI_SELECT_SLAVE8_PORT PAL_PORT(LINE_SPI_SLAVE8)
753 #define SPI_SELECT_SLAVE8_PIN PAL_PAD(LINE_SPI_SLAVE8)
754 #endif
755 
759 // #if defined(LINE_SDIO_D0) && defined(LINE_SDIO_D1) && defined(LINE_SDIO_D2) && defined(LINE_SDIO_D3) && defined(LINE_SDIO_CK) && defined(LINE_SDIO_CMD)
760 // #define SDIO_D0_PORT PAL_PORT(LINE_SDIO_D0)
761 // #define SDIO_D0_PIN PAL_PAD(LINE_SDIO_D0)
762 // #define SDIO_D1_PORT PAL_PORT(LINE_SDIO_D1)
763 // #define SDIO_D1_PIN PAL_PAD(LINE_SDIO_D1)
764 // #define SDIO_D2_PORT PAL_PORT(LINE_SDIO_D2)
765 // #define SDIO_D2_PIN PAL_PAD(LINE_SDIO_D2)
766 // #define SDIO_D3_PORT PAL_PORT(LINE_SDIO_D3)
767 // #define SDIO_D3_PIN PAL_PAD(LINE_SDIO_D3)
768 // #define SDIO_CK_PORT PAL_PORT(LINE_SDIO_CK)
769 // #define SDIO_CK_PIN PAL_PAD(LINE_SDIO_CK)
770 // #define SDIO_CMD_PORT PAL_PORT(LINE_SDIO_CMD)
771 // #define SDIO_CMD_PIN PAL_PAD(LINE_SDIO_CMD)
772 
773 // #if defined(AF_LINE_SDIO_CMD)
774 // #define SDIO_AF AF_LINE_SDIO_CMD
775 // #else
776 // #define SDIO_AF ((void)0)
777 // #endif
778 // #endif
779 
780 #if defined(LINE_USB_VBUS)
781 #define SDLOG_USB_VBUS_PORT PAL_PORT(LINE_USB_VBUS)
782 #define SDLOG_USB_VBUS_PIN PAL_PAD(LINE_USB_VBUS)
783 #define SDLOG_USB_VBUS_BOOT false
784 #endif
785 
786 /*
787  * Actuators for fixedwing
788  */
789  /* Default actuators driver */
790 #define DEFAULT_ACTUATORS "modules/actuators/actuators_pwm.h"
791 #define ActuatorDefaultSet(_x,_y) ActuatorPwmSet(_x,_y)
792 #define ActuatorsDefaultInit() ActuatorsPwmInit()
793 #define ActuatorsDefaultCommit() ActuatorsPwmCommit()
794 
795 #endif /* ARCH_COMMON_BOARD_H */