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.
TARGET_EFM32ZG_STK3200/TOOLCHAIN_ARM_MICRO/em_burtc.h@172:65be27845400, 2019-02-20 (annotated)
- Committer:
- AnnaBridge
- Date:
- Wed Feb 20 20:53:29 2019 +0000
- Revision:
- 172:65be27845400
- Parent:
- 171:3a7713b1edbc
mbed library release version 165
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 156:ff21514d8981 | 1 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 2 | * @file em_burtc.h |
AnnaBridge | 156:ff21514d8981 | 3 | * @brief Backup Real Time Counter (BURTC) peripheral API |
Anna Bridge |
160:5571c4ff569f | 4 | * @version 5.3.3 |
AnnaBridge | 156:ff21514d8981 | 5 | ******************************************************************************* |
Anna Bridge |
160:5571c4ff569f | 6 | * # License |
AnnaBridge | 156:ff21514d8981 | 7 | * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b> |
AnnaBridge | 156:ff21514d8981 | 8 | ******************************************************************************* |
AnnaBridge | 156:ff21514d8981 | 9 | * |
AnnaBridge | 156:ff21514d8981 | 10 | * Permission is granted to anyone to use this software for any purpose, |
AnnaBridge | 156:ff21514d8981 | 11 | * including commercial applications, and to alter it and redistribute it |
AnnaBridge | 156:ff21514d8981 | 12 | * freely, subject to the following restrictions: |
AnnaBridge | 156:ff21514d8981 | 13 | * |
AnnaBridge | 156:ff21514d8981 | 14 | * 1. The origin of this software must not be misrepresented; you must not |
AnnaBridge | 156:ff21514d8981 | 15 | * claim that you wrote the original software. |
AnnaBridge | 156:ff21514d8981 | 16 | * 2. Altered source versions must be plainly marked as such, and must not be |
AnnaBridge | 156:ff21514d8981 | 17 | * misrepresented as being the original software. |
AnnaBridge | 156:ff21514d8981 | 18 | * 3. This notice may not be removed or altered from any source distribution. |
AnnaBridge | 156:ff21514d8981 | 19 | * |
AnnaBridge | 156:ff21514d8981 | 20 | * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no |
AnnaBridge | 156:ff21514d8981 | 21 | * obligation to support this Software. Silicon Labs is providing the |
AnnaBridge | 156:ff21514d8981 | 22 | * Software "AS IS", with no express or implied warranties of any kind, |
AnnaBridge | 156:ff21514d8981 | 23 | * including, but not limited to, any implied warranties of merchantability |
AnnaBridge | 156:ff21514d8981 | 24 | * or fitness for any particular purpose or warranties against infringement |
AnnaBridge | 156:ff21514d8981 | 25 | * of any proprietary rights of a third party. |
AnnaBridge | 156:ff21514d8981 | 26 | * |
AnnaBridge | 156:ff21514d8981 | 27 | * Silicon Labs will not be liable for any consequential, incidental, or |
AnnaBridge | 156:ff21514d8981 | 28 | * special damages, or any other relief, or for any claim by any third party, |
AnnaBridge | 156:ff21514d8981 | 29 | * arising from your use of this Software. |
AnnaBridge | 156:ff21514d8981 | 30 | * |
AnnaBridge | 156:ff21514d8981 | 31 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 32 | |
AnnaBridge | 156:ff21514d8981 | 33 | #ifndef EM_BURTC_H |
AnnaBridge | 156:ff21514d8981 | 34 | #define EM_BURTC_H |
AnnaBridge | 156:ff21514d8981 | 35 | |
AnnaBridge | 156:ff21514d8981 | 36 | #include "em_device.h" |
AnnaBridge | 156:ff21514d8981 | 37 | #if defined(BURTC_PRESENT) |
AnnaBridge | 156:ff21514d8981 | 38 | |
AnnaBridge | 156:ff21514d8981 | 39 | #include <stdbool.h> |
AnnaBridge | 156:ff21514d8981 | 40 | #include "em_assert.h" |
AnnaBridge | 156:ff21514d8981 | 41 | #include "em_bus.h" |
AnnaBridge | 156:ff21514d8981 | 42 | |
AnnaBridge | 156:ff21514d8981 | 43 | #ifdef __cplusplus |
AnnaBridge | 156:ff21514d8981 | 44 | extern "C" { |
AnnaBridge | 156:ff21514d8981 | 45 | #endif |
AnnaBridge | 156:ff21514d8981 | 46 | |
AnnaBridge | 156:ff21514d8981 | 47 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 48 | * @addtogroup emlib |
AnnaBridge | 156:ff21514d8981 | 49 | * @{ |
AnnaBridge | 156:ff21514d8981 | 50 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 51 | |
AnnaBridge | 156:ff21514d8981 | 52 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 53 | * @addtogroup BURTC |
AnnaBridge | 156:ff21514d8981 | 54 | * @{ |
AnnaBridge | 156:ff21514d8981 | 55 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 56 | |
AnnaBridge | 156:ff21514d8981 | 57 | /******************************************************************************* |
AnnaBridge | 156:ff21514d8981 | 58 | ******************************* DEFINES *********************************** |
AnnaBridge | 156:ff21514d8981 | 59 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 60 | |
AnnaBridge | 156:ff21514d8981 | 61 | /** BURTC clock divisors. These values are valid for the BURTC prescaler. */ |
AnnaBridge | 156:ff21514d8981 | 62 | #define burtcClkDiv_1 1 /**< Divide clock by 1. */ |
AnnaBridge | 156:ff21514d8981 | 63 | #define burtcClkDiv_2 2 /**< Divide clock by 2. */ |
AnnaBridge | 156:ff21514d8981 | 64 | #define burtcClkDiv_4 4 /**< Divide clock by 4. */ |
AnnaBridge | 156:ff21514d8981 | 65 | #define burtcClkDiv_8 8 /**< Divide clock by 8. */ |
AnnaBridge | 156:ff21514d8981 | 66 | #define burtcClkDiv_16 16 /**< Divide clock by 16. */ |
AnnaBridge | 156:ff21514d8981 | 67 | #define burtcClkDiv_32 32 /**< Divide clock by 32. */ |
AnnaBridge | 156:ff21514d8981 | 68 | #define burtcClkDiv_64 64 /**< Divide clock by 64. */ |
AnnaBridge | 156:ff21514d8981 | 69 | #define burtcClkDiv_128 128 /**< Divide clock by 128. */ |
AnnaBridge | 156:ff21514d8981 | 70 | |
AnnaBridge | 156:ff21514d8981 | 71 | /******************************************************************************* |
AnnaBridge | 156:ff21514d8981 | 72 | ******************************** ENUMS ************************************ |
AnnaBridge | 156:ff21514d8981 | 73 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 74 | |
AnnaBridge | 156:ff21514d8981 | 75 | /** BURTC clock selection */ |
Anna Bridge |
160:5571c4ff569f | 76 | typedef enum { |
AnnaBridge | 156:ff21514d8981 | 77 | /** Ultra low frequency (1 kHz) clock */ |
AnnaBridge | 156:ff21514d8981 | 78 | burtcClkSelULFRCO = BURTC_CTRL_CLKSEL_ULFRCO, |
AnnaBridge | 156:ff21514d8981 | 79 | /** Low frequency RC oscillator */ |
AnnaBridge | 156:ff21514d8981 | 80 | burtcClkSelLFRCO = BURTC_CTRL_CLKSEL_LFRCO, |
AnnaBridge | 156:ff21514d8981 | 81 | /** Low frequency crystal osciallator */ |
AnnaBridge | 156:ff21514d8981 | 82 | burtcClkSelLFXO = BURTC_CTRL_CLKSEL_LFXO |
AnnaBridge | 156:ff21514d8981 | 83 | } BURTC_ClkSel_TypeDef; |
AnnaBridge | 156:ff21514d8981 | 84 | |
AnnaBridge | 156:ff21514d8981 | 85 | /** BURTC mode of operation */ |
Anna Bridge |
160:5571c4ff569f | 86 | typedef enum { |
AnnaBridge | 156:ff21514d8981 | 87 | /** Disable BURTC */ |
AnnaBridge | 156:ff21514d8981 | 88 | burtcModeDisable = BURTC_CTRL_MODE_DISABLE, |
AnnaBridge | 156:ff21514d8981 | 89 | /** Enable and start BURTC counter in EM0 to EM2 */ |
AnnaBridge | 156:ff21514d8981 | 90 | burtcModeEM2 = BURTC_CTRL_MODE_EM2EN, |
AnnaBridge | 156:ff21514d8981 | 91 | /** Enable and start BURTC counter in EM0 to EM3 */ |
AnnaBridge | 156:ff21514d8981 | 92 | burtcModeEM3 = BURTC_CTRL_MODE_EM3EN, |
AnnaBridge | 156:ff21514d8981 | 93 | /** Enable and start BURTC counter in EM0 to EM4 */ |
AnnaBridge | 156:ff21514d8981 | 94 | burtcModeEM4 = BURTC_CTRL_MODE_EM4EN, |
AnnaBridge | 156:ff21514d8981 | 95 | } BURTC_Mode_TypeDef; |
AnnaBridge | 156:ff21514d8981 | 96 | |
AnnaBridge | 156:ff21514d8981 | 97 | /** BURTC low power mode */ |
Anna Bridge |
160:5571c4ff569f | 98 | typedef enum { |
AnnaBridge | 156:ff21514d8981 | 99 | /** Low Power Mode is disabled */ |
AnnaBridge | 156:ff21514d8981 | 100 | burtcLPDisable = BURTC_LPMODE_LPMODE_DISABLE, |
AnnaBridge | 156:ff21514d8981 | 101 | /** Low Power Mode is always enabled */ |
AnnaBridge | 156:ff21514d8981 | 102 | burtcLPEnable = BURTC_LPMODE_LPMODE_ENABLE, |
AnnaBridge | 156:ff21514d8981 | 103 | /** Low Power Mode when system enters backup mode */ |
AnnaBridge | 156:ff21514d8981 | 104 | burtcLPBU = BURTC_LPMODE_LPMODE_BUEN |
AnnaBridge | 156:ff21514d8981 | 105 | } BURTC_LP_TypeDef; |
AnnaBridge | 156:ff21514d8981 | 106 | |
AnnaBridge | 156:ff21514d8981 | 107 | /******************************************************************************* |
AnnaBridge | 156:ff21514d8981 | 108 | ******************************* STRUCTS *********************************** |
AnnaBridge | 156:ff21514d8981 | 109 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 110 | |
AnnaBridge | 156:ff21514d8981 | 111 | /** BURTC initialization structure. */ |
Anna Bridge |
160:5571c4ff569f | 112 | typedef struct { |
AnnaBridge | 156:ff21514d8981 | 113 | bool enable; /**< Enable BURTC after initialization (starts counter) */ |
AnnaBridge | 156:ff21514d8981 | 114 | |
AnnaBridge | 156:ff21514d8981 | 115 | BURTC_Mode_TypeDef mode; /**< Configure energy mode operation */ |
AnnaBridge | 156:ff21514d8981 | 116 | bool debugRun; /**< If true, counter will keep running under debug halt */ |
AnnaBridge | 156:ff21514d8981 | 117 | BURTC_ClkSel_TypeDef clkSel; /**< Select clock source */ |
AnnaBridge | 156:ff21514d8981 | 118 | uint32_t clkDiv; /**< Clock divider; for ULFRCO 1Khz or 2kHz operation */ |
AnnaBridge | 156:ff21514d8981 | 119 | |
AnnaBridge | 156:ff21514d8981 | 120 | uint32_t lowPowerComp; /**< Number of least significantt clock bits to ignore in low power mode */ |
AnnaBridge | 156:ff21514d8981 | 121 | bool timeStamp; /**< Enable time stamp on entering backup power domain */ |
AnnaBridge | 156:ff21514d8981 | 122 | |
AnnaBridge | 156:ff21514d8981 | 123 | bool compare0Top; /**< Set if Compare Value 0 is also top value (counter restart) */ |
AnnaBridge | 156:ff21514d8981 | 124 | |
AnnaBridge | 156:ff21514d8981 | 125 | BURTC_LP_TypeDef lowPowerMode; /**< Low power operation mode, requires LFXO or LFRCO */ |
AnnaBridge | 156:ff21514d8981 | 126 | } BURTC_Init_TypeDef; |
AnnaBridge | 156:ff21514d8981 | 127 | |
AnnaBridge | 156:ff21514d8981 | 128 | /** Default configuration for BURTC init structure */ |
Anna Bridge |
160:5571c4ff569f | 129 | #define BURTC_INIT_DEFAULT \ |
Anna Bridge |
160:5571c4ff569f | 130 | { \ |
Anna Bridge |
160:5571c4ff569f | 131 | true, \ |
Anna Bridge |
160:5571c4ff569f | 132 | burtcModeEM2, \ |
Anna Bridge |
160:5571c4ff569f | 133 | false, \ |
Anna Bridge |
160:5571c4ff569f | 134 | burtcClkSelULFRCO, \ |
Anna Bridge |
160:5571c4ff569f | 135 | burtcClkDiv_1, \ |
Anna Bridge |
160:5571c4ff569f | 136 | 0, \ |
Anna Bridge |
160:5571c4ff569f | 137 | true, \ |
Anna Bridge |
160:5571c4ff569f | 138 | false, \ |
Anna Bridge |
160:5571c4ff569f | 139 | burtcLPDisable, \ |
Anna Bridge |
160:5571c4ff569f | 140 | } |
AnnaBridge | 156:ff21514d8981 | 141 | |
AnnaBridge | 156:ff21514d8981 | 142 | /******************************************************************************* |
AnnaBridge | 156:ff21514d8981 | 143 | ***************************** PROTOTYPES ********************************** |
AnnaBridge | 156:ff21514d8981 | 144 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 145 | |
AnnaBridge | 156:ff21514d8981 | 146 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 147 | * @brief |
AnnaBridge | 156:ff21514d8981 | 148 | * Clear one or more pending BURTC interrupts. |
AnnaBridge | 156:ff21514d8981 | 149 | * |
AnnaBridge | 156:ff21514d8981 | 150 | * @param[in] flags |
AnnaBridge | 156:ff21514d8981 | 151 | * BURTC interrupt sources to clear. Use a set of interrupt flags OR-ed |
AnnaBridge | 156:ff21514d8981 | 152 | * together to clear multiple interrupt sources for the BURTC module |
AnnaBridge | 156:ff21514d8981 | 153 | * (BURTC_IFS_nnn). |
AnnaBridge | 156:ff21514d8981 | 154 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 155 | __STATIC_INLINE void BURTC_IntClear(uint32_t flags) |
AnnaBridge | 156:ff21514d8981 | 156 | { |
AnnaBridge | 156:ff21514d8981 | 157 | BURTC->IFC = flags; |
AnnaBridge | 156:ff21514d8981 | 158 | } |
AnnaBridge | 156:ff21514d8981 | 159 | |
AnnaBridge | 156:ff21514d8981 | 160 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 161 | * @brief |
AnnaBridge | 156:ff21514d8981 | 162 | * Disable one or more BURTC interrupts. |
AnnaBridge | 156:ff21514d8981 | 163 | * |
AnnaBridge | 156:ff21514d8981 | 164 | * @param[in] flags |
AnnaBridge | 156:ff21514d8981 | 165 | * BURTC interrupt sources to disable. Use a set of interrupt flags OR-ed |
AnnaBridge | 156:ff21514d8981 | 166 | * together to disable multiple interrupt sources for the BURTC module |
AnnaBridge | 156:ff21514d8981 | 167 | * (BURTC_IFS_nnn). |
AnnaBridge | 156:ff21514d8981 | 168 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 169 | __STATIC_INLINE void BURTC_IntDisable(uint32_t flags) |
AnnaBridge | 156:ff21514d8981 | 170 | { |
AnnaBridge | 156:ff21514d8981 | 171 | BURTC->IEN &= ~(flags); |
AnnaBridge | 156:ff21514d8981 | 172 | } |
AnnaBridge | 156:ff21514d8981 | 173 | |
AnnaBridge | 156:ff21514d8981 | 174 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 175 | * @brief |
AnnaBridge | 156:ff21514d8981 | 176 | * Enable one or more BURTC interrupts. |
AnnaBridge | 156:ff21514d8981 | 177 | * |
AnnaBridge | 156:ff21514d8981 | 178 | * @note |
AnnaBridge | 156:ff21514d8981 | 179 | * Depending on the use, a pending interrupt may already be set prior to |
AnnaBridge | 156:ff21514d8981 | 180 | * enabling the interrupt. Consider using BURTC_IntClear() prior to enabling |
AnnaBridge | 156:ff21514d8981 | 181 | * if such a pending interrupt should be ignored. |
AnnaBridge | 156:ff21514d8981 | 182 | * |
AnnaBridge | 156:ff21514d8981 | 183 | * @param[in] flags |
AnnaBridge | 156:ff21514d8981 | 184 | * BURTC interrupt sources to enable. Use a set of interrupt flags OR-ed |
AnnaBridge | 156:ff21514d8981 | 185 | * together to set multiple interrupt sources for the BURTC module |
AnnaBridge | 156:ff21514d8981 | 186 | * (BURTC_IFS_nnn). |
AnnaBridge | 156:ff21514d8981 | 187 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 188 | __STATIC_INLINE void BURTC_IntEnable(uint32_t flags) |
AnnaBridge | 156:ff21514d8981 | 189 | { |
AnnaBridge | 156:ff21514d8981 | 190 | BURTC->IEN |= flags; |
AnnaBridge | 156:ff21514d8981 | 191 | } |
AnnaBridge | 156:ff21514d8981 | 192 | |
AnnaBridge | 156:ff21514d8981 | 193 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 194 | * @brief |
AnnaBridge | 156:ff21514d8981 | 195 | * Get pending BURTC interrupt flags. |
AnnaBridge | 156:ff21514d8981 | 196 | * |
AnnaBridge | 156:ff21514d8981 | 197 | * @note |
AnnaBridge | 156:ff21514d8981 | 198 | * The event bits are not cleared by the use of this function. |
AnnaBridge | 156:ff21514d8981 | 199 | * |
AnnaBridge | 156:ff21514d8981 | 200 | * @return |
AnnaBridge | 156:ff21514d8981 | 201 | * Pending BURTC interrupt sources. Returns a set of interrupt flags OR-ed |
AnnaBridge | 156:ff21514d8981 | 202 | * together for multiple interrupt sources in the BURTC module (BURTC_IFS_nnn). |
AnnaBridge | 156:ff21514d8981 | 203 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 204 | __STATIC_INLINE uint32_t BURTC_IntGet(void) |
AnnaBridge | 156:ff21514d8981 | 205 | { |
AnnaBridge | 156:ff21514d8981 | 206 | return(BURTC->IF); |
AnnaBridge | 156:ff21514d8981 | 207 | } |
AnnaBridge | 156:ff21514d8981 | 208 | |
AnnaBridge | 156:ff21514d8981 | 209 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 210 | * @brief |
AnnaBridge | 156:ff21514d8981 | 211 | * Get enabled and pending BURTC interrupt flags. |
AnnaBridge | 156:ff21514d8981 | 212 | * |
AnnaBridge | 156:ff21514d8981 | 213 | * @note |
AnnaBridge | 156:ff21514d8981 | 214 | * The event bits are not cleared by the use of this function. |
AnnaBridge | 156:ff21514d8981 | 215 | * |
AnnaBridge | 156:ff21514d8981 | 216 | * @return |
AnnaBridge | 156:ff21514d8981 | 217 | * Pending BURTC interrupt sources that is also enabled. Returns a set of |
AnnaBridge | 156:ff21514d8981 | 218 | * interrupt flags OR-ed together for multiple interrupt sources in the |
AnnaBridge | 156:ff21514d8981 | 219 | * BURTC module (BURTC_IFS_nnn). |
AnnaBridge | 156:ff21514d8981 | 220 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 221 | __STATIC_INLINE uint32_t BURTC_IntGetEnabled(void) |
AnnaBridge | 156:ff21514d8981 | 222 | { |
AnnaBridge | 156:ff21514d8981 | 223 | uint32_t tmp; |
AnnaBridge | 156:ff21514d8981 | 224 | |
AnnaBridge | 156:ff21514d8981 | 225 | /* Get enabled interrupts */ |
AnnaBridge | 156:ff21514d8981 | 226 | tmp = BURTC->IEN; |
AnnaBridge | 156:ff21514d8981 | 227 | |
AnnaBridge | 156:ff21514d8981 | 228 | /* Return set intterupts */ |
AnnaBridge | 156:ff21514d8981 | 229 | return BURTC->IF & tmp; |
AnnaBridge | 156:ff21514d8981 | 230 | } |
AnnaBridge | 156:ff21514d8981 | 231 | |
AnnaBridge | 156:ff21514d8981 | 232 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 233 | * @brief |
AnnaBridge | 156:ff21514d8981 | 234 | * Set one or more pending BURTC interrupts from SW. |
AnnaBridge | 156:ff21514d8981 | 235 | * |
AnnaBridge | 156:ff21514d8981 | 236 | * @param[in] flags |
AnnaBridge | 156:ff21514d8981 | 237 | * BURTC interrupt sources to set to pending. Use a set of interrupt flags |
AnnaBridge | 156:ff21514d8981 | 238 | * OR-ed together to set multiple interrupt sources for the BURTC module |
AnnaBridge | 156:ff21514d8981 | 239 | * (BURTC_IFS_nnn). |
AnnaBridge | 156:ff21514d8981 | 240 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 241 | __STATIC_INLINE void BURTC_IntSet(uint32_t flags) |
AnnaBridge | 156:ff21514d8981 | 242 | { |
AnnaBridge | 156:ff21514d8981 | 243 | BURTC->IFS = flags; |
AnnaBridge | 156:ff21514d8981 | 244 | } |
AnnaBridge | 156:ff21514d8981 | 245 | |
AnnaBridge | 156:ff21514d8981 | 246 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 247 | * @brief |
AnnaBridge | 156:ff21514d8981 | 248 | * Status of BURTC RAM, timestamp and LP Mode |
AnnaBridge | 156:ff21514d8981 | 249 | * |
AnnaBridge | 156:ff21514d8981 | 250 | * @return A mask logially OR-ed status bits |
AnnaBridge | 156:ff21514d8981 | 251 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 252 | __STATIC_INLINE uint32_t BURTC_Status(void) |
AnnaBridge | 156:ff21514d8981 | 253 | { |
AnnaBridge | 156:ff21514d8981 | 254 | return BURTC->STATUS; |
AnnaBridge | 156:ff21514d8981 | 255 | } |
AnnaBridge | 156:ff21514d8981 | 256 | |
AnnaBridge | 156:ff21514d8981 | 257 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 258 | * @brief |
AnnaBridge | 156:ff21514d8981 | 259 | * Clear and reset BURTC status register |
AnnaBridge | 156:ff21514d8981 | 260 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 261 | __STATIC_INLINE void BURTC_StatusClear(void) |
AnnaBridge | 156:ff21514d8981 | 262 | { |
AnnaBridge | 156:ff21514d8981 | 263 | BURTC->CMD = BURTC_CMD_CLRSTATUS; |
AnnaBridge | 156:ff21514d8981 | 264 | } |
AnnaBridge | 156:ff21514d8981 | 265 | |
AnnaBridge | 156:ff21514d8981 | 266 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 267 | * @brief |
AnnaBridge | 156:ff21514d8981 | 268 | * Enable or Disable BURTC peripheral reset and start counter |
AnnaBridge | 156:ff21514d8981 | 269 | * @param[in] enable |
AnnaBridge | 156:ff21514d8981 | 270 | * If true; asserts reset to BURTC, halts counter, if false; deassert reset |
AnnaBridge | 156:ff21514d8981 | 271 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 272 | __STATIC_INLINE void BURTC_Enable(bool enable) |
AnnaBridge | 156:ff21514d8981 | 273 | { |
AnnaBridge | 156:ff21514d8981 | 274 | /* Note! If mode is disabled, BURTC counter will not start */ |
AnnaBridge | 156:ff21514d8981 | 275 | EFM_ASSERT(((enable == true) |
AnnaBridge | 156:ff21514d8981 | 276 | && ((BURTC->CTRL & _BURTC_CTRL_MODE_MASK) |
AnnaBridge | 156:ff21514d8981 | 277 | != BURTC_CTRL_MODE_DISABLE)) |
AnnaBridge | 156:ff21514d8981 | 278 | || (enable == false)); |
Anna Bridge |
160:5571c4ff569f | 279 | if (enable) { |
AnnaBridge | 156:ff21514d8981 | 280 | BUS_RegBitWrite(&BURTC->CTRL, _BURTC_CTRL_RSTEN_SHIFT, 0); |
Anna Bridge |
160:5571c4ff569f | 281 | } else { |
AnnaBridge | 156:ff21514d8981 | 282 | BUS_RegBitWrite(&BURTC->CTRL, _BURTC_CTRL_RSTEN_SHIFT, 1); |
AnnaBridge | 156:ff21514d8981 | 283 | } |
AnnaBridge | 156:ff21514d8981 | 284 | } |
AnnaBridge | 156:ff21514d8981 | 285 | |
AnnaBridge | 156:ff21514d8981 | 286 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 287 | * @brief Get BURTC counter |
AnnaBridge | 156:ff21514d8981 | 288 | * |
AnnaBridge | 156:ff21514d8981 | 289 | * @return |
AnnaBridge | 156:ff21514d8981 | 290 | * BURTC counter value |
AnnaBridge | 156:ff21514d8981 | 291 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 292 | __STATIC_INLINE uint32_t BURTC_CounterGet(void) |
AnnaBridge | 156:ff21514d8981 | 293 | { |
AnnaBridge | 156:ff21514d8981 | 294 | return BURTC->CNT; |
AnnaBridge | 156:ff21514d8981 | 295 | } |
AnnaBridge | 156:ff21514d8981 | 296 | |
AnnaBridge | 156:ff21514d8981 | 297 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 298 | * @brief Get BURTC timestamp for entering BU |
AnnaBridge | 156:ff21514d8981 | 299 | * |
AnnaBridge | 156:ff21514d8981 | 300 | * @return |
AnnaBridge | 156:ff21514d8981 | 301 | * BURTC Time Stamp value |
AnnaBridge | 156:ff21514d8981 | 302 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 303 | __STATIC_INLINE uint32_t BURTC_TimestampGet(void) |
AnnaBridge | 156:ff21514d8981 | 304 | { |
AnnaBridge | 156:ff21514d8981 | 305 | return BURTC->TIMESTAMP; |
AnnaBridge | 156:ff21514d8981 | 306 | } |
AnnaBridge | 156:ff21514d8981 | 307 | |
AnnaBridge | 156:ff21514d8981 | 308 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 309 | * @brief Freeze register updates until enabled |
AnnaBridge | 156:ff21514d8981 | 310 | * @param[in] enable If true, registers are not updated until enabled again. |
AnnaBridge | 156:ff21514d8981 | 311 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 312 | __STATIC_INLINE void BURTC_FreezeEnable(bool enable) |
AnnaBridge | 156:ff21514d8981 | 313 | { |
AnnaBridge | 156:ff21514d8981 | 314 | BUS_RegBitWrite(&BURTC->FREEZE, _BURTC_FREEZE_REGFREEZE_SHIFT, enable); |
AnnaBridge | 156:ff21514d8981 | 315 | } |
AnnaBridge | 156:ff21514d8981 | 316 | |
AnnaBridge | 156:ff21514d8981 | 317 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 318 | * @brief Shut down power to rentention register bank. |
AnnaBridge | 156:ff21514d8981 | 319 | * @param[in] enable |
AnnaBridge | 156:ff21514d8981 | 320 | * If true, shuts off power to retention registers. |
AnnaBridge | 156:ff21514d8981 | 321 | * @note |
AnnaBridge | 156:ff21514d8981 | 322 | * When power rentention is disabled, it cannot be enabled again (until |
AnnaBridge | 156:ff21514d8981 | 323 | * reset). |
AnnaBridge | 156:ff21514d8981 | 324 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 325 | __STATIC_INLINE void BURTC_Powerdown(bool enable) |
AnnaBridge | 156:ff21514d8981 | 326 | { |
AnnaBridge | 156:ff21514d8981 | 327 | BUS_RegBitWrite(&BURTC->POWERDOWN, _BURTC_POWERDOWN_RAM_SHIFT, enable); |
AnnaBridge | 156:ff21514d8981 | 328 | } |
AnnaBridge | 156:ff21514d8981 | 329 | |
AnnaBridge | 156:ff21514d8981 | 330 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 331 | * @brief |
AnnaBridge | 156:ff21514d8981 | 332 | * Set a value in one of the retention registers |
AnnaBridge | 156:ff21514d8981 | 333 | * |
AnnaBridge | 156:ff21514d8981 | 334 | * @param[in] num |
AnnaBridge | 156:ff21514d8981 | 335 | * Register to set |
AnnaBridge | 156:ff21514d8981 | 336 | * @param[in] data |
AnnaBridge | 156:ff21514d8981 | 337 | * Value to put into register |
AnnaBridge | 156:ff21514d8981 | 338 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 339 | __STATIC_INLINE void BURTC_RetRegSet(uint32_t num, uint32_t data) |
AnnaBridge | 156:ff21514d8981 | 340 | { |
AnnaBridge | 156:ff21514d8981 | 341 | EFM_ASSERT(num <= 127); |
AnnaBridge | 156:ff21514d8981 | 342 | |
AnnaBridge | 156:ff21514d8981 | 343 | BURTC->RET[num].REG = data; |
AnnaBridge | 156:ff21514d8981 | 344 | } |
AnnaBridge | 156:ff21514d8981 | 345 | |
AnnaBridge | 156:ff21514d8981 | 346 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 347 | * @brief |
AnnaBridge | 156:ff21514d8981 | 348 | * Read a value from one of the retention registers |
AnnaBridge | 156:ff21514d8981 | 349 | * |
AnnaBridge | 156:ff21514d8981 | 350 | * @param[in] num |
AnnaBridge | 156:ff21514d8981 | 351 | * Retention Register to read |
AnnaBridge | 156:ff21514d8981 | 352 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 353 | __STATIC_INLINE uint32_t BURTC_RetRegGet(uint32_t num) |
AnnaBridge | 156:ff21514d8981 | 354 | { |
AnnaBridge | 156:ff21514d8981 | 355 | EFM_ASSERT(num <= 127); |
AnnaBridge | 156:ff21514d8981 | 356 | |
AnnaBridge | 156:ff21514d8981 | 357 | return BURTC->RET[num].REG; |
AnnaBridge | 156:ff21514d8981 | 358 | } |
AnnaBridge | 156:ff21514d8981 | 359 | |
AnnaBridge | 156:ff21514d8981 | 360 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 361 | * @brief |
AnnaBridge | 156:ff21514d8981 | 362 | * Lock BURTC registers, will protect from writing new config settings |
AnnaBridge | 156:ff21514d8981 | 363 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 364 | __STATIC_INLINE void BURTC_Lock(void) |
AnnaBridge | 156:ff21514d8981 | 365 | { |
AnnaBridge | 156:ff21514d8981 | 366 | BURTC->LOCK = BURTC_LOCK_LOCKKEY_LOCK; |
AnnaBridge | 156:ff21514d8981 | 367 | } |
AnnaBridge | 156:ff21514d8981 | 368 | |
AnnaBridge | 156:ff21514d8981 | 369 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 370 | * @brief |
AnnaBridge | 156:ff21514d8981 | 371 | * Unlock BURTC registers, enable write access to change configuration |
AnnaBridge | 156:ff21514d8981 | 372 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 373 | __STATIC_INLINE void BURTC_Unlock(void) |
AnnaBridge | 156:ff21514d8981 | 374 | { |
AnnaBridge | 156:ff21514d8981 | 375 | BURTC->LOCK = BURTC_LOCK_LOCKKEY_UNLOCK; |
AnnaBridge | 156:ff21514d8981 | 376 | } |
AnnaBridge | 156:ff21514d8981 | 377 | |
AnnaBridge | 156:ff21514d8981 | 378 | void BURTC_Reset(void); |
AnnaBridge | 156:ff21514d8981 | 379 | void BURTC_Init(const BURTC_Init_TypeDef *burtcInit); |
AnnaBridge | 156:ff21514d8981 | 380 | void BURTC_CounterReset(void); |
AnnaBridge | 156:ff21514d8981 | 381 | void BURTC_CompareSet(unsigned int comp, uint32_t value); |
AnnaBridge | 156:ff21514d8981 | 382 | uint32_t BURTC_CompareGet(unsigned int comp); |
AnnaBridge | 156:ff21514d8981 | 383 | uint32_t BURTC_ClockFreqGet(void); |
AnnaBridge | 156:ff21514d8981 | 384 | |
AnnaBridge | 156:ff21514d8981 | 385 | /** @} (end addtogroup BURTC) */ |
AnnaBridge | 156:ff21514d8981 | 386 | /** @} (end addtogroup emlib) */ |
AnnaBridge | 156:ff21514d8981 | 387 | |
AnnaBridge | 156:ff21514d8981 | 388 | #ifdef __cplusplus |
AnnaBridge | 156:ff21514d8981 | 389 | } |
AnnaBridge | 156:ff21514d8981 | 390 | #endif |
AnnaBridge | 156:ff21514d8981 | 391 | |
AnnaBridge | 156:ff21514d8981 | 392 | #endif /* BURTC_PRESENT */ |
AnnaBridge | 156:ff21514d8981 | 393 | #endif /* EM_BURTC_H */ |