Fawwaz Nadzmy / mbed-STM

Fork of mbed-dev by mbed official

Committer:
mbed_official
Date:
Fri Jan 15 07:45:16 2016 +0000
Revision:
50:a417edff4437
Parent:
0:9b334a45a8ff
Child:
144:ef7eb2e8f9f7
Synchronized with git revision 6010f32619bfcbb01cc73747d4ff9040863482d9

Full URL: https://github.com/mbedmicro/mbed/commit/6010f32619bfcbb01cc73747d4ff9040863482d9/

Remove doubling of buffer size in realiseEndpoint()

Who changed what in which revision?

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