The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
Kojto
Date:
Tue Feb 02 14:43:35 2016 +0000
Revision:
113:f141b2784e32
Parent:
98:8ab26030e058
Child:
128:9bcdf88f62b0
Release 113 of the mbed library

Changes:
- new targets - Silabs Perl Gecko, TY51822
- Silabs - emlib update to 4.1.0, various bugfixes as result
- STM B96B_F446VE - add async serial support
- Freescale KLXX - rtc lock fix
- LPC11U68 and LPC1549 - pwm bugfixes - duty cycle

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 98:8ab26030e058 1 /***************************************************************************//**
Kojto 98:8ab26030e058 2 * @file em_emu.h
Kojto 98:8ab26030e058 3 * @brief Energy management unit (EMU) peripheral API
Kojto 113:f141b2784e32 4 * @version 4.2.1
Kojto 98:8ab26030e058 5 *******************************************************************************
Kojto 98:8ab26030e058 6 * @section License
Kojto 113:f141b2784e32 7 * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
Kojto 98:8ab26030e058 8 *******************************************************************************
Kojto 98:8ab26030e058 9 *
Kojto 98:8ab26030e058 10 * Permission is granted to anyone to use this software for any purpose,
Kojto 98:8ab26030e058 11 * including commercial applications, and to alter it and redistribute it
Kojto 98:8ab26030e058 12 * freely, subject to the following restrictions:
Kojto 98:8ab26030e058 13 *
Kojto 98:8ab26030e058 14 * 1. The origin of this software must not be misrepresented; you must not
Kojto 98:8ab26030e058 15 * claim that you wrote the original software.
Kojto 98:8ab26030e058 16 * 2. Altered source versions must be plainly marked as such, and must not be
Kojto 98:8ab26030e058 17 * misrepresented as being the original software.
Kojto 98:8ab26030e058 18 * 3. This notice may not be removed or altered from any source distribution.
Kojto 98:8ab26030e058 19 *
Kojto 98:8ab26030e058 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
Kojto 98:8ab26030e058 21 * obligation to support this Software. Silicon Labs is providing the
Kojto 98:8ab26030e058 22 * Software "AS IS", with no express or implied warranties of any kind,
Kojto 98:8ab26030e058 23 * including, but not limited to, any implied warranties of merchantability
Kojto 98:8ab26030e058 24 * or fitness for any particular purpose or warranties against infringement
Kojto 98:8ab26030e058 25 * of any proprietary rights of a third party.
Kojto 98:8ab26030e058 26 *
Kojto 98:8ab26030e058 27 * Silicon Labs will not be liable for any consequential, incidental, or
Kojto 98:8ab26030e058 28 * special damages, or any other relief, or for any claim by any third party,
Kojto 98:8ab26030e058 29 * arising from your use of this Software.
Kojto 98:8ab26030e058 30 *
Kojto 98:8ab26030e058 31 ******************************************************************************/
Kojto 98:8ab26030e058 32
Kojto 98:8ab26030e058 33 #ifndef __SILICON_LABS_EM_EMU_H__
Kojto 98:8ab26030e058 34 #define __SILICON_LABS_EM_EMU_H__
Kojto 98:8ab26030e058 35
Kojto 98:8ab26030e058 36 #include "em_device.h"
Kojto 98:8ab26030e058 37 #if defined( EMU_PRESENT )
Kojto 98:8ab26030e058 38
Kojto 98:8ab26030e058 39 #include <stdbool.h>
Kojto 113:f141b2784e32 40 #include "em_bus.h"
Kojto 98:8ab26030e058 41
Kojto 98:8ab26030e058 42 #ifdef __cplusplus
Kojto 98:8ab26030e058 43 extern "C" {
Kojto 98:8ab26030e058 44 #endif
Kojto 98:8ab26030e058 45
Kojto 98:8ab26030e058 46 /***************************************************************************//**
Kojto 98:8ab26030e058 47 * @addtogroup EM_Library
Kojto 98:8ab26030e058 48 * @{
Kojto 98:8ab26030e058 49 ******************************************************************************/
Kojto 98:8ab26030e058 50
Kojto 98:8ab26030e058 51 /***************************************************************************//**
Kojto 98:8ab26030e058 52 * @addtogroup EMU
Kojto 98:8ab26030e058 53 * @{
Kojto 98:8ab26030e058 54 ******************************************************************************/
Kojto 98:8ab26030e058 55
Kojto 98:8ab26030e058 56 /*******************************************************************************
Kojto 98:8ab26030e058 57 ******************************** ENUMS ************************************
Kojto 98:8ab26030e058 58 ******************************************************************************/
Kojto 98:8ab26030e058 59
Kojto 98:8ab26030e058 60 #if defined( _EMU_EM4CONF_OSC_MASK )
Kojto 98:8ab26030e058 61 /** EM4 duty oscillator */
Kojto 98:8ab26030e058 62 typedef enum
Kojto 98:8ab26030e058 63 {
Kojto 98:8ab26030e058 64 /** Select ULFRCO as duty oscillator in EM4 */
Kojto 98:8ab26030e058 65 emuEM4Osc_ULFRCO = EMU_EM4CONF_OSC_ULFRCO,
Kojto 98:8ab26030e058 66 /** Select LFXO as duty oscillator in EM4 */
Kojto 98:8ab26030e058 67 emuEM4Osc_LFXO = EMU_EM4CONF_OSC_LFXO,
Kojto 98:8ab26030e058 68 /** Select LFRCO as duty oscillator in EM4 */
Kojto 98:8ab26030e058 69 emuEM4Osc_LFRCO = EMU_EM4CONF_OSC_LFRCO
Kojto 98:8ab26030e058 70 } EMU_EM4Osc_TypeDef;
Kojto 98:8ab26030e058 71 #endif
Kojto 98:8ab26030e058 72
Kojto 98:8ab26030e058 73 #if defined( _EMU_BUCTRL_PROBE_MASK )
Kojto 98:8ab26030e058 74 /** Backup Power Voltage Probe types */
Kojto 98:8ab26030e058 75 typedef enum
Kojto 98:8ab26030e058 76 {
Kojto 98:8ab26030e058 77 /** Disable voltage probe */
Kojto 98:8ab26030e058 78 emuProbe_Disable = EMU_BUCTRL_PROBE_DISABLE,
Kojto 98:8ab26030e058 79 /** Connect probe to VDD_DREG */
Kojto 98:8ab26030e058 80 emuProbe_VDDDReg = EMU_BUCTRL_PROBE_VDDDREG,
Kojto 98:8ab26030e058 81 /** Connect probe to BU_IN */
Kojto 98:8ab26030e058 82 emuProbe_BUIN = EMU_BUCTRL_PROBE_BUIN,
Kojto 98:8ab26030e058 83 /** Connect probe to BU_OUT */
Kojto 98:8ab26030e058 84 emuProbe_BUOUT = EMU_BUCTRL_PROBE_BUOUT
Kojto 98:8ab26030e058 85 } EMU_Probe_TypeDef;
Kojto 98:8ab26030e058 86 #endif
Kojto 98:8ab26030e058 87
Kojto 98:8ab26030e058 88 #if defined( _EMU_PWRCONF_PWRRES_MASK )
Kojto 98:8ab26030e058 89 /** Backup Power Domain resistor selection */
Kojto 98:8ab26030e058 90 typedef enum
Kojto 98:8ab26030e058 91 {
Kojto 98:8ab26030e058 92 /** Main power and backup power connected with RES0 series resistance */
Kojto 98:8ab26030e058 93 emuRes_Res0 = EMU_PWRCONF_PWRRES_RES0,
Kojto 98:8ab26030e058 94 /** Main power and backup power connected with RES1 series resistance */
Kojto 98:8ab26030e058 95 emuRes_Res1 = EMU_PWRCONF_PWRRES_RES1,
Kojto 98:8ab26030e058 96 /** Main power and backup power connected with RES2 series resistance */
Kojto 98:8ab26030e058 97 emuRes_Res2 = EMU_PWRCONF_PWRRES_RES2,
Kojto 98:8ab26030e058 98 /** Main power and backup power connected with RES3 series resistance */
Kojto 98:8ab26030e058 99 emuRes_Res3 = EMU_PWRCONF_PWRRES_RES3,
Kojto 98:8ab26030e058 100 } EMU_Resistor_TypeDef;
Kojto 98:8ab26030e058 101 #endif
Kojto 98:8ab26030e058 102
Kojto 98:8ab26030e058 103 #if defined( BU_PRESENT )
Kojto 98:8ab26030e058 104 /** Backup Power Domain power connection */
Kojto 98:8ab26030e058 105 typedef enum
Kojto 98:8ab26030e058 106 {
Kojto 98:8ab26030e058 107 /** No connection between main and backup power */
Kojto 98:8ab26030e058 108 emuPower_None = EMU_BUINACT_PWRCON_NONE,
Kojto 98:8ab26030e058 109 /** Main power and backup power connected through diode,
Kojto 98:8ab26030e058 110 allowing current from backup to main only */
Kojto 98:8ab26030e058 111 emuPower_BUMain = EMU_BUINACT_PWRCON_BUMAIN,
Kojto 98:8ab26030e058 112 /** Main power and backup power connected through diode,
Kojto 98:8ab26030e058 113 allowing current from main to backup only */
Kojto 98:8ab26030e058 114 emuPower_MainBU = EMU_BUINACT_PWRCON_MAINBU,
Kojto 98:8ab26030e058 115 /** Main power and backup power connected without diode */
Kojto 98:8ab26030e058 116 emuPower_NoDiode = EMU_BUINACT_PWRCON_NODIODE,
Kojto 98:8ab26030e058 117 } EMU_Power_TypeDef;
Kojto 98:8ab26030e058 118 #endif
Kojto 98:8ab26030e058 119
Kojto 98:8ab26030e058 120 /** BOD threshold setting selector, active or inactive mode */
Kojto 98:8ab26030e058 121 typedef enum
Kojto 98:8ab26030e058 122 {
Kojto 98:8ab26030e058 123 /** Configure BOD threshold for active mode */
Kojto 98:8ab26030e058 124 emuBODMode_Active,
Kojto 98:8ab26030e058 125 /** Configure BOD threshold for inactive mode */
Kojto 98:8ab26030e058 126 emuBODMode_Inactive,
Kojto 98:8ab26030e058 127 } EMU_BODMode_TypeDef;
Kojto 98:8ab26030e058 128
Kojto 113:f141b2784e32 129 #if defined( _EMU_EM4CTRL_EM4STATE_MASK )
Kojto 113:f141b2784e32 130 /** EM4 modes */
Kojto 113:f141b2784e32 131 typedef enum
Kojto 113:f141b2784e32 132 {
Kojto 113:f141b2784e32 133 /** EM4 Hibernate */
Kojto 113:f141b2784e32 134 emuEM4Hibernate = EMU_EM4CTRL_EM4STATE_EM4H,
Kojto 113:f141b2784e32 135 /** EM4 Shutoff */
Kojto 113:f141b2784e32 136 emuEM4Shutoff = EMU_EM4CTRL_EM4STATE_EM4S,
Kojto 113:f141b2784e32 137 } EMU_EM4State_TypeDef;
Kojto 113:f141b2784e32 138 #endif
Kojto 98:8ab26030e058 139
Kojto 98:8ab26030e058 140
Kojto 113:f141b2784e32 141 #if defined( _EMU_EM4CTRL_EM4IORETMODE_MASK )
Kojto 113:f141b2784e32 142 typedef enum
Kojto 113:f141b2784e32 143 {
Kojto 113:f141b2784e32 144 /** No Retention: Pads enter reset state when entering EM4 */
Kojto 113:f141b2784e32 145 emuPinRetentionDisable = EMU_EM4CTRL_EM4IORETMODE_DISABLE,
Kojto 113:f141b2784e32 146 /** Retention through EM4: Pads enter reset state when exiting EM4 */
Kojto 113:f141b2784e32 147 emuPinRetentionEm4Exit = EMU_EM4CTRL_EM4IORETMODE_EM4EXIT,
Kojto 113:f141b2784e32 148 /** Retention through EM4 and wakeup: call EMU_UnlatchPinRetention() to
Kojto 113:f141b2784e32 149 release pins from retention after EM4 wakeup */
Kojto 113:f141b2784e32 150 emuPinRetentionLatch = EMU_EM4CTRL_EM4IORETMODE_SWUNLATCH,
Kojto 113:f141b2784e32 151 } EMU_EM4PinRetention_TypeDef;
Kojto 113:f141b2784e32 152 #endif
Kojto 113:f141b2784e32 153
Kojto 113:f141b2784e32 154
Kojto 113:f141b2784e32 155 #if defined( _EMU_PWRCFG_MASK )
Kojto 113:f141b2784e32 156 /** Power configurations */
Kojto 113:f141b2784e32 157 typedef enum
Kojto 113:f141b2784e32 158 {
Kojto 113:f141b2784e32 159 /** DCDC is connected to DVDD */
Kojto 113:f141b2784e32 160 emuPowerConfig_DcdcToDvdd = EMU_PWRCFG_PWRCFG_DCDCTODVDD,
Kojto 113:f141b2784e32 161 } EMU_PowerConfig_TypeDef;
Kojto 113:f141b2784e32 162 #endif
Kojto 113:f141b2784e32 163
Kojto 113:f141b2784e32 164 #if defined( _EMU_DCDCCTRL_MASK )
Kojto 113:f141b2784e32 165 /** DCDC operating modes */
Kojto 113:f141b2784e32 166 typedef enum
Kojto 113:f141b2784e32 167 {
Kojto 113:f141b2784e32 168 /** DCDC regulator bypass */
Kojto 113:f141b2784e32 169 emuDcdcMode_Bypass = EMU_DCDCCTRL_DCDCMODE_BYPASS,
Kojto 113:f141b2784e32 170 /** DCDC low-noise mode */
Kojto 113:f141b2784e32 171 emuDcdcMode_LowNoise = EMU_DCDCCTRL_DCDCMODE_LOWNOISE,
Kojto 113:f141b2784e32 172 } EMU_DcdcMode_TypeDef;
Kojto 113:f141b2784e32 173 #endif
Kojto 113:f141b2784e32 174
Kojto 113:f141b2784e32 175 #if defined( _EMU_PWRCTRL_MASK )
Kojto 113:f141b2784e32 176 /** DCDC to DVDD mode analog peripheral power supply select */
Kojto 113:f141b2784e32 177 typedef enum
Kojto 113:f141b2784e32 178 {
Kojto 113:f141b2784e32 179 /** Select AVDD as analog power supply. Typically lower noise, but less energy efficient. */
Kojto 113:f141b2784e32 180 emuDcdcAnaPeripheralPower_AVDD = EMU_PWRCTRL_ANASW_AVDD,
Kojto 113:f141b2784e32 181 /** Select DCDC (DVDD) as analog power supply. Typically more energy efficient, but more noise. */
Kojto 113:f141b2784e32 182 emuDcdcAnaPeripheralPower_DCDC = EMU_PWRCTRL_ANASW_DVDD
Kojto 113:f141b2784e32 183 } EMU_DcdcAnaPeripheralPower_TypeDef;
Kojto 113:f141b2784e32 184 #endif
Kojto 113:f141b2784e32 185
Kojto 113:f141b2784e32 186 #if defined( _EMU_DCDCMISCCTRL_MASK )
Kojto 113:f141b2784e32 187 /** DCDC Low-noise efficiency mode */
Kojto 113:f141b2784e32 188 typedef enum
Kojto 113:f141b2784e32 189 {
Kojto 113:f141b2784e32 190 #if defined( _EFM_DEVICE )
Kojto 113:f141b2784e32 191 /** High efficiency mode */
Kojto 113:f141b2784e32 192 emuDcdcLnHighEfficiency = 0,
Kojto 113:f141b2784e32 193 #endif
Kojto 113:f141b2784e32 194 /** Fast transient response mode */
Kojto 113:f141b2784e32 195 emuDcdcLnFastTransient = EMU_DCDCMISCCTRL_LNFORCECCM,
Kojto 113:f141b2784e32 196 } EMU_DcdcLnTransientMode_TypeDef;
Kojto 113:f141b2784e32 197 #endif
Kojto 113:f141b2784e32 198
Kojto 113:f141b2784e32 199 #if defined( _EMU_DCDCCTRL_MASK )
Kojto 113:f141b2784e32 200 /** DCDC Low-noise RCO band select */
Kojto 113:f141b2784e32 201 typedef enum
Kojto 113:f141b2784e32 202 {
Kojto 113:f141b2784e32 203 /** Set RCO to 3MHz */
Kojto 113:f141b2784e32 204 EMU_DcdcLnRcoBand_3MHz = 0,
Kojto 113:f141b2784e32 205 /** Set RCO to 4MHz */
Kojto 113:f141b2784e32 206 EMU_DcdcLnRcoBand_4MHz = 1,
Kojto 113:f141b2784e32 207 /** Set RCO to 5MHz */
Kojto 113:f141b2784e32 208 EMU_DcdcLnRcoBand_5MHz = 2,
Kojto 113:f141b2784e32 209 /** Set RCO to 6MHz */
Kojto 113:f141b2784e32 210 EMU_DcdcLnRcoBand_6MHz = 3,
Kojto 113:f141b2784e32 211 /** Set RCO to 7MHz */
Kojto 113:f141b2784e32 212 EMU_DcdcLnRcoBand_7MHz = 4,
Kojto 113:f141b2784e32 213 /** Set RCO to 8MHz */
Kojto 113:f141b2784e32 214 EMU_DcdcLnRcoBand_8MHz = 5,
Kojto 113:f141b2784e32 215 /** Set RCO to 9MHz */
Kojto 113:f141b2784e32 216 EMU_DcdcLnRcoBand_9MHz = 6,
Kojto 113:f141b2784e32 217 /** Set RCO to 10MHz */
Kojto 113:f141b2784e32 218 EMU_DcdcLnRcoBand_10MHz = 7,
Kojto 113:f141b2784e32 219 } EMU_DcdcLnRcoBand_TypeDef;
Kojto 113:f141b2784e32 220
Kojto 113:f141b2784e32 221 #endif
Kojto 113:f141b2784e32 222
Kojto 113:f141b2784e32 223 #if defined( EMU_STATUS_VMONRDY )
Kojto 113:f141b2784e32 224 /** VMON channels */
Kojto 113:f141b2784e32 225 typedef enum
Kojto 113:f141b2784e32 226 {
Kojto 113:f141b2784e32 227 emuVmonChannel_AVDD,
Kojto 113:f141b2784e32 228 emuVmonChannel_ALTAVDD,
Kojto 113:f141b2784e32 229 emuVmonChannel_DVDD,
Kojto 113:f141b2784e32 230 emuVmonChannel_IOVDD0
Kojto 113:f141b2784e32 231 } EMU_VmonChannel_TypeDef;
Kojto 113:f141b2784e32 232 #endif /* EMU_STATUS_VMONRDY */
Kojto 113:f141b2784e32 233
Kojto 98:8ab26030e058 234 /*******************************************************************************
Kojto 98:8ab26030e058 235 ******************************* STRUCTS ***********************************
Kojto 98:8ab26030e058 236 ******************************************************************************/
Kojto 98:8ab26030e058 237
Kojto 98:8ab26030e058 238 /** Energy Mode 2 and 3 initialization structure */
Kojto 98:8ab26030e058 239 typedef struct
Kojto 98:8ab26030e058 240 {
Kojto 113:f141b2784e32 241 bool em23VregFullEn; /**< Enable full VREG drive strength in EM2/3 */
Kojto 98:8ab26030e058 242 } EMU_EM23Init_TypeDef;
Kojto 98:8ab26030e058 243
Kojto 98:8ab26030e058 244 /** Default initialization of EM2 and 3 configuration */
Kojto 98:8ab26030e058 245 #define EMU_EM23INIT_DEFAULT \
Kojto 113:f141b2784e32 246 { false } /* Reduced voltage regulator drive strength in EM2 and EM3 */
Kojto 98:8ab26030e058 247
Kojto 98:8ab26030e058 248
Kojto 113:f141b2784e32 249 #if defined( _EMU_EM4CONF_MASK ) || defined( _EMU_EM4CTRL_MASK )
Kojto 98:8ab26030e058 250 /** Energy Mode 4 initialization structure */
Kojto 98:8ab26030e058 251 typedef struct
Kojto 98:8ab26030e058 252 {
Kojto 113:f141b2784e32 253 #if defined( _EMU_EM4CONF_MASK )
Kojto 98:8ab26030e058 254 /* Init parameters for platforms with EMU->EM4CONF register */
Kojto 113:f141b2784e32 255 bool lockConfig; /**< Lock configuration of regulator, BOD and oscillator */
Kojto 113:f141b2784e32 256 bool buBodRstDis; /**< When set, no reset will be asserted due to Brownout when in EM4 */
Kojto 113:f141b2784e32 257 EMU_EM4Osc_TypeDef osc; /**< EM4 duty oscillator */
Kojto 113:f141b2784e32 258 bool buRtcWakeup; /**< Wake up on EM4 BURTC interrupt */
Kojto 113:f141b2784e32 259 bool vreg; /**< Enable EM4 voltage regulator */
Kojto 113:f141b2784e32 260
Kojto 113:f141b2784e32 261 #elif defined( _EMU_EM4CTRL_MASK )
Kojto 113:f141b2784e32 262 /* Init parameters for platforms with EMU->EM4CTRL register */
Kojto 113:f141b2784e32 263 bool retainLfxo; /**< Disable the LFXO upon EM4 entry */
Kojto 113:f141b2784e32 264 bool retainLfrco; /**< Disable the LFRCO upon EM4 entry */
Kojto 113:f141b2784e32 265 bool retainUlfrco; /**< Disable the ULFRCO upon EM4 entry */
Kojto 113:f141b2784e32 266 EMU_EM4State_TypeDef em4State; /**< Hibernate or shutoff EM4 state */
Kojto 113:f141b2784e32 267 EMU_EM4PinRetention_TypeDef pinRetentionMode; /**< EM4 pin retention mode */
Kojto 98:8ab26030e058 268 #endif
Kojto 98:8ab26030e058 269 } EMU_EM4Init_TypeDef;
Kojto 113:f141b2784e32 270 #endif
Kojto 98:8ab26030e058 271
Kojto 98:8ab26030e058 272 /** Default initialization of EM4 configuration */
Kojto 98:8ab26030e058 273 #if defined( _EMU_EM4CONF_MASK )
Kojto 113:f141b2784e32 274 #define EMU_EM4INIT_DEFAULT \
Kojto 113:f141b2784e32 275 { \
Kojto 113:f141b2784e32 276 false, /* Dont't lock configuration after it's been set */ \
Kojto 113:f141b2784e32 277 false, /* No reset will be asserted due to Brownout when in EM4 */ \
Kojto 113:f141b2784e32 278 emuEM4Osc_ULFRCO, /* Use default ULFRCO oscillator */ \
Kojto 113:f141b2784e32 279 true, /* Wake up on EM4 BURTC interrupt */ \
Kojto 113:f141b2784e32 280 true, /* Enable VREG */ \
Kojto 113:f141b2784e32 281 }
Kojto 98:8ab26030e058 282 #endif
Kojto 113:f141b2784e32 283 #if defined( _EMU_EM4CTRL_MASK )
Kojto 113:f141b2784e32 284 #define EMU_EM4INIT_DEFAULT \
Kojto 113:f141b2784e32 285 { \
Kojto 113:f141b2784e32 286 false, /* Retain LFXO configuration upon EM4 entry */ \
Kojto 113:f141b2784e32 287 false, /* Retain LFRCO configuration upon EM4 entry */ \
Kojto 113:f141b2784e32 288 false, /* Retain ULFRCO configuration upon EM4 entry */ \
Kojto 113:f141b2784e32 289 emuEM4Shutoff, /* Use EM4 shutoff state */ \
Kojto 113:f141b2784e32 290 emuPinRetentionDisable, /* Do not retain pins in EM4 */ \
Kojto 113:f141b2784e32 291 }
Kojto 113:f141b2784e32 292 #endif
Kojto 98:8ab26030e058 293
Kojto 98:8ab26030e058 294 #if defined( BU_PRESENT )
Kojto 98:8ab26030e058 295 /** Backup Power Domain Initialization structure */
Kojto 98:8ab26030e058 296 typedef struct
Kojto 98:8ab26030e058 297 {
Kojto 98:8ab26030e058 298 /* Backup Power Domain power configuration */
Kojto 98:8ab26030e058 299
Kojto 98:8ab26030e058 300 /** Voltage probe select, selects ADC voltage */
Kojto 98:8ab26030e058 301 EMU_Probe_TypeDef probe;
Kojto 98:8ab26030e058 302 /** Enable BOD calibration mode */
Kojto 98:8ab26030e058 303 bool bodCal;
Kojto 98:8ab26030e058 304 /** Enable BU_STAT status pin for active BU mode */
Kojto 98:8ab26030e058 305 bool statusPinEnable;
Kojto 98:8ab26030e058 306
Kojto 98:8ab26030e058 307 /* Backup Power Domain connection configuration */
Kojto 98:8ab26030e058 308 /** Power domain resistor */
Kojto 98:8ab26030e058 309 EMU_Resistor_TypeDef resistor;
Kojto 98:8ab26030e058 310 /** BU_VOUT strong enable */
Kojto 98:8ab26030e058 311 bool voutStrong;
Kojto 98:8ab26030e058 312 /** BU_VOUT medium enable */
Kojto 98:8ab26030e058 313 bool voutMed;
Kojto 98:8ab26030e058 314 /** BU_VOUT weak enable */
Kojto 98:8ab26030e058 315 bool voutWeak;
Kojto 98:8ab26030e058 316 /** Power connection, when not in Backup Mode */
Kojto 98:8ab26030e058 317 EMU_Power_TypeDef inactivePower;
Kojto 98:8ab26030e058 318 /** Power connection, when in Backup Mode */
Kojto 98:8ab26030e058 319 EMU_Power_TypeDef activePower;
Kojto 98:8ab26030e058 320 /** Enable backup power domain, and release reset, enable BU_VIN pin */
Kojto 98:8ab26030e058 321 bool enable;
Kojto 98:8ab26030e058 322 } EMU_BUPDInit_TypeDef;
Kojto 98:8ab26030e058 323
Kojto 113:f141b2784e32 324 /** Default Backup Power Domain configuration */
Kojto 113:f141b2784e32 325 #define EMU_BUPDINIT_DEFAULT \
Kojto 113:f141b2784e32 326 { \
Kojto 113:f141b2784e32 327 emuProbe_Disable, /* Do not enable voltage probe */ \
Kojto 113:f141b2784e32 328 false, /* Disable BOD calibration mode */ \
Kojto 113:f141b2784e32 329 false, /* Disable BU_STAT pin for backup mode indication */ \
Kojto 113:f141b2784e32 330 \
Kojto 113:f141b2784e32 331 emuRes_Res0, /* RES0 series resistance between main and backup power */ \
Kojto 113:f141b2784e32 332 false, /* Don't enable strong switch */ \
Kojto 113:f141b2784e32 333 false, /* Don't enable medium switch */ \
Kojto 113:f141b2784e32 334 false, /* Don't enable weak switch */ \
Kojto 113:f141b2784e32 335 \
Kojto 113:f141b2784e32 336 emuPower_None, /* No connection between main and backup power (inactive mode) */ \
Kojto 113:f141b2784e32 337 emuPower_None, /* No connection between main and backup power (active mode) */ \
Kojto 113:f141b2784e32 338 true /* Enable BUPD enter on BOD, enable BU_VIN pin, release BU reset */ \
Kojto 113:f141b2784e32 339 }
Kojto 98:8ab26030e058 340 #endif
Kojto 98:8ab26030e058 341
Kojto 113:f141b2784e32 342 #if defined( _EMU_DCDCCTRL_MASK )
Kojto 113:f141b2784e32 343 /** DCDC initialization structure */
Kojto 113:f141b2784e32 344 typedef struct
Kojto 113:f141b2784e32 345 {
Kojto 113:f141b2784e32 346 EMU_PowerConfig_TypeDef powerConfig; /**< Device external power configuration */
Kojto 113:f141b2784e32 347 EMU_DcdcMode_TypeDef dcdcMode; /**< DCDC regulator operating mode in EM0 */
Kojto 113:f141b2784e32 348 uint16_t mVout; /**< Target output voltage (mV) */
Kojto 113:f141b2784e32 349 uint16_t em01LoadCurrent_mA; /**< Estimated average load current in EM0 (mA).
Kojto 113:f141b2784e32 350 This estimate is also used for EM1 optimization,
Kojto 113:f141b2784e32 351 so if EM1 current is expected to be higher than EM0,
Kojto 113:f141b2784e32 352 then this parameter should hold the higher EM1 current. */
Kojto 113:f141b2784e32 353 uint16_t em234LoadCurrent_uA; /**< Estimated average load current in EM2 (uA).
Kojto 113:f141b2784e32 354 This estimate is also used for EM3 and 4 optimization,
Kojto 113:f141b2784e32 355 so if EM3 or 4 current is expected to be higher than EM2,
Kojto 113:f141b2784e32 356 then this parameter should hold the higher EM3 or 4 current. */
Kojto 113:f141b2784e32 357 uint16_t maxCurrent_mA; /**< Maximum peak DCDC output current (mA).
Kojto 113:f141b2784e32 358 This can be set to the maximum for the power source,
Kojto 113:f141b2784e32 359 for example the maximum for a battery. */
Kojto 113:f141b2784e32 360 EMU_DcdcAnaPeripheralPower_TypeDef anaPeripheralPower;/**< Select analog peripheral power in DCDC-to-DVDD mode */
Kojto 113:f141b2784e32 361 EMU_DcdcLnTransientMode_TypeDef lnTransientMode; /**< Low-noise transient mode */
Kojto 113:f141b2784e32 362
Kojto 113:f141b2784e32 363 } EMU_DCDCInit_TypeDef;
Kojto 113:f141b2784e32 364
Kojto 113:f141b2784e32 365 /** Default DCDC initialization */
Kojto 113:f141b2784e32 366 #if defined( _EFM_DEVICE )
Kojto 113:f141b2784e32 367 #define EMU_DCDCINIT_DEFAULT \
Kojto 113:f141b2784e32 368 { \
Kojto 113:f141b2784e32 369 emuPowerConfig_DcdcToDvdd, /* DCDC to DVDD */ \
Kojto 113:f141b2784e32 370 emuDcdcMode_LowNoise, /* Low-niose mode in EM0 (can be set to LowPower on EFM32PG revB0) */ \
Kojto 113:f141b2784e32 371 1800, /* Nominal output voltage for DVDD mode, 1.8V */ \
Kojto 113:f141b2784e32 372 5, /* Nominal EM0 load current of less than 5mA */ \
Kojto 113:f141b2784e32 373 10, /* Nominal EM2/3 load current less than 10uA */ \
Kojto 113:f141b2784e32 374 160, /* Maximum peak current of 160mA */ \
Kojto 113:f141b2784e32 375 emuDcdcAnaPeripheralPower_DCDC,/* Select DCDC as analog power supply (lower power) */ \
Kojto 113:f141b2784e32 376 emuDcdcLnHighEfficiency, /* Use low-noise high-efficiency mode (ignored if emuDcdcMode_LowPower) */ \
Kojto 113:f141b2784e32 377 }
Kojto 113:f141b2784e32 378 #else /* EFR32 device */
Kojto 113:f141b2784e32 379 #define EMU_DCDCINIT_DEFAULT \
Kojto 113:f141b2784e32 380 { \
Kojto 113:f141b2784e32 381 emuPowerConfig_DcdcToDvdd, /* DCDC to DVDD */ \
Kojto 113:f141b2784e32 382 emuDcdcMode_LowNoise, /* Low-niose mode in EM0 */ \
Kojto 113:f141b2784e32 383 1800, /* Nominal output voltage for DVDD mode, 1.8V */ \
Kojto 113:f141b2784e32 384 15, /* Nominal EM0 load current of less than 5mA */ \
Kojto 113:f141b2784e32 385 10, /* Nominal EM2/3 load current less than 10uA */ \
Kojto 113:f141b2784e32 386 160, /* Maximum peak current of 160mA */ \
Kojto 113:f141b2784e32 387 emuDcdcAnaPeripheralPower_AVDD,/* Select AVDD as analog power supply (less noise) */ \
Kojto 113:f141b2784e32 388 emuDcdcLnFastTransient, /* Use low-noise fast-transient mode */ \
Kojto 113:f141b2784e32 389 }
Kojto 113:f141b2784e32 390 #endif
Kojto 113:f141b2784e32 391
Kojto 113:f141b2784e32 392 #endif
Kojto 113:f141b2784e32 393
Kojto 113:f141b2784e32 394 #if defined( EMU_STATUS_VMONRDY )
Kojto 113:f141b2784e32 395 /** VMON initialization structure */
Kojto 113:f141b2784e32 396 typedef struct
Kojto 113:f141b2784e32 397 {
Kojto 113:f141b2784e32 398 EMU_VmonChannel_TypeDef channel; /**< VMON channel to configure */
Kojto 113:f141b2784e32 399 int threshold; /**< Trigger threshold (mV) */
Kojto 113:f141b2784e32 400 bool riseWakeup; /**< Wake up from EM4H on rising edge */
Kojto 113:f141b2784e32 401 bool fallWakeup; /**< Wake up from EM4H on falling edge */
Kojto 113:f141b2784e32 402 bool enable; /**< Enable VMON channel */
Kojto 113:f141b2784e32 403 bool retDisable; /**< Disable IO0 retention when voltage drops below threshold (IOVDD only) */
Kojto 113:f141b2784e32 404 } EMU_VmonInit_TypeDef;
Kojto 113:f141b2784e32 405
Kojto 113:f141b2784e32 406 /** Default VMON initialization structure */
Kojto 113:f141b2784e32 407 #define EMU_VMONINIT_DEFAULT \
Kojto 113:f141b2784e32 408 { \
Kojto 113:f141b2784e32 409 emuVmonChannel_AVDD, /* AVDD VMON channel */ \
Kojto 113:f141b2784e32 410 3200, /* 3.2 V threshold */ \
Kojto 113:f141b2784e32 411 false, /* Don't wake from EM4H on rising edge */ \
Kojto 113:f141b2784e32 412 false, /* Don't wake from EM4H on falling edge */ \
Kojto 113:f141b2784e32 413 true, /* Enable VMON channel */ \
Kojto 113:f141b2784e32 414 false /* Don't disable IO0 retention */ \
Kojto 113:f141b2784e32 415 }
Kojto 113:f141b2784e32 416
Kojto 113:f141b2784e32 417 /** VMON Hysteresis initialization structure */
Kojto 113:f141b2784e32 418 typedef struct
Kojto 113:f141b2784e32 419 {
Kojto 113:f141b2784e32 420 EMU_VmonChannel_TypeDef channel; /**< VMON channel to configure */
Kojto 113:f141b2784e32 421 int riseThreshold; /**< Rising threshold (mV) */
Kojto 113:f141b2784e32 422 int fallThreshold; /**< Falling threshold (mV) */
Kojto 113:f141b2784e32 423 bool riseWakeup; /**< Wake up from EM4H on rising edge */
Kojto 113:f141b2784e32 424 bool fallWakeup; /**< Wake up from EM4H on falling edge */
Kojto 113:f141b2784e32 425 bool enable; /**< Enable VMON channel */
Kojto 113:f141b2784e32 426 } EMU_VmonHystInit_TypeDef;
Kojto 113:f141b2784e32 427
Kojto 113:f141b2784e32 428 /** Default VMON Hysteresis initialization structure */
Kojto 113:f141b2784e32 429 #define EMU_VMONHYSTINIT_DEFAULT \
Kojto 113:f141b2784e32 430 { \
Kojto 113:f141b2784e32 431 emuVmonChannel_AVDD, /* AVDD VMON channel */ \
Kojto 113:f141b2784e32 432 3200, /* 3.2 V rise threshold */ \
Kojto 113:f141b2784e32 433 3200, /* 3.2 V fall threshold */ \
Kojto 113:f141b2784e32 434 false, /* Don't wake from EM4H on rising edge */ \
Kojto 113:f141b2784e32 435 false, /* Don't wake from EM4H on falling edge */ \
Kojto 113:f141b2784e32 436 true /* Enable VMON channel */ \
Kojto 113:f141b2784e32 437 }
Kojto 113:f141b2784e32 438 #endif /* EMU_STATUS_VMONRDY */
Kojto 98:8ab26030e058 439
Kojto 98:8ab26030e058 440 /*******************************************************************************
Kojto 98:8ab26030e058 441 ***************************** PROTOTYPES **********************************
Kojto 98:8ab26030e058 442 ******************************************************************************/
Kojto 98:8ab26030e058 443
Kojto 98:8ab26030e058 444 /***************************************************************************//**
Kojto 98:8ab26030e058 445 * @brief
Kojto 98:8ab26030e058 446 * Enter energy mode 1 (EM1).
Kojto 98:8ab26030e058 447 ******************************************************************************/
Kojto 98:8ab26030e058 448 __STATIC_INLINE void EMU_EnterEM1(void)
Kojto 98:8ab26030e058 449 {
Kojto 113:f141b2784e32 450 /* Enter sleep mode */
Kojto 98:8ab26030e058 451 SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;
Kojto 98:8ab26030e058 452 __WFI();
Kojto 98:8ab26030e058 453 }
Kojto 98:8ab26030e058 454
Kojto 98:8ab26030e058 455 void EMU_EM23Init(EMU_EM23Init_TypeDef *em23Init);
Kojto 113:f141b2784e32 456 #if defined( _EMU_EM4CONF_MASK ) || defined( _EMU_EM4CTRL_MASK )
Kojto 98:8ab26030e058 457 void EMU_EM4Init(EMU_EM4Init_TypeDef *em4Init);
Kojto 98:8ab26030e058 458 #endif
Kojto 98:8ab26030e058 459 void EMU_EnterEM2(bool restore);
Kojto 98:8ab26030e058 460 void EMU_EnterEM3(bool restore);
Kojto 98:8ab26030e058 461 void EMU_EnterEM4(void);
Kojto 98:8ab26030e058 462 void EMU_MemPwrDown(uint32_t blocks);
Kojto 98:8ab26030e058 463 void EMU_UpdateOscConfig(void);
Kojto 98:8ab26030e058 464 #if defined( BU_PRESENT )
Kojto 98:8ab26030e058 465 void EMU_BUPDInit(EMU_BUPDInit_TypeDef *bupdInit);
Kojto 98:8ab26030e058 466 void EMU_BUThresholdSet(EMU_BODMode_TypeDef mode, uint32_t value);
Kojto 98:8ab26030e058 467 void EMU_BUThresRangeSet(EMU_BODMode_TypeDef mode, uint32_t value);
Kojto 98:8ab26030e058 468 #endif
Kojto 113:f141b2784e32 469 #if defined( _EMU_DCDCCTRL_MASK )
Kojto 113:f141b2784e32 470 bool EMU_DCDCInit(EMU_DCDCInit_TypeDef *dcdcInit);
Kojto 113:f141b2784e32 471 void EMU_DCDCModeSet(EMU_DcdcMode_TypeDef dcdcMode);
Kojto 113:f141b2784e32 472 bool EMU_DCDCOutputVoltageSet(uint32_t mV, bool setLpVoltage, bool setLnVoltage);
Kojto 113:f141b2784e32 473 void EMU_DCDCOptimizeSlice(uint32_t mALoadCurrent);
Kojto 113:f141b2784e32 474 void EMU_DCDCLnRcoBandSet(EMU_DcdcLnRcoBand_TypeDef band);
Kojto 113:f141b2784e32 475 bool EMU_DCDCPowerOff(void);
Kojto 113:f141b2784e32 476 #endif
Kojto 113:f141b2784e32 477 #if defined( EMU_STATUS_VMONRDY )
Kojto 113:f141b2784e32 478 void EMU_VmonInit(EMU_VmonInit_TypeDef *vmonInit);
Kojto 113:f141b2784e32 479 void EMU_VmonHystInit(EMU_VmonHystInit_TypeDef *vmonInit);
Kojto 113:f141b2784e32 480 void EMU_VmonEnable(EMU_VmonChannel_TypeDef channel, bool enable);
Kojto 113:f141b2784e32 481 bool EMU_VmonChannelStatusGet(EMU_VmonChannel_TypeDef channel);
Kojto 98:8ab26030e058 482
Kojto 113:f141b2784e32 483 /***************************************************************************//**
Kojto 113:f141b2784e32 484 * @brief
Kojto 113:f141b2784e32 485 * Get the status of the voltage monitor (VMON).
Kojto 113:f141b2784e32 486 *
Kojto 113:f141b2784e32 487 * @return
Kojto 113:f141b2784e32 488 * Status of the VMON. True if all the enabled channels are ready, false if
Kojto 113:f141b2784e32 489 * one or more of the enabled channels are not ready.
Kojto 113:f141b2784e32 490 ******************************************************************************/
Kojto 113:f141b2784e32 491 __STATIC_INLINE bool EMU_VmonStatusGet(void)
Kojto 113:f141b2784e32 492 {
Kojto 113:f141b2784e32 493 return BUS_RegBitRead(&EMU->STATUS, _EMU_STATUS_VMONRDY_SHIFT);
Kojto 113:f141b2784e32 494 }
Kojto 113:f141b2784e32 495 #endif /* EMU_STATUS_VMONRDY */
Kojto 98:8ab26030e058 496
Kojto 98:8ab26030e058 497 #if defined( _EMU_IF_MASK )
Kojto 98:8ab26030e058 498 /***************************************************************************//**
Kojto 98:8ab26030e058 499 * @brief
Kojto 98:8ab26030e058 500 * Clear one or more pending EMU interrupts.
Kojto 98:8ab26030e058 501 *
Kojto 98:8ab26030e058 502 * @param[in] flags
Kojto 98:8ab26030e058 503 * Pending EMU interrupt sources to clear. Use one or more valid
Kojto 98:8ab26030e058 504 * interrupt flags for the EMU module (EMU_IFC_nnn).
Kojto 98:8ab26030e058 505 ******************************************************************************/
Kojto 98:8ab26030e058 506 __STATIC_INLINE void EMU_IntClear(uint32_t flags)
Kojto 98:8ab26030e058 507 {
Kojto 98:8ab26030e058 508 EMU->IFC = flags;
Kojto 98:8ab26030e058 509 }
Kojto 98:8ab26030e058 510
Kojto 98:8ab26030e058 511
Kojto 98:8ab26030e058 512 /***************************************************************************//**
Kojto 98:8ab26030e058 513 * @brief
Kojto 98:8ab26030e058 514 * Disable one or more EMU interrupts.
Kojto 98:8ab26030e058 515 *
Kojto 98:8ab26030e058 516 * @param[in] flags
Kojto 98:8ab26030e058 517 * EMU interrupt sources to disable. Use one or more valid
Kojto 98:8ab26030e058 518 * interrupt flags for the EMU module (EMU_IEN_nnn).
Kojto 98:8ab26030e058 519 ******************************************************************************/
Kojto 98:8ab26030e058 520 __STATIC_INLINE void EMU_IntDisable(uint32_t flags)
Kojto 98:8ab26030e058 521 {
Kojto 113:f141b2784e32 522 EMU->IEN &= ~flags;
Kojto 98:8ab26030e058 523 }
Kojto 98:8ab26030e058 524
Kojto 98:8ab26030e058 525
Kojto 98:8ab26030e058 526 /***************************************************************************//**
Kojto 98:8ab26030e058 527 * @brief
Kojto 98:8ab26030e058 528 * Enable one or more EMU interrupts.
Kojto 98:8ab26030e058 529 *
Kojto 98:8ab26030e058 530 * @note
Kojto 98:8ab26030e058 531 * Depending on the use, a pending interrupt may already be set prior to
Kojto 98:8ab26030e058 532 * enabling the interrupt. Consider using EMU_IntClear() prior to enabling
Kojto 98:8ab26030e058 533 * if such a pending interrupt should be ignored.
Kojto 98:8ab26030e058 534 *
Kojto 98:8ab26030e058 535 * @param[in] flags
Kojto 98:8ab26030e058 536 * EMU interrupt sources to enable. Use one or more valid
Kojto 98:8ab26030e058 537 * interrupt flags for the EMU module (EMU_IEN_nnn).
Kojto 98:8ab26030e058 538 ******************************************************************************/
Kojto 98:8ab26030e058 539 __STATIC_INLINE void EMU_IntEnable(uint32_t flags)
Kojto 98:8ab26030e058 540 {
Kojto 98:8ab26030e058 541 EMU->IEN |= flags;
Kojto 98:8ab26030e058 542 }
Kojto 98:8ab26030e058 543
Kojto 98:8ab26030e058 544
Kojto 98:8ab26030e058 545 /***************************************************************************//**
Kojto 98:8ab26030e058 546 * @brief
Kojto 98:8ab26030e058 547 * Get pending EMU interrupt flags.
Kojto 98:8ab26030e058 548 *
Kojto 98:8ab26030e058 549 * @note
Kojto 98:8ab26030e058 550 * The event bits are not cleared by the use of this function.
Kojto 98:8ab26030e058 551 *
Kojto 98:8ab26030e058 552 * @return
Kojto 98:8ab26030e058 553 * EMU interrupt sources pending. Returns one or more valid
Kojto 98:8ab26030e058 554 * interrupt flags for the EMU module (EMU_IF_nnn).
Kojto 98:8ab26030e058 555 ******************************************************************************/
Kojto 98:8ab26030e058 556 __STATIC_INLINE uint32_t EMU_IntGet(void)
Kojto 98:8ab26030e058 557 {
Kojto 98:8ab26030e058 558 return EMU->IF;
Kojto 98:8ab26030e058 559 }
Kojto 98:8ab26030e058 560
Kojto 98:8ab26030e058 561
Kojto 98:8ab26030e058 562 /***************************************************************************//**
Kojto 98:8ab26030e058 563 * @brief
Kojto 98:8ab26030e058 564 * Get enabled and pending EMU interrupt flags.
Kojto 98:8ab26030e058 565 * Useful for handling more interrupt sources in the same interrupt handler.
Kojto 98:8ab26030e058 566 *
Kojto 98:8ab26030e058 567 * @note
Kojto 98:8ab26030e058 568 * Interrupt flags are not cleared by the use of this function.
Kojto 98:8ab26030e058 569 *
Kojto 98:8ab26030e058 570 * @return
Kojto 98:8ab26030e058 571 * Pending and enabled EMU interrupt sources
Kojto 98:8ab26030e058 572 * The return value is the bitwise AND of
Kojto 98:8ab26030e058 573 * - the enabled interrupt sources in EMU_IEN and
Kojto 98:8ab26030e058 574 * - the pending interrupt flags EMU_IF
Kojto 98:8ab26030e058 575 ******************************************************************************/
Kojto 98:8ab26030e058 576 __STATIC_INLINE uint32_t EMU_IntGetEnabled(void)
Kojto 98:8ab26030e058 577 {
Kojto 98:8ab26030e058 578 uint32_t ien;
Kojto 98:8ab26030e058 579
Kojto 98:8ab26030e058 580 ien = EMU->IEN;
Kojto 98:8ab26030e058 581 return EMU->IF & ien;
Kojto 98:8ab26030e058 582 }
Kojto 98:8ab26030e058 583
Kojto 98:8ab26030e058 584
Kojto 98:8ab26030e058 585 /***************************************************************************//**
Kojto 98:8ab26030e058 586 * @brief
Kojto 98:8ab26030e058 587 * Set one or more pending EMU interrupts
Kojto 98:8ab26030e058 588 *
Kojto 98:8ab26030e058 589 * @param[in] flags
Kojto 98:8ab26030e058 590 * EMU interrupt sources to set to pending. Use one or more valid
Kojto 98:8ab26030e058 591 * interrupt flags for the EMU module (EMU_IFS_nnn).
Kojto 98:8ab26030e058 592 ******************************************************************************/
Kojto 98:8ab26030e058 593 __STATIC_INLINE void EMU_IntSet(uint32_t flags)
Kojto 98:8ab26030e058 594 {
Kojto 98:8ab26030e058 595 EMU->IFS = flags;
Kojto 98:8ab26030e058 596 }
Kojto 98:8ab26030e058 597 #endif /* _EMU_IF_MASK */
Kojto 98:8ab26030e058 598
Kojto 98:8ab26030e058 599
Kojto 98:8ab26030e058 600 #if defined( _EMU_EM4CONF_LOCKCONF_MASK )
Kojto 98:8ab26030e058 601 /***************************************************************************//**
Kojto 98:8ab26030e058 602 * @brief
Kojto 98:8ab26030e058 603 * Enable or disable EM4 lock configuration
Kojto 98:8ab26030e058 604 * @param[in] enable
Kojto 98:8ab26030e058 605 * If true, locks down EM4 configuration
Kojto 98:8ab26030e058 606 ******************************************************************************/
Kojto 98:8ab26030e058 607 __STATIC_INLINE void EMU_EM4Lock(bool enable)
Kojto 98:8ab26030e058 608 {
Kojto 113:f141b2784e32 609 BUS_RegBitWrite(&(EMU->EM4CONF), _EMU_EM4CONF_LOCKCONF_SHIFT, enable);
Kojto 98:8ab26030e058 610 }
Kojto 98:8ab26030e058 611 #endif
Kojto 98:8ab26030e058 612
Kojto 98:8ab26030e058 613 #if defined( _EMU_STATUS_BURDY_MASK )
Kojto 98:8ab26030e058 614 /***************************************************************************//**
Kojto 98:8ab26030e058 615 * @brief
Kojto 98:8ab26030e058 616 * Halts until backup power functionality is ready
Kojto 98:8ab26030e058 617 ******************************************************************************/
Kojto 98:8ab26030e058 618 __STATIC_INLINE void EMU_BUReady(void)
Kojto 98:8ab26030e058 619 {
Kojto 113:f141b2784e32 620 while(!(EMU->STATUS & EMU_STATUS_BURDY))
Kojto 113:f141b2784e32 621 ;
Kojto 98:8ab26030e058 622 }
Kojto 98:8ab26030e058 623 #endif
Kojto 98:8ab26030e058 624
Kojto 98:8ab26030e058 625 #if defined( _EMU_ROUTE_BUVINPEN_MASK )
Kojto 98:8ab26030e058 626 /***************************************************************************//**
Kojto 98:8ab26030e058 627 * @brief
Kojto 98:8ab26030e058 628 * Disable BU_VIN support
Kojto 98:8ab26030e058 629 * @param[in] enable
Kojto 98:8ab26030e058 630 * If true, enables BU_VIN input pin support, if false disables it
Kojto 98:8ab26030e058 631 ******************************************************************************/
Kojto 98:8ab26030e058 632 __STATIC_INLINE void EMU_BUPinEnable(bool enable)
Kojto 98:8ab26030e058 633 {
Kojto 113:f141b2784e32 634 BUS_RegBitWrite(&(EMU->ROUTE), _EMU_ROUTE_BUVINPEN_SHIFT, enable);
Kojto 98:8ab26030e058 635 }
Kojto 98:8ab26030e058 636 #endif
Kojto 98:8ab26030e058 637
Kojto 98:8ab26030e058 638 /***************************************************************************//**
Kojto 98:8ab26030e058 639 * @brief
Kojto 113:f141b2784e32 640 * Lock the EMU in order to protect its registers against unintended
Kojto 98:8ab26030e058 641 * modification.
Kojto 98:8ab26030e058 642 *
Kojto 98:8ab26030e058 643 * @note
Kojto 98:8ab26030e058 644 * If locking the EMU registers, they must be unlocked prior to using any
Kojto 113:f141b2784e32 645 * EMU API functions modifying EMU registers, excluding interrupt control
Kojto 113:f141b2784e32 646 * and regulator control if the architecture has a EMU_PWRCTRL register.
Kojto 113:f141b2784e32 647 * An exception to this is the energy mode entering API (EMU_EnterEMn()),
Kojto 113:f141b2784e32 648 * which can be used when the EMU registers are locked.
Kojto 98:8ab26030e058 649 ******************************************************************************/
Kojto 98:8ab26030e058 650 __STATIC_INLINE void EMU_Lock(void)
Kojto 98:8ab26030e058 651 {
Kojto 98:8ab26030e058 652 EMU->LOCK = EMU_LOCK_LOCKKEY_LOCK;
Kojto 98:8ab26030e058 653 }
Kojto 98:8ab26030e058 654
Kojto 98:8ab26030e058 655
Kojto 98:8ab26030e058 656 /***************************************************************************//**
Kojto 98:8ab26030e058 657 * @brief
Kojto 98:8ab26030e058 658 * Unlock the EMU so that writing to locked registers again is possible.
Kojto 98:8ab26030e058 659 ******************************************************************************/
Kojto 98:8ab26030e058 660 __STATIC_INLINE void EMU_Unlock(void)
Kojto 98:8ab26030e058 661 {
Kojto 98:8ab26030e058 662 EMU->LOCK = EMU_LOCK_LOCKKEY_UNLOCK;
Kojto 98:8ab26030e058 663 }
Kojto 98:8ab26030e058 664
Kojto 113:f141b2784e32 665
Kojto 113:f141b2784e32 666 #if defined( _EMU_PWRLOCK_MASK )
Kojto 113:f141b2784e32 667 /***************************************************************************//**
Kojto 113:f141b2784e32 668 * @brief
Kojto 113:f141b2784e32 669 * Lock the EMU regulator control registers in order to protect against
Kojto 113:f141b2784e32 670 * unintended modification.
Kojto 113:f141b2784e32 671 ******************************************************************************/
Kojto 113:f141b2784e32 672 __STATIC_INLINE void EMU_PowerLock(void)
Kojto 113:f141b2784e32 673 {
Kojto 113:f141b2784e32 674 EMU->PWRLOCK = EMU_PWRLOCK_LOCKKEY_LOCK;
Kojto 113:f141b2784e32 675 }
Kojto 113:f141b2784e32 676
Kojto 113:f141b2784e32 677
Kojto 113:f141b2784e32 678 /***************************************************************************//**
Kojto 113:f141b2784e32 679 * @brief
Kojto 113:f141b2784e32 680 * Unlock the EMU power control registers so that writing to
Kojto 113:f141b2784e32 681 * locked registers again is possible.
Kojto 113:f141b2784e32 682 ******************************************************************************/
Kojto 113:f141b2784e32 683 __STATIC_INLINE void EMU_PowerUnlock(void)
Kojto 113:f141b2784e32 684 {
Kojto 113:f141b2784e32 685 EMU->PWRLOCK = EMU_PWRLOCK_LOCKKEY_UNLOCK;
Kojto 113:f141b2784e32 686 }
Kojto 113:f141b2784e32 687 #endif
Kojto 113:f141b2784e32 688
Kojto 113:f141b2784e32 689
Kojto 98:8ab26030e058 690 /***************************************************************************//**
Kojto 98:8ab26030e058 691 * @brief
Kojto 98:8ab26030e058 692 * Block entering EM2 or higher number energy modes.
Kojto 98:8ab26030e058 693 ******************************************************************************/
Kojto 98:8ab26030e058 694 __STATIC_INLINE void EMU_EM2Block(void)
Kojto 98:8ab26030e058 695 {
Kojto 113:f141b2784e32 696 BUS_RegBitWrite(&(EMU->CTRL), _EMU_CTRL_EM2BLOCK_SHIFT, 1U);
Kojto 98:8ab26030e058 697 }
Kojto 98:8ab26030e058 698
Kojto 98:8ab26030e058 699 /***************************************************************************//**
Kojto 98:8ab26030e058 700 * @brief
Kojto 98:8ab26030e058 701 * Unblock entering EM2 or higher number energy modes.
Kojto 98:8ab26030e058 702 ******************************************************************************/
Kojto 98:8ab26030e058 703 __STATIC_INLINE void EMU_EM2UnBlock(void)
Kojto 98:8ab26030e058 704 {
Kojto 113:f141b2784e32 705 BUS_RegBitWrite(&(EMU->CTRL), _EMU_CTRL_EM2BLOCK_SHIFT, 0U);
Kojto 98:8ab26030e058 706 }
Kojto 98:8ab26030e058 707
Kojto 113:f141b2784e32 708 #if defined( _EMU_EM4CTRL_EM4IORETMODE_MASK )
Kojto 113:f141b2784e32 709 /***************************************************************************//**
Kojto 113:f141b2784e32 710 * @brief
Kojto 113:f141b2784e32 711 * When EM4 pin retention is set to emuPinRetentionLatch, then pins are retained
Kojto 113:f141b2784e32 712 * through EM4 entry and wakeup. The pin state is released by calling this function.
Kojto 113:f141b2784e32 713 * The feature allows peripherals or GPIO to be re-initialized after EM4 exit (reset),
Kojto 113:f141b2784e32 714 * and when the initialization is done, this function can release pins and return control
Kojto 113:f141b2784e32 715 * to the peripherals or GPIO.
Kojto 113:f141b2784e32 716 ******************************************************************************/
Kojto 113:f141b2784e32 717 __STATIC_INLINE void EMU_UnlatchPinRetention(void)
Kojto 113:f141b2784e32 718 {
Kojto 113:f141b2784e32 719 EMU->CMD = EMU_CMD_EM4UNLATCH;
Kojto 113:f141b2784e32 720 }
Kojto 113:f141b2784e32 721 #endif
Kojto 98:8ab26030e058 722
Kojto 98:8ab26030e058 723 /** @} (end addtogroup EMU) */
Kojto 98:8ab26030e058 724 /** @} (end addtogroup EM_Library) */
Kojto 98:8ab26030e058 725
Kojto 98:8ab26030e058 726 #ifdef __cplusplus
Kojto 98:8ab26030e058 727 }
Kojto 98:8ab26030e058 728 #endif
Kojto 98:8ab26030e058 729
Kojto 98:8ab26030e058 730 #endif /* defined( EMU_PRESENT ) */
Kojto 113:f141b2784e32 731 #endif /* __SILICON_LABS_EM_EMU_H__ */