Paparazzi UAS  v5.15_devel-112-g521f3cf
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
mcu_arch.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2013 AggieAir, A Remote Sensing Unmanned Aerial System for Scientific Applications
3  * Utah State University, http://aggieair.usu.edu/
4  *
5  * Michal Podhradsky (michal.podhradsky@aggiemail.usu.edu)
6  * Calvin Coopmans (c.r.coopmans@ieee.org)
7  *
8  *
9  * This file is part of paparazzi.
10  *
11  * paparazzi is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; either version 2, or (at your option)
14  * any later version.
15  *
16  * paparazzi is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with paparazzi; see the file COPYING. If not, write to
23  * the Free Software Foundation, 59 Temple Place - Suite 330,
24  * Boston, MA 02111-1307, USA.
25  */
31 #ifndef CHIBIOS_MCU_ARCH_H
32 #define CHIBIOS_MCU_ARCH_H
33 
34 #include "std.h"
35 
36 #define mcu_int_enable() {}
37 #define mcu_int_disable() {}
38 
39 extern void mcu_arch_init(void);
40 
41 #if USE_HARD_FAULT_RECOVERY
42 extern bool recovering_from_hard_fault;
43 #endif
44 
45 #include <ch.h>
46 
55 static inline void mcu_deep_sleep(void)
56 {
57 #if defined STM32F4
58  /* clear PDDS and LPDS bits */
59  PWR->CR &= ~(PWR_CR_PDDS | PWR_CR_LPDS);
60  /* set LPDS and clear */
61  PWR->CR |= (PWR_CR_LPDS | PWR_CR_CSBF | PWR_CR_CWUF);
62 #elif defined STM32F7
63  /* clear PDDS and LPDS bits */
64  PWR->CR1 &= ~(PWR_CR1_PDDS | PWR_CR1_LPDS);
65  /* set LPDS and clear */
66  PWR->CR1 |= (PWR_CR1_LPDS | PWR_CR1_CSBF);
67 #endif
68 
69  /* Setup the deepsleep mask */
70  SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
71 
72  __disable_irq();
73 
74  __SEV();
75  __WFE();
76  __WFE();
77 
78  __enable_irq();
79 
80  /* clear the deepsleep mask */
81  SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;
82 }
83 
86 static inline void mcu_reset(void)
87 {
88  NVIC_SystemReset();
89 }
90 
94 extern void mcu_periph_energy_save(void);
95 
96 #endif /* CHIBIOS_MCU_ARCH_H */
void mcu_periph_energy_save(void)
Call board specific energy saving Can be necessary for closing on power off.
Definition: mcu_arch.c:154
static void __enable_irq(void)
Definition: i2c_arch.c:62
static void __disable_irq(void)
Definition: i2c_arch.c:61
void mcu_arch_init(void)
Definition: mcu_arch.c:109
#define SCB
Definition: LPC21xx.h:394
static void mcu_reset(void)
Request a software reset of the MCU.
Definition: mcu_arch.h:86
static void mcu_deep_sleep(void)
Put MCU into deep sleep mode.
Definition: mcu_arch.h:55