Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
Loading...
Searching...
No Matches
mcu.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2010-2012 The Paparazzi team
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
28#include "mcu.h"
29#include "std.h"
30
31#ifdef PERIPHERALS_AUTO_INIT
32#include "mcu_periph/gpio.h"
33#include "mcu_periph/sys_time.h"
34#ifdef USE_LED
35#include "led.h"
36#endif
37#if defined RADIO_CONTROL
38#if defined RADIO_CONTROL_BIND_IMPL_FUNC && defined SPEKTRUM_BIND_PIN_PORT
40#endif
41#endif
42#if USE_UART0 || USE_UART1 || USE_UART2 || USE_UART3 || USE_UART4 || USE_UART5 || USE_UART6 || USE_UART7 || USE_UART8
43#define USING_UART 1
44#include "mcu_periph/uart.h"
45#endif
46#if USE_I2C0 || USE_I2C1 || USE_I2C2 || USE_I2C3 || USE_I2C4 || USE_SOFTI2C0 || USE_SOFTI2C1
47#define USING_I2C 1
48#include "mcu_periph/i2c.h"
49#endif
50#if USE_SOFTI2C0 || USE_SOFTI2C1
51#define USING_SOFTI2C 1
52#include "mcu_periph/softi2c.h"
53#endif
54#if USE_CAN1 || USE_CAN2
55#include "mcu_periph/can.h"
56#endif
57#if USE_ADC
58#include "mcu_periph/adc.h"
59#endif
60#if USE_USB_SERIAL || USE_USB_SERIAL_DEBUG
61#define USING_USB_SERIAL 1
63#endif
64#ifdef USE_UDP
65#include "mcu_periph/udp.h"
66#endif
67#if USE_SPI
68#include "mcu_periph/spi.h"
69#endif
70#ifdef USE_DAC
71#include "mcu_periph/dac.h"
72#endif
73#ifdef USE_RNG
74#include "mcu_periph/rng.h"
75#endif
76#ifdef USE_PIPE
77#include "mcu_periph/pipe.h"
78#endif
79#endif /* PERIPHERALS_AUTO_INIT */
80
81void WEAK board_init(void)
82{
83 /* default board init function does nothing... */
84}
85
86void WEAK board_init2(void)
87{
88 /* default board init function does nothing... */
89}
90
92{
93 /* default reboot function does nothing... */
94}
95
97{
98 /* default power saving function does nothing... */
99}
100
101void mcu_init(void)
102{
103 /* If we have a board specific init function, call it.
104 * Otherwise it will simply call the empty weak function.
105 *
106 * For example the ARDrone2 has this implemented to prevent stray data of IMU
107 * from OEM program still running and also accessing AC sensors
108 */
109 board_init();
110
112
113 /* First enable the power of the MCU if needed */
114#if defined MCU_PWR
117
118#if defined BTN_ON
120 if (gpio_get(BTN_ON, BTN_ON_PIN)) {
122 } else {
123 // Turn off and stop: wait until all power is off
124 while (true) {
126 }
127 }
128#endif //BTN_ON
129
130#endif //MCU_PWR
131
132#ifdef PERIPHERALS_AUTO_INIT
134#ifdef USE_LED
135 led_init();
136#endif
137 /* First enable power of RC */
138#if defined RADIO_CONTROL_POWER_PORT
141#endif
142#ifdef PERIPHERAL3V3_ENABLE_PORT
145#endif
146 /* for now this means using spektrum */
147#if defined RADIO_CONTROL && defined RADIO_CONTROL_BIND_IMPL_FUNC && defined SPEKTRUM_BIND_PIN_PORT
149#endif
150#if USE_UART0
151 uart0_init();
152#endif
153#if USE_UART1
154 uart1_init();
155#endif
156#if USE_UART2
157 uart2_init();
158#endif
159#if USE_UART3
160 uart3_init();
161#endif
162#if USE_UART4
163 uart4_init();
164#endif
165#if USE_UART5
166 uart5_init();
167#endif
168#if USE_UART6
169 uart6_init();
170#endif
171#if USE_UART7
172 uart7_init();
173#endif
174#if USE_UART8
175 uart8_init();
176#endif
177#if USING_UART
179#endif
180#ifdef USE_I2C0
181 i2c0_init();
182#endif
183#ifdef USE_I2C1
184 i2c1_init();
185#endif
186#ifdef USE_I2C2
187 i2c2_init();
188#endif
189#ifdef USE_I2C3
190 i2c3_init();
191#endif
192#ifdef USE_I2C4
193 i2c4_init();
194#endif
195#ifdef USE_SOFTI2C0
197#endif
198#ifdef USE_SOFTI2C1
200#endif
201#if USE_CAN1 || USE_CAN2
202 can_init();
203#endif
204#if USE_ADC
205 adc_init();
206#endif
207#if USING_USB_SERIAL
208 VCOM_init();
209#endif
210
211#if USE_SPI
212#if SPI_MASTER
213
214#if USE_SPI0
215 spi0_init();
216#endif
217#if USE_SPI1
218 spi1_init();
219#endif
220#if USE_SPI2
221 spi2_init();
222#endif
223#if USE_SPI3
224 spi3_init();
225#endif
226#if USE_SPI4
227 spi4_init();
228#endif
229#if USE_SPI6
230 spi6_init();
231#endif
233#endif // SPI_MASTER
234
235#if SPI_SLAVE
236#if USE_SPI0_SLAVE
238#endif
239#if USE_SPI1_SLAVE
241#endif
242#if USE_SPI2_SLAVE
244#endif
245#if USE_SPI3_SLAVE
247#endif
248#endif // SPI_SLAVE
249
250#if SPI_SLAVE_HS
252#endif
253#endif // USE_SPI
254
255#ifdef USE_DAC
256 dac_init();
257#endif
258
259#if USE_UDP0 || USE_UDP1 || USE_UDP2
261#endif
262
263#ifdef USE_RNG
264 rng_init();
265#endif
266
267#else
268 INFO("PERIPHERALS_AUTO_INIT not enabled! Peripherals (including sys_time) need explicit initialization.")
269#endif /* PERIPHERALS_AUTO_INIT */
270
271 board_init2();
272}
273
274
275
276void mcu_event(void)
277{
278#if USING_I2C
279 i2c_event();
280#endif
281#if USING_SOFTI2C
283#endif
284
285#if USING_USB_SERIAL
286 VCOM_event();
287#endif
288}
arch independent ADC (Analog to Digital Converter) API
void can_init()
Definition can.c:59
void mcu_arch_init(void)
Initialize the specific archittecture functions.
Definition mcu_arch.c:155
void adc_init(void)
Adc init.
Definition adc_arch.c:332
void gpio_setup_output(ioportid_t port, uint16_t gpios)
Setup one or more pins of the given GPIO port as outputs.
Definition gpio_arch.c:33
void gpio_setup_input(ioportid_t port, uint16_t gpios)
Setup one or more pins of the given GPIO port as inputs.
Definition gpio_arch.c:40
static uint8_t gpio_get(ioportid_t port, uint16_t pin)
Get level of a gpio.
Definition gpio_arch.h:94
void rng_init(void)
Definition rng_arch.c:77
void dac_init(void)
Some architecture independent helper functions for GPIOs.
void i2c_event(void)
i2c_event() function
Definition i2c_arch.c:393
void WEAK mcu_reboot(enum reboot_state_t reboot_state)
Reboot the MCU Should not be called during flight or ciritcal operations.
Definition mcu.c:91
reboot_state_t
The requested reboot states.
Definition mcu.h:42
void WEAK board_init(void)
Optional board init function called at the start of mcu_init().
Definition mcu.c:81
void mcu_init(void)
Microcontroller peripherals initialization.
Definition mcu.c:101
void WEAK mcu_energy_save(void)
Puts the MCU in energy save mode This disables features of the MCU to save energy.
Definition mcu.c:96
void mcu_event(void)
MCU event functions.
Definition mcu.c:276
void WEAK board_init2(void)
Optional board init function called at the end of mcu_init().
Definition mcu.c:86
void spi2_init(void)
Definition spi.c:59
void spi0_init(void)
Definition spi.c:37
void spi1_init(void)
Definition spi.c:48
void spi_init_slaves(void)
spi_init_slaves() function
Definition spi_arch.c:709
Architecture independent I2C (Inter-Integrated Circuit Bus) API.
arch independent LED (Light Emitting Diodes) API
static void led_init(void)
Automatic initialization of actived LED Set to OFF at startup.
Definition led.h:39
void uart_arch_init(void)
Definition uart_arch.c:54
void udp_arch_init(void)
Definition udp_arch.c:43
uint16_t foo
Definition main_demo5.c:58
Arch independent mcu ( Micro Controller Unit ) utilities.
#define MCU_PWR
Definition opa_ftd_1.0.h:37
#define MCU_PWR_OFF
Definition opa_ftd_1.0.h:40
#define MCU_PWR_ON
Definition opa_ftd_1.0.h:39
#define BTN_ON_PIN
Definition opa_ftd_1.0.h:74
#define RADIO_CONTROL_POWER_ON
#define RADIO_CONTROL_POWER_PIN
#define RADIO_CONTROL_POWER_PORT
#define MCU_PWR_PIN
Definition opa_ftd_1.0.h:38
#define BTN_ON
Definition opa_ftd_1.0.h:73
arch independent PIPE API
#define PERIPHERAL3V3_ENABLE_ON
Definition px4fmu.h:288
#define PERIPHERAL3V3_ENABLE_PORT
Definition px4fmu.h:286
#define PERIPHERAL3V3_ENABLE_PIN
Definition px4fmu.h:287
arch independent Random Number Generator API
void softi2c_event(void)
Definition softi2c.c:624
Platform-independent software I2C implementation.
Radio control spektrum interface.
Architecture independent SPI (Serial Peripheral Interface) API.
void VCOM_event(void)
Poll usb (required by libopencm3).
Definition usb_ser_hw.c:468
void VCOM_init(void)
Definition usb_ser_hw.c:565
void sys_time_init(void)
Definition sys_time.c:119
Architecture independent timing functions.
arch independent UART (Universal Asynchronous Receiver/Transmitter) API
arch independent UDP API
arch independent USB API