Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
lisa_mx_common.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2013 Piotr Esden-Tempski <piotr@esden.net>
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
23#ifndef CONFIG_LISA_MX_COMMON_H
24#define CONFIG_LISA_MX_COMMON_H
25
26#include "std.h"
27
28#define BOARD_LISA_MX
29
30/* Lisa/M has a 12MHz external clock and 168MHz internal. */
31#define EXT_CLK 12000000
32#define AHB_CLK 168000000
33
34/*
35 * Onboard LEDs
36 */
37
38/* red, on PA8 */
39#ifndef USE_LED_1
40#define USE_LED_1 1
41#endif
42#define LED_1_GPIO GPIOA
43#define LED_1_GPIO_PIN GPIO8
44#define LED_1_GPIO_ON gpio_clear
45#define LED_1_GPIO_OFF gpio_set
46#define LED_1_AFIO_REMAP ((void)0)
47
48/* green, shared with JTAG_TRST */
49#ifndef USE_LED_2
50#define USE_LED_2 1
51#endif
52#define LED_2_GPIO GPIOB
53#define LED_2_GPIO_PIN GPIO4
54#define LED_2_GPIO_ON gpio_clear
55#define LED_2_GPIO_OFF gpio_set
56#define LED_2_AFIO_REMAP ((void)0)
57
58/* green, shared with ADC12 (ADC_6 on connector ANALOG2) */
59#ifndef USE_LED_3
60#define USE_LED_3 1
61#endif
62#define LED_3_GPIO GPIOC
63#define LED_3_GPIO_PIN GPIO2
64#define LED_3_GPIO_ON gpio_clear
65#define LED_3_GPIO_OFF gpio_set
66#define LED_3_AFIO_REMAP ((void)0)
67
68/* red, shared with ADC15 (ADC_4 on connector ANALOG2) */
69#ifndef USE_LED_4
70#define USE_LED_4 1
71#endif
72#define LED_4_GPIO GPIOC
73#define LED_4_GPIO_PIN GPIO5
74#define LED_4_GPIO_ON gpio_clear
75#define LED_4_GPIO_OFF gpio_set
76#define LED_4_AFIO_REMAP ((void)0)
77
78/* green, on PC15 */
79#ifndef USE_LED_5
80#define USE_LED_5 1
81#endif
82#define LED_5_GPIO GPIOC
83#define LED_5_GPIO_PIN GPIO15
84#define LED_5_GPIO_ON gpio_clear
85#define LED_5_GPIO_OFF gpio_set
86#define LED_5_AFIO_REMAP ((void)0)
87
88/*
89 * LEDs not populated by default
90 */
91/* PC3, ADC13 on ADC_1 */
92#define LED_6_GPIO GPIOC
93#define LED_6_GPIO_PIN GPIO3
94#define LED_6_GPIO_ON gpio_clear
95#define LED_6_GPIO_OFF gpio_set
96#define LED_6_AFIO_REMAP ((void)0)
97
98/* PC0, ADC10 on ADC_2 */
99#define LED_7_GPIO GPIOC
100#define LED_7_GPIO_PIN GPIO0
101#define LED_7_GPIO_ON gpio_clear
102#define LED_7_GPIO_OFF gpio_set
103#define LED_7_AFIO_REMAP ((void)0)
104
105/* PC1, ADC11 on ADC_3 */
106#define LED_8_GPIO GPIOC
107#define LED_8_GPIO_PIN GPIO1
108#define LED_8_GPIO_ON gpio_clear
109#define LED_8_GPIO_OFF gpio_set
110#define LED_8_AFIO_REMAP ((void)0)
111
112
113/*
114 * not actual LEDS, used as GPIOs
115 */
116
117/* PB1, DRDY on EXT SPI connector*/
118#define LED_BODY_GPIO GPIOB
119#define LED_BODY_GPIO_PIN GPIO1
120#define LED_BODY_GPIO_ON gpio_set
121#define LED_BODY_GPIO_OFF gpio_clear
122#define LED_BODY_AFIO_REMAP ((void)0)
123
124/* PC12, on GPIO connector*/
125#define LED_12_GPIO GPIOC
126#define LED_12_GPIO_PIN GPIO12
127#define LED_12_GPIO_ON gpio_clear
128#define LED_12_GPIO_OFF gpio_set
129#define LED_12_AFIO_REMAP ((void)0)
130
131
132/* Default actuators driver */
133#define DEFAULT_ACTUATORS "modules/actuators/actuators_pwm.h"
134#define ActuatorDefaultSet(_x,_y) ActuatorPwmSet(_x,_y)
135#define ActuatorsDefaultInit() ActuatorsPwmInit()
136#define ActuatorsDefaultCommit() ActuatorsPwmCommit()
137
138
139/* UART */
140#if REMAP_UART1
141#define UART1_GPIO_AF GPIO_AF7
142#define UART1_GPIO_PORT_RX GPIOB
143#define UART1_GPIO_RX GPIO7
144#define UART1_GPIO_PORT_TX GPIOB
145#define UART1_GPIO_TX GPIO6
146#else
147#define UART1_GPIO_AF GPIO_AF7
148#define UART1_GPIO_PORT_RX GPIOA
149#define UART1_GPIO_RX GPIO10
150#define UART1_GPIO_PORT_TX GPIOA
151#define UART1_GPIO_TX GPIO9
152#endif /* REMAP_UART1 */
153
154#define UART2_GPIO_AF GPIO_AF7
155#define UART2_GPIO_PORT_RX GPIOA
156#define UART2_GPIO_RX GPIO3
157#define UART2_GPIO_PORT_TX GPIOA
158#define UART2_GPIO_TX GPIO2
159
160#if REMAP_UART3 // For UART4 we need to remap UART 3
161#define UART3_GPIO_AF GPIO_AF7
162#define UART3_GPIO_PORT_RX GPIOB
163#define UART3_GPIO_RX GPIO11
164#define UART3_GPIO_PORT_TX GPIOB
165#define UART3_GPIO_TX GPIO10
166
167#define UART4_GPIO_AF GPIO_AF8
168#define UART4_GPIO_PORT_RX GPIOC
169#define UART4_GPIO_RX GPIO11
170#define UART4_GPIO_PORT_TX GPIOC
171#define UART4_GPIO_TX GPIO10
172
173#else
174#define UART3_GPIO_AF GPIO_AF7
175#define UART3_GPIO_PORT_RX GPIOC
176#define UART3_GPIO_RX GPIO11
177#define UART3_GPIO_PORT_TX GPIOC
178#define UART3_GPIO_TX GPIO10
179#endif
180
181
182#define UART5_GPIO_AF GPIO_AF8
183#define UART5_GPIO_PORT_RX GPIOD
184#define UART5_GPIO_RX GPIO2
185#define UART5_GPIO_PORT_TX GPIOC
186#define UART5_GPIO_TX GPIO12
187
188#define UART6_GPIO_AF GPIO_AF8
189#define UART6_GPIO_PORT_RX GPIOC
190#define UART6_GPIO_RX GPIO7
191#define UART6_GPIO_PORT_TX GPIOC
192#define UART6_GPIO_TX GPIO6
193
194/*
195 * Spektrum
196 */
197/* The line that is pulled low at power up to initiate the bind process */
198/* These are not common between versions of lisa/mx and thus defined in the
199 * version specific header files. */
200/* #define SPEKTRUM_BIND_PIN GPIO0 */
201/* #define SPEKTRUM_BIND_PIN_PORT GPIOB */
202
203#define SPEKTRUM_UART1_RCC RCC_USART1
204#define SPEKTRUM_UART1_BANK GPIOA
205#define SPEKTRUM_UART1_PIN GPIO10
206#define SPEKTRUM_UART1_AF GPIO_AF7
207#define SPEKTRUM_UART1_IRQ NVIC_USART1_IRQ
208#define SPEKTRUM_UART1_ISR usart1_isr
209#define SPEKTRUM_UART1_DEV USART1
210
211#define SPEKTRUM_UART5_RCC RCC_UART5
212#define SPEKTRUM_UART5_BANK GPIOD
213#define SPEKTRUM_UART5_PIN GPIO2
214#define SPEKTRUM_UART5_AF GPIO_AF8
215#define SPEKTRUM_UART5_IRQ NVIC_UART5_IRQ
216#define SPEKTRUM_UART5_ISR uart5_isr
217#define SPEKTRUM_UART5_DEV UART5
218
219/* PPM
220 *
221 * Default is PPM config 2, input on GPIOA1 (Servo pin 6)
222 */
223#if USE_PPM
224#ifndef PPM_CONFIG
225#define PPM_CONFIG 2
226#endif
227
228#if PPM_CONFIG == 1
229/* input on PA10 (UART1_RX) */
230#define USE_PPM_TIM1 1
231#define PPM_CHANNEL TIM_IC3
232#define PPM_TIMER_INPUT TIM_IC_IN_TI3
233#define PPM_IRQ NVIC_TIM1_CC_IRQ
234#define PPM_IRQ2 NVIC_TIM1_UP_TIM10_IRQ
235// Capture/Compare InteruptEnable and InterruptFlag
236#define PPM_CC_IE TIM_DIER_CC3IE
237#define PPM_CC_IF TIM_SR_CC3IF
238#define PPM_GPIO_PORT GPIOA
239#define PPM_GPIO_PIN GPIO10
240#define PPM_GPIO_AF GPIO_AF1
241
242#elif PPM_CONFIG == 2
243/* input on PA01 (Servo 6 pin) */
244#define USE_PPM_TIM2 1
245#define PPM_CHANNEL TIM_IC2
246#define PPM_TIMER_INPUT TIM_IC_IN_TI2
247#define PPM_IRQ NVIC_TIM2_IRQ
248// Capture/Compare InteruptEnable and InterruptFlag
249#define PPM_CC_IE TIM_DIER_CC2IE
250#define PPM_CC_IF TIM_SR_CC2IF
251#define PPM_GPIO_PORT GPIOA
252#define PPM_GPIO_PIN GPIO1
253#define PPM_GPIO_AF GPIO_AF1
254
255// Move default ADC timer
256#if USE_AD_TIM2
257#undef USE_AD_TIM2
258#endif
259#define USE_AD_TIM1 1
260
261#else
262#error "Unknown PPM config"
263
264#endif // PPM_CONFIG
265#endif // USE_PPM
266
267/* SPI */
268#define SPI1_GPIO_AF GPIO_AF5
269#define SPI1_GPIO_PORT_MISO GPIOA
270#define SPI1_GPIO_MISO GPIO6
271#define SPI1_GPIO_PORT_MOSI GPIOA
272#define SPI1_GPIO_MOSI GPIO7
273#define SPI1_GPIO_PORT_SCK GPIOA
274#define SPI1_GPIO_SCK GPIO5
275
276#define SPI2_GPIO_AF GPIO_AF5
277#define SPI2_GPIO_PORT_MISO GPIOB
278#define SPI2_GPIO_MISO GPIO14
279#define SPI2_GPIO_PORT_MOSI GPIOB
280#define SPI2_GPIO_MOSI GPIO15
281#define SPI2_GPIO_PORT_SCK GPIOB
282#define SPI2_GPIO_SCK GPIO13
283
284#define SPI_SELECT_SLAVE0_PORT GPIOA
285#define SPI_SELECT_SLAVE0_PIN GPIO15
286
287#define SPI_SELECT_SLAVE1_PORT GPIOA
288#define SPI_SELECT_SLAVE1_PIN GPIO4
289
290#define SPI_SELECT_SLAVE2_PORT GPIOB
291#define SPI_SELECT_SLAVE2_PIN GPIO12
292
293#define SPI_SELECT_SLAVE3_PORT GPIOC
294#define SPI_SELECT_SLAVE3_PIN GPIO13
295
296#define SPI_SELECT_SLAVE4_PORT GPIOC
297#define SPI_SELECT_SLAVE4_PIN GPIO12
298
299#define SPI_SELECT_SLAVE5_PORT GPIOC
300#define SPI_SELECT_SLAVE5_PIN GPIO4
301
302
303#define SPI1_GPIO_PORT_NSS GPIOA
304#define SPI1_GPIO_NSS GPIO4
305
306#define SPI2_GPIO_PORT_NSS GPIOB
307#define SPI2_GPIO_NSS GPIO12
308
309#define SPI3_GPIO_PORT_NSS GPIOA
310#define SPI3_GPIO_NSS GPIO15
311
312/* I2C mapping */
313#define I2C1_GPIO_PORT GPIOB
314#define I2C1_GPIO_SCL GPIO6
315#define I2C1_GPIO_SDA GPIO7
316
317#define I2C2_GPIO_PORT GPIOB
318#define I2C2_GPIO_SCL GPIO10
319#define I2C2_GPIO_SDA GPIO11
320
321
322/*
323 * ADC
324 */
325
326/* Onboard ADCs */
327/*
328 ADC1 PC3/ADC13
329 ADC2 PC0/ADC10
330 ADC3 PC1/ADC11
331 ADC4 PC5/ADC15
332 ADC6 PC2/ADC12
333 ADC7 PA3/ADC03
334 ADC8 PA0/ADC00
335 BATT PC4/ADC14
336*/
337
338/* provide defines that can be used to access the ADC_x in the code or airframe file
339 * these directly map to the index number of the 4 adc channels defined above
340 * 4th (index 3) is used for bat monitoring by default
341 */
342#if USE_ADC_1
343#define AD1_1_CHANNEL 13
344#define ADC_1 AD1_1
345#define ADC_1_GPIO_PORT GPIOC
346#define ADC_1_GPIO_PIN GPIO3
347#endif
348
349#if USE_ADC_2
350#define AD1_2_CHANNEL 10
351#define ADC_2 AD1_2
352#define ADC_2_GPIO_PORT GPIOC
353#define ADC_2_GPIO_PIN GPIO0
354#endif
355
356#if USE_ADC_3
357#define AD1_3_CHANNEL 11
358#define ADC_3 AD1_3
359#define ADC_3_GPIO_PORT GPIOC
360#define ADC_3_GPIO_PIN GPIO1
361#endif
362
363#if USE_ADC_4
364#define AD2_1_CHANNEL 15
365#define ADC_4 AD2_1
366#define ADC_4_GPIO_PORT GPIOC
367#define ADC_4_GPIO_PIN GPIO5
368#endif
369
370// Internal ADC for battery enabled by default
371#ifndef USE_ADC_5
372#define USE_ADC_5 1
373#endif
374#if USE_ADC_5
375#define AD1_4_CHANNEL 14
376#define ADC_5 AD1_4
377#define ADC_5_GPIO_PORT GPIOC
378#define ADC_5_GPIO_PIN GPIO4
379#endif
380
381#if USE_ADC_6
382#define AD2_2_CHANNEL 12
383#define ADC_6 AD2_2
384#define ADC_6_GPIO_PORT GPIOC
385#define ADC_6_GPIO_PIN GPIO2
386#endif
387
388#if USE_ADC_7
389#define AD2_3_CHANNEL 3
390#define ADC_4 AD2_3
391#define ADC_4_GPIO_PORT GPIOA
392#define ADC_4_GPIO_PIN GPIO3
393#endif
394
395#if USE_ADC_8
396#define AD2_4_CHANNEL 0
397#define ADC_8 AD2_4
398#define ADC_8_GPIO_PORT GPIOA
399#define ADC_8_GPIO_PIN GPIO0
400#endif
401
402/* allow to define ADC_CHANNEL_VSUPPLY in the airframe file*/
403#ifndef ADC_CHANNEL_VSUPPLY
404#define ADC_CHANNEL_VSUPPLY ADC_5
405#endif
406
407#define DefaultVoltageOfAdc(adc) (0.0045*adc)
408
409
410/*
411 * PWM
412 *
413 */
414#define PWM_USE_TIM3 1
415#define PWM_USE_TIM5 1
416
417#define USE_PWM1 1
418#define USE_PWM2 1
419#define USE_PWM3 1
420#define USE_PWM4 1
421
422#ifndef USE_PWM5 // this allows to disable servo 5 on Lisa MXS
423#define USE_PWM5 1
424#endif
425
426#if (!defined USE_PWM6) && (PPM_CONFIG != 2) // PWM6 only activated by default if PPM_CONFIG is not 2
427#define USE_PWM6 1
428#endif
429
430#if (USE_PPM && PPM_CONFIG == 2) && USE_PWM6 == 1
431#warning "You cannot USE_PWM6 and SERVO6 (or equivalent) at the same time"
432#endif
433
434#if USE_SERVOS_7AND8
435#if USE_I2C1
436#error "You cannot USE_SERVOS_7AND8 and USE_I2C1 at the same time"
437#else
438#define ACTUATORS_PWM_NB 8
439#define USE_PWM7 1
440#define USE_PWM8 1
441#define PWM_USE_TIM4 1
442#endif
443#else
444#define ACTUATORS_PWM_NB 6
445#endif
446
447// Servo numbering on LisaM silkscreen/docs starts with 1
448
449// PWM_SERVO_x is the index of the servo in the actuators_pwm_values array
450#if USE_PWM1
451#define PWM_SERVO_1 0
452#define PWM_SERVO_1_TIMER TIM3
453#define PWM_SERVO_1_GPIO GPIOC
454#define PWM_SERVO_1_PIN GPIO6
455#define PWM_SERVO_1_AF GPIO_AF2
456#define PWM_SERVO_1_OC TIM_OC1
457#define PWM_SERVO_1_OC_BIT (1<<0)
458#else
459#define PWM_SERVO_1_OC_BIT 0
460#endif
461
462#if USE_PWM2
463#define PWM_SERVO_2 1
464#define PWM_SERVO_2_TIMER TIM3
465#define PWM_SERVO_2_GPIO GPIOC
466#define PWM_SERVO_2_PIN GPIO7
467#define PWM_SERVO_2_AF GPIO_AF2
468#define PWM_SERVO_2_OC TIM_OC2
469#define PWM_SERVO_2_OC_BIT (1<<1)
470#else
471#define PWM_SERVO_2_OC_BIT 0
472#endif
473
474#if USE_PWM3
475#define PWM_SERVO_3 2
476#define PWM_SERVO_3_TIMER TIM3
477#define PWM_SERVO_3_GPIO GPIOC
478#define PWM_SERVO_3_PIN GPIO8
479#define PWM_SERVO_3_AF GPIO_AF2
480#define PWM_SERVO_3_OC TIM_OC3
481#define PWM_SERVO_3_OC_BIT (1<<2)
482#else
483#define PWM_SERVO_3_OC_BIT 0
484#endif
485
486#if USE_PWM4
487#define PWM_SERVO_4 3
488#define PWM_SERVO_4_TIMER TIM3
489#define PWM_SERVO_4_GPIO GPIOC
490#define PWM_SERVO_4_PIN GPIO9
491#define PWM_SERVO_4_AF GPIO_AF2
492#define PWM_SERVO_4_OC TIM_OC4
493#define PWM_SERVO_4_OC_BIT (1<<3)
494#else
495#define PWM_SERVO_4_OC_BIT 0
496#endif
497
498#if USE_PWM5
499#define PWM_SERVO_5 4
500#define PWM_SERVO_5_TIMER TIM5
501#define PWM_SERVO_5_GPIO GPIOA
502#define PWM_SERVO_5_PIN GPIO0
503#define PWM_SERVO_5_AF GPIO_AF2
504#define PWM_SERVO_5_OC TIM_OC1
505#define PWM_SERVO_5_OC_BIT (1<<0)
506#else
507#define PWM_SERVO_5_OC_BIT 0
508#endif
509
510#if USE_PWM6
511#define PWM_SERVO_6 5
512#define PWM_SERVO_6_TIMER TIM5
513#define PWM_SERVO_6_GPIO GPIOA
514#define PWM_SERVO_6_PIN GPIO1
515#define PWM_SERVO_6_AF GPIO_AF2
516#define PWM_SERVO_6_OC TIM_OC2
517#define PWM_SERVO_6_OC_BIT (1<<1)
518#else
519#define PWM_SERVO_6_OC_BIT 0
520#endif
521
522#if USE_PWM7
523#define PWM_SERVO_7 6
524#define PWM_SERVO_7_TIMER TIM4
525#define PWM_SERVO_7_GPIO GPIOB
526#define PWM_SERVO_7_PIN GPIO6
527#define PWM_SERVO_7_AF GPIO_AF2
528#define PWM_SERVO_7_OC TIM_OC1
529#define PWM_SERVO_7_OC_BIT (1<<0)
530#else
531#define PWM_SERVO_7_OC_BIT 0
532#endif
533
534#if USE_PWM8
535#define PWM_SERVO_8 7
536#define PWM_SERVO_8_TIMER TIM4
537#define PWM_SERVO_8_GPIO GPIOB
538#define PWM_SERVO_8_PIN GPIO7
539#define PWM_SERVO_8_AF GPIO_AF2
540#define PWM_SERVO_8_OC TIM_OC2
541#define PWM_SERVO_8_OC_BIT (1<<1)
542#else
543#define PWM_SERVO_8_OC_BIT 0
544#endif
545
546/* servos 1-4 on TIM3 */
547#define PWM_TIM3_CHAN_MASK (PWM_SERVO_1_OC_BIT|PWM_SERVO_2_OC_BIT|PWM_SERVO_3_OC_BIT|PWM_SERVO_4_OC_BIT)
548/* servos 5-6 on TIM5 */
549#define PWM_TIM5_CHAN_MASK (PWM_SERVO_5_OC_BIT|PWM_SERVO_6_OC_BIT)
550/* servos 7-8 on TIM4 if USE_SERVOS_7AND8 */
551#define PWM_TIM4_CHAN_MASK (PWM_SERVO_7_OC_BIT|PWM_SERVO_8_OC_BIT)
552
553
554/* by default activate onboard baro */
555#ifndef USE_BARO_BOARD
556#define USE_BARO_BOARD 1
557#endif
558
559#endif /* CONFIG_LISA_MX_COMMON_H */