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:
AnnaBridge
Date:
Wed Nov 08 17:18:06 2017 +0000
Revision:
156:ff21514d8981
Child:
159:7130f322cb7e
Reverting back to release 154 of the mbed library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 156:ff21514d8981 1 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 2 * @file em_cryotimer.h
AnnaBridge 156:ff21514d8981 3 * @brief Ultra Low Energy Timer/Counter (CRYOTIMER) peripheral API
AnnaBridge 156:ff21514d8981 4 * @version 5.1.2
AnnaBridge 156:ff21514d8981 5 *******************************************************************************
AnnaBridge 156:ff21514d8981 6 * @section 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.@n
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.@n
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_CRYOTIMER_H
AnnaBridge 156:ff21514d8981 34 #define EM_CRYOTIMER_H
AnnaBridge 156:ff21514d8981 35
AnnaBridge 156:ff21514d8981 36 #include <stdbool.h>
AnnaBridge 156:ff21514d8981 37 #include "em_device.h"
AnnaBridge 156:ff21514d8981 38 #include "em_bus.h"
AnnaBridge 156:ff21514d8981 39
AnnaBridge 156:ff21514d8981 40 #if defined(CRYOTIMER_PRESENT) && (CRYOTIMER_COUNT == 1)
AnnaBridge 156:ff21514d8981 41
AnnaBridge 156:ff21514d8981 42 #ifdef __cplusplus
AnnaBridge 156:ff21514d8981 43 extern "C" {
AnnaBridge 156:ff21514d8981 44 #endif
AnnaBridge 156:ff21514d8981 45
AnnaBridge 156:ff21514d8981 46 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 47 * @addtogroup emlib
AnnaBridge 156:ff21514d8981 48 * @{
AnnaBridge 156:ff21514d8981 49 ******************************************************************************/
AnnaBridge 156:ff21514d8981 50
AnnaBridge 156:ff21514d8981 51 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 52 * @addtogroup CRYOTIMER
AnnaBridge 156:ff21514d8981 53 * @brief Ultra Low Energy Timer/Counter (CRYOTIMER) Peripheral API
AnnaBridge 156:ff21514d8981 54 *
AnnaBridge 156:ff21514d8981 55 * @details
AnnaBridge 156:ff21514d8981 56 * The CRYOTIMER is a 32 bit counter which operates on a low frequency
AnnaBridge 156:ff21514d8981 57 * oscillator, and is capable of running in all Energy Modes. It can provide
AnnaBridge 156:ff21514d8981 58 * periodic wakeup events and PRS signals which can be used to wake up
AnnaBridge 156:ff21514d8981 59 * peripherals from any energy mode. The CRYOTIMER provides a very wide range
AnnaBridge 156:ff21514d8981 60 * of periods for the interrupts facilitating flexible ultra-low energy
AnnaBridge 156:ff21514d8981 61 * operation. Because of its simplicity, the CRYOTIMER is a lower energy
AnnaBridge 156:ff21514d8981 62 * solution for periodically waking up the MCU compared to the RTCC.
AnnaBridge 156:ff21514d8981 63 *
AnnaBridge 156:ff21514d8981 64 * To configure the CRYOTIMER you call the @ref CRYOTIMER_Init function.
AnnaBridge 156:ff21514d8981 65 * This function will configure the CRYOTIMER peripheral according to the
AnnaBridge 156:ff21514d8981 66 * user configuration.
AnnaBridge 156:ff21514d8981 67 *
AnnaBridge 156:ff21514d8981 68 * @details
AnnaBridge 156:ff21514d8981 69 * When using the CRYOTIMER the user has to choose which oscillator to use
AnnaBridge 156:ff21514d8981 70 * as the CRYOTIMER clock. The CRYOTIMER supports 3 low frequency clock
AnnaBridge 156:ff21514d8981 71 * these are LFXO, LFRCO and ULFRCO. The oscillator that is chosen must be
AnnaBridge 156:ff21514d8981 72 * enabled and ready before calling this @ref CRYOTIMER_Init function.
AnnaBridge 156:ff21514d8981 73 * See @ref CMU_OscillatorEnable for details of how to enable and wait for an
AnnaBridge 156:ff21514d8981 74 * oscillator to become ready. Note that ULFRCO is always ready while LFRCO
AnnaBridge 156:ff21514d8981 75 * @ref cmuOsc_LFRCO and LFXO @ref cmuOsc_LFXO must be enabled by the user.
AnnaBridge 156:ff21514d8981 76 *
AnnaBridge 156:ff21514d8981 77 * @details
AnnaBridge 156:ff21514d8981 78 * Note that the only oscillator which is running in EM3 is ULFRCO. Keep this
AnnaBridge 156:ff21514d8981 79 * in mind when choosing which oscillator to use for the CRYOTIMER.
AnnaBridge 156:ff21514d8981 80 *
AnnaBridge 156:ff21514d8981 81 * Here is an example of how to use the CRYOTIMER to generate an interrupt
AnnaBridge 156:ff21514d8981 82 * at a configurable period.
AnnaBridge 156:ff21514d8981 83 *
AnnaBridge 156:ff21514d8981 84 * @include em_cryotimer_period.c
AnnaBridge 156:ff21514d8981 85 *
AnnaBridge 156:ff21514d8981 86 * @details
AnnaBridge 156:ff21514d8981 87 * To use the CRYOTIMER in EM4 the user has to enable EM4 wakeup in the
AnnaBridge 156:ff21514d8981 88 * CRYOTIMER. This can be done either in the @ref CRYOTIMER_Init_TypeDef
AnnaBridge 156:ff21514d8981 89 * structure when initializing the CRYOTIMER or at a later time by using
AnnaBridge 156:ff21514d8981 90 * @ref CRYOTIMER_EM4WakeupEnable.
AnnaBridge 156:ff21514d8981 91 *
AnnaBridge 156:ff21514d8981 92 * Note that when using the CRYOTIMER to wakeup from EM4 the application has
AnnaBridge 156:ff21514d8981 93 * the responsibility to clear the wakeup event. This is done by calling
AnnaBridge 156:ff21514d8981 94 * @ref CRYOTIMER_IntClear. If the user does not clear the wakeup event then
AnnaBridge 156:ff21514d8981 95 * the wakeup event will stay pending and will cause an immediate wakeup the
AnnaBridge 156:ff21514d8981 96 * next time the application attempts to enter EM4.
AnnaBridge 156:ff21514d8981 97 *
AnnaBridge 156:ff21514d8981 98 * Here is an example of how to use the CRYOTIMER to wakeup from EM4 after
AnnaBridge 156:ff21514d8981 99 * a configurable amount of time.
AnnaBridge 156:ff21514d8981 100 *
AnnaBridge 156:ff21514d8981 101 * @include em_cryotimer_em4.c
AnnaBridge 156:ff21514d8981 102 *
AnnaBridge 156:ff21514d8981 103 * @details
AnnaBridge 156:ff21514d8981 104 * All the low frequency oscillators can be used in EM4, however the
AnnaBridge 156:ff21514d8981 105 * oscillator that is used must be be configured to be retained when going
AnnaBridge 156:ff21514d8981 106 * into EM4. This can be configured by using functions in the @ref EMU module.
AnnaBridge 156:ff21514d8981 107 * See @ref EMU_EM4Init and @ref EMU_EM4Init_TypeDef. If an oscillator is
AnnaBridge 156:ff21514d8981 108 * retained in EM4 the user is also responsible for unlatching the retained
AnnaBridge 156:ff21514d8981 109 * configuration on a wakeup from EM4.
AnnaBridge 156:ff21514d8981 110 *
AnnaBridge 156:ff21514d8981 111 * @{
AnnaBridge 156:ff21514d8981 112 ******************************************************************************/
AnnaBridge 156:ff21514d8981 113
AnnaBridge 156:ff21514d8981 114 /*******************************************************************************
AnnaBridge 156:ff21514d8981 115 ********************************* ENUM ************************************
AnnaBridge 156:ff21514d8981 116 ******************************************************************************/
AnnaBridge 156:ff21514d8981 117
AnnaBridge 156:ff21514d8981 118 /** Prescaler selection. */
AnnaBridge 156:ff21514d8981 119 typedef enum
AnnaBridge 156:ff21514d8981 120 {
AnnaBridge 156:ff21514d8981 121 cryotimerPresc_1 = _CRYOTIMER_CTRL_PRESC_DIV1, /**< Divide clock by 1. */
AnnaBridge 156:ff21514d8981 122 cryotimerPresc_2 = _CRYOTIMER_CTRL_PRESC_DIV2, /**< Divide clock by 2. */
AnnaBridge 156:ff21514d8981 123 cryotimerPresc_4 = _CRYOTIMER_CTRL_PRESC_DIV4, /**< Divide clock by 4. */
AnnaBridge 156:ff21514d8981 124 cryotimerPresc_8 = _CRYOTIMER_CTRL_PRESC_DIV8, /**< Divide clock by 8. */
AnnaBridge 156:ff21514d8981 125 cryotimerPresc_16 = _CRYOTIMER_CTRL_PRESC_DIV16, /**< Divide clock by 16. */
AnnaBridge 156:ff21514d8981 126 cryotimerPresc_32 = _CRYOTIMER_CTRL_PRESC_DIV32, /**< Divide clock by 32. */
AnnaBridge 156:ff21514d8981 127 cryotimerPresc_64 = _CRYOTIMER_CTRL_PRESC_DIV64, /**< Divide clock by 64. */
AnnaBridge 156:ff21514d8981 128 cryotimerPresc_128 = _CRYOTIMER_CTRL_PRESC_DIV128, /**< Divide clock by 128. */
AnnaBridge 156:ff21514d8981 129 } CRYOTIMER_Presc_TypeDef;
AnnaBridge 156:ff21514d8981 130
AnnaBridge 156:ff21514d8981 131 /** Low frequency oscillator selection. */
AnnaBridge 156:ff21514d8981 132 typedef enum
AnnaBridge 156:ff21514d8981 133 {
AnnaBridge 156:ff21514d8981 134 cryotimerOscLFRCO = _CRYOTIMER_CTRL_OSCSEL_LFRCO, /**< Select Low Frequency RC Oscillator. */
AnnaBridge 156:ff21514d8981 135 cryotimerOscLFXO = _CRYOTIMER_CTRL_OSCSEL_LFXO, /**< Select Low Frequency Crystal Oscillator. */
AnnaBridge 156:ff21514d8981 136 cryotimerOscULFRCO = _CRYOTIMER_CTRL_OSCSEL_ULFRCO, /**< Select Ultra Low Frequency RC Oscillator. */
AnnaBridge 156:ff21514d8981 137 } CRYOTIMER_Osc_TypeDef;
AnnaBridge 156:ff21514d8981 138
AnnaBridge 156:ff21514d8981 139 /** Period selection value */
AnnaBridge 156:ff21514d8981 140 typedef enum
AnnaBridge 156:ff21514d8981 141 {
AnnaBridge 156:ff21514d8981 142 cryotimerPeriod_1 = 0, /**< Wakeup event after every Pre-scaled clock cycle. */
AnnaBridge 156:ff21514d8981 143 cryotimerPeriod_2 = 1, /**< Wakeup event after 2 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 144 cryotimerPeriod_4 = 2, /**< Wakeup event after 4 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 145 cryotimerPeriod_8 = 3, /**< Wakeup event after 8 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 146 cryotimerPeriod_16 = 4, /**< Wakeup event after 16 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 147 cryotimerPeriod_32 = 5, /**< Wakeup event after 32 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 148 cryotimerPeriod_64 = 6, /**< Wakeup event after 64 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 149 cryotimerPeriod_128 = 7, /**< Wakeup event after 128 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 150 cryotimerPeriod_256 = 8, /**< Wakeup event after 256 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 151 cryotimerPeriod_512 = 9, /**< Wakeup event after 512 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 152 cryotimerPeriod_1k = 10, /**< Wakeup event after 1k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 153 cryotimerPeriod_2k = 11, /**< Wakeup event after 2k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 154 cryotimerPeriod_4k = 12, /**< Wakeup event after 4k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 155 cryotimerPeriod_8k = 13, /**< Wakeup event after 8k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 156 cryotimerPeriod_16k = 14, /**< Wakeup event after 16k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 157 cryotimerPeriod_32k = 15, /**< Wakeup event after 32k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 158 cryotimerPeriod_64k = 16, /**< Wakeup event after 64k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 159 cryotimerPeriod_128k = 17, /**< Wakeup event after 128k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 160 cryotimerPeriod_256k = 18, /**< Wakeup event after 256k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 161 cryotimerPeriod_512k = 19, /**< Wakeup event after 512k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 162 cryotimerPeriod_1m = 20, /**< Wakeup event after 1m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 163 cryotimerPeriod_2m = 21, /**< Wakeup event after 2m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 164 cryotimerPeriod_4m = 22, /**< Wakeup event after 4m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 165 cryotimerPeriod_8m = 23, /**< Wakeup event after 8m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 166 cryotimerPeriod_16m = 24, /**< Wakeup event after 16m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 167 cryotimerPeriod_32m = 25, /**< Wakeup event after 32m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 168 cryotimerPeriod_64m = 26, /**< Wakeup event after 64m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 169 cryotimerPeriod_128m = 27, /**< Wakeup event after 128m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 170 cryotimerPeriod_256m = 28, /**< Wakeup event after 256m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 171 cryotimerPeriod_512m = 29, /**< Wakeup event after 512m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 172 cryotimerPeriod_1024m = 30, /**< Wakeup event after 1024m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 173 cryotimerPeriod_2048m = 31, /**< Wakeup event after 2048m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 174 cryotimerPeriod_4096m = 32, /**< Wakeup event after 4096m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 175 } CRYOTIMER_Period_TypeDef;
AnnaBridge 156:ff21514d8981 176
AnnaBridge 156:ff21514d8981 177 /*******************************************************************************
AnnaBridge 156:ff21514d8981 178 ******************************* STRUCTS ***********************************
AnnaBridge 156:ff21514d8981 179 ******************************************************************************/
AnnaBridge 156:ff21514d8981 180
AnnaBridge 156:ff21514d8981 181 /** CRYOTIMER initialization structure. */
AnnaBridge 156:ff21514d8981 182 typedef struct
AnnaBridge 156:ff21514d8981 183 {
AnnaBridge 156:ff21514d8981 184 /** Enable/disable counting when initialization is completed. */
AnnaBridge 156:ff21514d8981 185 bool enable;
AnnaBridge 156:ff21514d8981 186
AnnaBridge 156:ff21514d8981 187 /** Enable/disable timer counting during debug halt. */
AnnaBridge 156:ff21514d8981 188 bool debugRun;
AnnaBridge 156:ff21514d8981 189
AnnaBridge 156:ff21514d8981 190 /** Enable/disable EM4 Wakeup. */
AnnaBridge 156:ff21514d8981 191 bool em4Wakeup;
AnnaBridge 156:ff21514d8981 192
AnnaBridge 156:ff21514d8981 193 /** Select the oscillator for the CRYOTIMER. */
AnnaBridge 156:ff21514d8981 194 CRYOTIMER_Osc_TypeDef osc;
AnnaBridge 156:ff21514d8981 195
AnnaBridge 156:ff21514d8981 196 /** Prescaler. */
AnnaBridge 156:ff21514d8981 197 CRYOTIMER_Presc_TypeDef presc;
AnnaBridge 156:ff21514d8981 198
AnnaBridge 156:ff21514d8981 199 /** Period between wakeup event/interrupt. */
AnnaBridge 156:ff21514d8981 200 CRYOTIMER_Period_TypeDef period;
AnnaBridge 156:ff21514d8981 201 } CRYOTIMER_Init_TypeDef;
AnnaBridge 156:ff21514d8981 202
AnnaBridge 156:ff21514d8981 203 /*******************************************************************************
AnnaBridge 156:ff21514d8981 204 ******************************* DEFINES ***********************************
AnnaBridge 156:ff21514d8981 205 ******************************************************************************/
AnnaBridge 156:ff21514d8981 206
AnnaBridge 156:ff21514d8981 207 /** Default CRYOTIMER init structure. */
AnnaBridge 156:ff21514d8981 208 #define CRYOTIMER_INIT_DEFAULT \
AnnaBridge 156:ff21514d8981 209 { \
AnnaBridge 156:ff21514d8981 210 true, /* Start counting when init done. */ \
AnnaBridge 156:ff21514d8981 211 false, /* Disable CRYOTIMER during debug halt. */ \
AnnaBridge 156:ff21514d8981 212 false, /* Disable EM4 wakeup. */ \
AnnaBridge 156:ff21514d8981 213 cryotimerOscLFRCO, /* Select Low Frequency RC Oscillator. */ \
AnnaBridge 156:ff21514d8981 214 cryotimerPresc_1, /* LF Oscillator frequency undivided. */ \
AnnaBridge 156:ff21514d8981 215 cryotimerPeriod_4096m, /* Wakeup event after 4096M pre-scaled clock cycles. */ \
AnnaBridge 156:ff21514d8981 216 }
AnnaBridge 156:ff21514d8981 217
AnnaBridge 156:ff21514d8981 218 /*******************************************************************************
AnnaBridge 156:ff21514d8981 219 ***************************** PROTOTYPES **********************************
AnnaBridge 156:ff21514d8981 220 ******************************************************************************/
AnnaBridge 156:ff21514d8981 221
AnnaBridge 156:ff21514d8981 222 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 223 * @brief
AnnaBridge 156:ff21514d8981 224 * Clear the CRYOTIMER period interrupt.
AnnaBridge 156:ff21514d8981 225 *
AnnaBridge 156:ff21514d8981 226 * @param[in] flags
AnnaBridge 156:ff21514d8981 227 * CRYOTIMER interrupt sources to clear. Use @ref CRYOTIMER_IFC_PERIOD
AnnaBridge 156:ff21514d8981 228 ******************************************************************************/
AnnaBridge 156:ff21514d8981 229 __STATIC_INLINE void CRYOTIMER_IntClear(uint32_t flags)
AnnaBridge 156:ff21514d8981 230 {
AnnaBridge 156:ff21514d8981 231 CRYOTIMER->IFC = flags & _CRYOTIMER_IFC_MASK;
AnnaBridge 156:ff21514d8981 232 }
AnnaBridge 156:ff21514d8981 233
AnnaBridge 156:ff21514d8981 234 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 235 * @brief
AnnaBridge 156:ff21514d8981 236 * Get the CRYOTIMER interrupt flag.
AnnaBridge 156:ff21514d8981 237 *
AnnaBridge 156:ff21514d8981 238 * @note
AnnaBridge 156:ff21514d8981 239 * The event bits are not cleared by the use of this function.
AnnaBridge 156:ff21514d8981 240 *
AnnaBridge 156:ff21514d8981 241 * @return
AnnaBridge 156:ff21514d8981 242 * Pending CRYOTIMER interrupt sources. The only interrupt source available
AnnaBridge 156:ff21514d8981 243 * for the CRYOTIMER is @ref CRYOTIMER_IF_PERIOD.
AnnaBridge 156:ff21514d8981 244 ******************************************************************************/
AnnaBridge 156:ff21514d8981 245 __STATIC_INLINE uint32_t CRYOTIMER_IntGet(void)
AnnaBridge 156:ff21514d8981 246 {
AnnaBridge 156:ff21514d8981 247 return CRYOTIMER->IF;
AnnaBridge 156:ff21514d8981 248 }
AnnaBridge 156:ff21514d8981 249
AnnaBridge 156:ff21514d8981 250 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 251 * @brief
AnnaBridge 156:ff21514d8981 252 * Get enabled and pending CRYOTIMER interrupt flags.
AnnaBridge 156:ff21514d8981 253 * Useful for handling more interrupt sources in the same interrupt handler.
AnnaBridge 156:ff21514d8981 254 *
AnnaBridge 156:ff21514d8981 255 * @note
AnnaBridge 156:ff21514d8981 256 * Interrupt flags are not cleared by the use of this function.
AnnaBridge 156:ff21514d8981 257 *
AnnaBridge 156:ff21514d8981 258 * @return
AnnaBridge 156:ff21514d8981 259 * Pending and enabled CRYOTIMER interrupt sources
AnnaBridge 156:ff21514d8981 260 * The return value is the bitwise AND of
AnnaBridge 156:ff21514d8981 261 * - the enabled interrupt sources in CRYOTIMER_IEN and
AnnaBridge 156:ff21514d8981 262 * - the pending interrupt flags CRYOTIMER_IF
AnnaBridge 156:ff21514d8981 263 ******************************************************************************/
AnnaBridge 156:ff21514d8981 264 __STATIC_INLINE uint32_t CRYOTIMER_IntGetEnabled(void)
AnnaBridge 156:ff21514d8981 265 {
AnnaBridge 156:ff21514d8981 266 uint32_t ien;
AnnaBridge 156:ff21514d8981 267
AnnaBridge 156:ff21514d8981 268 ien = CRYOTIMER->IEN & _CRYOTIMER_IEN_MASK;
AnnaBridge 156:ff21514d8981 269 return CRYOTIMER->IF & ien;
AnnaBridge 156:ff21514d8981 270 }
AnnaBridge 156:ff21514d8981 271
AnnaBridge 156:ff21514d8981 272 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 273 * @brief
AnnaBridge 156:ff21514d8981 274 * Enable one or more CRYOTIMER interrupts.
AnnaBridge 156:ff21514d8981 275 *
AnnaBridge 156:ff21514d8981 276 * @param[in] flags
AnnaBridge 156:ff21514d8981 277 * CRYOTIMER interrupt sources to enable. Use @ref CRYOTIMER_IEN_PERIOD.
AnnaBridge 156:ff21514d8981 278 ******************************************************************************/
AnnaBridge 156:ff21514d8981 279 __STATIC_INLINE void CRYOTIMER_IntEnable(uint32_t flags)
AnnaBridge 156:ff21514d8981 280 {
AnnaBridge 156:ff21514d8981 281 CRYOTIMER->IEN |= (flags & _CRYOTIMER_IEN_MASK);
AnnaBridge 156:ff21514d8981 282 }
AnnaBridge 156:ff21514d8981 283
AnnaBridge 156:ff21514d8981 284 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 285 * @brief
AnnaBridge 156:ff21514d8981 286 * Disable one or more CRYOTIMER interrupts.
AnnaBridge 156:ff21514d8981 287 *
AnnaBridge 156:ff21514d8981 288 * @param[in] flags
AnnaBridge 156:ff21514d8981 289 * CRYOTIMER interrupt sources to disable. Use @ref CRYOTIMER_IEN_PERIOD.
AnnaBridge 156:ff21514d8981 290 ******************************************************************************/
AnnaBridge 156:ff21514d8981 291 __STATIC_INLINE void CRYOTIMER_IntDisable(uint32_t flags)
AnnaBridge 156:ff21514d8981 292 {
AnnaBridge 156:ff21514d8981 293 CRYOTIMER->IEN &= ~(flags & _CRYOTIMER_IEN_MASK);
AnnaBridge 156:ff21514d8981 294 }
AnnaBridge 156:ff21514d8981 295
AnnaBridge 156:ff21514d8981 296 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 297 * @brief
AnnaBridge 156:ff21514d8981 298 * Set the CRYOTIMER period interrupt flag.
AnnaBridge 156:ff21514d8981 299 *
AnnaBridge 156:ff21514d8981 300 * @note
AnnaBridge 156:ff21514d8981 301 * Writes 1 to the interrupt flag set register.
AnnaBridge 156:ff21514d8981 302 *
AnnaBridge 156:ff21514d8981 303 * @param[in] flags
AnnaBridge 156:ff21514d8981 304 * CRYOTIMER interrupt sources to set to pending. Use
AnnaBridge 156:ff21514d8981 305 * @ref CRYOTIMER_IFS_PERIOD.
AnnaBridge 156:ff21514d8981 306 ******************************************************************************/
AnnaBridge 156:ff21514d8981 307 __STATIC_INLINE void CRYOTIMER_IntSet(uint32_t flags)
AnnaBridge 156:ff21514d8981 308 {
AnnaBridge 156:ff21514d8981 309 CRYOTIMER->IFS = flags & _CRYOTIMER_IFS_MASK;
AnnaBridge 156:ff21514d8981 310 }
AnnaBridge 156:ff21514d8981 311
AnnaBridge 156:ff21514d8981 312 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 313 * @brief
AnnaBridge 156:ff21514d8981 314 * Set the CRYOTIMER period select
AnnaBridge 156:ff21514d8981 315 *
AnnaBridge 156:ff21514d8981 316 * @note
AnnaBridge 156:ff21514d8981 317 * Sets the duration between the Interrupts/Wakeup events based on
AnnaBridge 156:ff21514d8981 318 * the pre-scaled clock.
AnnaBridge 156:ff21514d8981 319 *
AnnaBridge 156:ff21514d8981 320 * @param[in] period
AnnaBridge 156:ff21514d8981 321 * 2^period is the number of clock cycles before a wakeup event or
AnnaBridge 156:ff21514d8981 322 * interrupt is triggered. The CRYOTIMER_Periodsel_TypeDef enum can
AnnaBridge 156:ff21514d8981 323 * be used a convenience type when calling this function.
AnnaBridge 156:ff21514d8981 324 ******************************************************************************/
AnnaBridge 156:ff21514d8981 325 __STATIC_INLINE void CRYOTIMER_PeriodSet(uint32_t period)
AnnaBridge 156:ff21514d8981 326 {
AnnaBridge 156:ff21514d8981 327 CRYOTIMER->PERIODSEL = period & _CRYOTIMER_PERIODSEL_MASK;
AnnaBridge 156:ff21514d8981 328 }
AnnaBridge 156:ff21514d8981 329
AnnaBridge 156:ff21514d8981 330 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 331 * @brief
AnnaBridge 156:ff21514d8981 332 * Get the CRYOTIMER period select value
AnnaBridge 156:ff21514d8981 333 *
AnnaBridge 156:ff21514d8981 334 * @note
AnnaBridge 156:ff21514d8981 335 * Gets the duration between the Interrupts/Wakeup events in the
AnnaBridge 156:ff21514d8981 336 * CRYOTIMER.
AnnaBridge 156:ff21514d8981 337 *
AnnaBridge 156:ff21514d8981 338 * @return
AnnaBridge 156:ff21514d8981 339 * Duration between the interrupts/wakeup events. Returns the value
AnnaBridge 156:ff21514d8981 340 * of the PERIODSEL register. The number of clock cycles can be calculated
AnnaBridge 156:ff21514d8981 341 * as the 2^n where n is the return value of this function.
AnnaBridge 156:ff21514d8981 342 ******************************************************************************/
AnnaBridge 156:ff21514d8981 343 __STATIC_INLINE uint32_t CRYOTIMER_PeriodGet(void)
AnnaBridge 156:ff21514d8981 344 {
AnnaBridge 156:ff21514d8981 345 return CRYOTIMER->PERIODSEL;
AnnaBridge 156:ff21514d8981 346 }
AnnaBridge 156:ff21514d8981 347
AnnaBridge 156:ff21514d8981 348 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 349 * @brief
AnnaBridge 156:ff21514d8981 350 * Get the CRYOTIMER counter value
AnnaBridge 156:ff21514d8981 351 *
AnnaBridge 156:ff21514d8981 352 * @return
AnnaBridge 156:ff21514d8981 353 * Returns the current CRYOTIMER counter value.
AnnaBridge 156:ff21514d8981 354 ******************************************************************************/
AnnaBridge 156:ff21514d8981 355 __STATIC_INLINE uint32_t CRYOTIMER_CounterGet(void)
AnnaBridge 156:ff21514d8981 356 {
AnnaBridge 156:ff21514d8981 357 return CRYOTIMER->CNT;
AnnaBridge 156:ff21514d8981 358 }
AnnaBridge 156:ff21514d8981 359
AnnaBridge 156:ff21514d8981 360 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 361 * @brief
AnnaBridge 156:ff21514d8981 362 * Enable/disable EM4 wakeup capability.
AnnaBridge 156:ff21514d8981 363 *
AnnaBridge 156:ff21514d8981 364 * @param[in] enable
AnnaBridge 156:ff21514d8981 365 * True to enable EM4 wakeup, false to disable.
AnnaBridge 156:ff21514d8981 366 ******************************************************************************/
AnnaBridge 156:ff21514d8981 367 __STATIC_INLINE void CRYOTIMER_EM4WakeupEnable(bool enable)
AnnaBridge 156:ff21514d8981 368 {
AnnaBridge 156:ff21514d8981 369 BUS_RegBitWrite((&CRYOTIMER->EM4WUEN), _CRYOTIMER_EM4WUEN_EM4WU_SHIFT, enable);
AnnaBridge 156:ff21514d8981 370 }
AnnaBridge 156:ff21514d8981 371
AnnaBridge 156:ff21514d8981 372 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 373 * @brief
AnnaBridge 156:ff21514d8981 374 * Enable/disable the CRYOTIMER.
AnnaBridge 156:ff21514d8981 375 *
AnnaBridge 156:ff21514d8981 376 * @param[in] enable
AnnaBridge 156:ff21514d8981 377 * True to enable the CRYOTIMER, false to disable.
AnnaBridge 156:ff21514d8981 378 ******************************************************************************/
AnnaBridge 156:ff21514d8981 379 __STATIC_INLINE void CRYOTIMER_Enable(bool enable)
AnnaBridge 156:ff21514d8981 380 {
AnnaBridge 156:ff21514d8981 381 BUS_RegBitWrite((&CRYOTIMER->CTRL), _CRYOTIMER_CTRL_EN_SHIFT, enable);
AnnaBridge 156:ff21514d8981 382 }
AnnaBridge 156:ff21514d8981 383
AnnaBridge 156:ff21514d8981 384 void CRYOTIMER_Init(const CRYOTIMER_Init_TypeDef *init);
AnnaBridge 156:ff21514d8981 385
AnnaBridge 156:ff21514d8981 386 #ifdef __cplusplus
AnnaBridge 156:ff21514d8981 387 }
AnnaBridge 156:ff21514d8981 388 #endif
AnnaBridge 156:ff21514d8981 389
AnnaBridge 156:ff21514d8981 390 /** @} (end addtogroup CRYOTIMER) */
AnnaBridge 156:ff21514d8981 391 /** @} (end addtogroup emlib) */
AnnaBridge 156:ff21514d8981 392
AnnaBridge 156:ff21514d8981 393 #endif /* defined(CRYOTIMER_PRESENT) && (CRYOTIMER_COUNT == 1) */
AnnaBridge 156:ff21514d8981 394 #endif /* EM_CRYOTIMER_H */