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 Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

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
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.@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. */
Anna Bridge 160:5571c4ff569f 119 typedef enum {
AnnaBridge 156:ff21514d8981 120 cryotimerPresc_1 = _CRYOTIMER_CTRL_PRESC_DIV1, /**< Divide clock by 1. */
AnnaBridge 156:ff21514d8981 121 cryotimerPresc_2 = _CRYOTIMER_CTRL_PRESC_DIV2, /**< Divide clock by 2. */
AnnaBridge 156:ff21514d8981 122 cryotimerPresc_4 = _CRYOTIMER_CTRL_PRESC_DIV4, /**< Divide clock by 4. */
AnnaBridge 156:ff21514d8981 123 cryotimerPresc_8 = _CRYOTIMER_CTRL_PRESC_DIV8, /**< Divide clock by 8. */
AnnaBridge 156:ff21514d8981 124 cryotimerPresc_16 = _CRYOTIMER_CTRL_PRESC_DIV16, /**< Divide clock by 16. */
AnnaBridge 156:ff21514d8981 125 cryotimerPresc_32 = _CRYOTIMER_CTRL_PRESC_DIV32, /**< Divide clock by 32. */
AnnaBridge 156:ff21514d8981 126 cryotimerPresc_64 = _CRYOTIMER_CTRL_PRESC_DIV64, /**< Divide clock by 64. */
AnnaBridge 156:ff21514d8981 127 cryotimerPresc_128 = _CRYOTIMER_CTRL_PRESC_DIV128, /**< Divide clock by 128. */
AnnaBridge 156:ff21514d8981 128 } CRYOTIMER_Presc_TypeDef;
AnnaBridge 156:ff21514d8981 129
AnnaBridge 156:ff21514d8981 130 /** Low frequency oscillator selection. */
Anna Bridge 160:5571c4ff569f 131 typedef enum {
AnnaBridge 156:ff21514d8981 132 cryotimerOscLFRCO = _CRYOTIMER_CTRL_OSCSEL_LFRCO, /**< Select Low Frequency RC Oscillator. */
AnnaBridge 156:ff21514d8981 133 cryotimerOscLFXO = _CRYOTIMER_CTRL_OSCSEL_LFXO, /**< Select Low Frequency Crystal Oscillator. */
AnnaBridge 156:ff21514d8981 134 cryotimerOscULFRCO = _CRYOTIMER_CTRL_OSCSEL_ULFRCO, /**< Select Ultra Low Frequency RC Oscillator. */
AnnaBridge 156:ff21514d8981 135 } CRYOTIMER_Osc_TypeDef;
AnnaBridge 156:ff21514d8981 136
AnnaBridge 156:ff21514d8981 137 /** Period selection value */
Anna Bridge 160:5571c4ff569f 138 typedef enum {
AnnaBridge 156:ff21514d8981 139 cryotimerPeriod_1 = 0, /**< Wakeup event after every Pre-scaled clock cycle. */
AnnaBridge 156:ff21514d8981 140 cryotimerPeriod_2 = 1, /**< Wakeup event after 2 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 141 cryotimerPeriod_4 = 2, /**< Wakeup event after 4 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 142 cryotimerPeriod_8 = 3, /**< Wakeup event after 8 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 143 cryotimerPeriod_16 = 4, /**< Wakeup event after 16 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 144 cryotimerPeriod_32 = 5, /**< Wakeup event after 32 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 145 cryotimerPeriod_64 = 6, /**< Wakeup event after 64 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 146 cryotimerPeriod_128 = 7, /**< Wakeup event after 128 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 147 cryotimerPeriod_256 = 8, /**< Wakeup event after 256 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 148 cryotimerPeriod_512 = 9, /**< Wakeup event after 512 Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 149 cryotimerPeriod_1k = 10, /**< Wakeup event after 1k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 150 cryotimerPeriod_2k = 11, /**< Wakeup event after 2k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 151 cryotimerPeriod_4k = 12, /**< Wakeup event after 4k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 152 cryotimerPeriod_8k = 13, /**< Wakeup event after 8k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 153 cryotimerPeriod_16k = 14, /**< Wakeup event after 16k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 154 cryotimerPeriod_32k = 15, /**< Wakeup event after 32k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 155 cryotimerPeriod_64k = 16, /**< Wakeup event after 64k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 156 cryotimerPeriod_128k = 17, /**< Wakeup event after 128k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 157 cryotimerPeriod_256k = 18, /**< Wakeup event after 256k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 158 cryotimerPeriod_512k = 19, /**< Wakeup event after 512k Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 159 cryotimerPeriod_1m = 20, /**< Wakeup event after 1m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 160 cryotimerPeriod_2m = 21, /**< Wakeup event after 2m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 161 cryotimerPeriod_4m = 22, /**< Wakeup event after 4m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 162 cryotimerPeriod_8m = 23, /**< Wakeup event after 8m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 163 cryotimerPeriod_16m = 24, /**< Wakeup event after 16m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 164 cryotimerPeriod_32m = 25, /**< Wakeup event after 32m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 165 cryotimerPeriod_64m = 26, /**< Wakeup event after 64m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 166 cryotimerPeriod_128m = 27, /**< Wakeup event after 128m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 167 cryotimerPeriod_256m = 28, /**< Wakeup event after 256m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 168 cryotimerPeriod_512m = 29, /**< Wakeup event after 512m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 169 cryotimerPeriod_1024m = 30, /**< Wakeup event after 1024m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 170 cryotimerPeriod_2048m = 31, /**< Wakeup event after 2048m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 171 cryotimerPeriod_4096m = 32, /**< Wakeup event after 4096m Pre-scaled clock cycles. */
AnnaBridge 156:ff21514d8981 172 } CRYOTIMER_Period_TypeDef;
AnnaBridge 156:ff21514d8981 173
AnnaBridge 156:ff21514d8981 174 /*******************************************************************************
AnnaBridge 156:ff21514d8981 175 ******************************* STRUCTS ***********************************
AnnaBridge 156:ff21514d8981 176 ******************************************************************************/
AnnaBridge 156:ff21514d8981 177
AnnaBridge 156:ff21514d8981 178 /** CRYOTIMER initialization structure. */
Anna Bridge 160:5571c4ff569f 179 typedef struct {
AnnaBridge 156:ff21514d8981 180 /** Enable/disable counting when initialization is completed. */
AnnaBridge 156:ff21514d8981 181 bool enable;
AnnaBridge 156:ff21514d8981 182
AnnaBridge 156:ff21514d8981 183 /** Enable/disable timer counting during debug halt. */
AnnaBridge 156:ff21514d8981 184 bool debugRun;
AnnaBridge 156:ff21514d8981 185
AnnaBridge 156:ff21514d8981 186 /** Enable/disable EM4 Wakeup. */
AnnaBridge 156:ff21514d8981 187 bool em4Wakeup;
AnnaBridge 156:ff21514d8981 188
AnnaBridge 156:ff21514d8981 189 /** Select the oscillator for the CRYOTIMER. */
AnnaBridge 156:ff21514d8981 190 CRYOTIMER_Osc_TypeDef osc;
AnnaBridge 156:ff21514d8981 191
AnnaBridge 156:ff21514d8981 192 /** Prescaler. */
AnnaBridge 156:ff21514d8981 193 CRYOTIMER_Presc_TypeDef presc;
AnnaBridge 156:ff21514d8981 194
AnnaBridge 156:ff21514d8981 195 /** Period between wakeup event/interrupt. */
AnnaBridge 156:ff21514d8981 196 CRYOTIMER_Period_TypeDef period;
AnnaBridge 156:ff21514d8981 197 } CRYOTIMER_Init_TypeDef;
AnnaBridge 156:ff21514d8981 198
AnnaBridge 156:ff21514d8981 199 /*******************************************************************************
AnnaBridge 156:ff21514d8981 200 ******************************* DEFINES ***********************************
AnnaBridge 156:ff21514d8981 201 ******************************************************************************/
AnnaBridge 156:ff21514d8981 202
AnnaBridge 156:ff21514d8981 203 /** Default CRYOTIMER init structure. */
Anna Bridge 160:5571c4ff569f 204 #define CRYOTIMER_INIT_DEFAULT \
Anna Bridge 160:5571c4ff569f 205 { \
Anna Bridge 160:5571c4ff569f 206 true, /* Start counting when init done. */ \
Anna Bridge 160:5571c4ff569f 207 false, /* Disable CRYOTIMER during debug halt. */ \
Anna Bridge 160:5571c4ff569f 208 false, /* Disable EM4 wakeup. */ \
Anna Bridge 160:5571c4ff569f 209 cryotimerOscLFRCO, /* Select Low Frequency RC Oscillator. */ \
Anna Bridge 160:5571c4ff569f 210 cryotimerPresc_1, /* LF Oscillator frequency undivided. */ \
Anna Bridge 160:5571c4ff569f 211 cryotimerPeriod_4096m, /* Wakeup event after 4096M pre-scaled clock cycles. */ \
Anna Bridge 160:5571c4ff569f 212 }
AnnaBridge 156:ff21514d8981 213
AnnaBridge 156:ff21514d8981 214 /*******************************************************************************
AnnaBridge 156:ff21514d8981 215 ***************************** PROTOTYPES **********************************
AnnaBridge 156:ff21514d8981 216 ******************************************************************************/
AnnaBridge 156:ff21514d8981 217
AnnaBridge 156:ff21514d8981 218 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 219 * @brief
AnnaBridge 156:ff21514d8981 220 * Clear the CRYOTIMER period interrupt.
AnnaBridge 156:ff21514d8981 221 *
AnnaBridge 156:ff21514d8981 222 * @param[in] flags
AnnaBridge 156:ff21514d8981 223 * CRYOTIMER interrupt sources to clear. Use @ref CRYOTIMER_IFC_PERIOD
AnnaBridge 156:ff21514d8981 224 ******************************************************************************/
AnnaBridge 156:ff21514d8981 225 __STATIC_INLINE void CRYOTIMER_IntClear(uint32_t flags)
AnnaBridge 156:ff21514d8981 226 {
AnnaBridge 156:ff21514d8981 227 CRYOTIMER->IFC = flags & _CRYOTIMER_IFC_MASK;
AnnaBridge 156:ff21514d8981 228 }
AnnaBridge 156:ff21514d8981 229
AnnaBridge 156:ff21514d8981 230 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 231 * @brief
AnnaBridge 156:ff21514d8981 232 * Get the CRYOTIMER interrupt flag.
AnnaBridge 156:ff21514d8981 233 *
AnnaBridge 156:ff21514d8981 234 * @note
AnnaBridge 156:ff21514d8981 235 * The event bits are not cleared by the use of this function.
AnnaBridge 156:ff21514d8981 236 *
AnnaBridge 156:ff21514d8981 237 * @return
AnnaBridge 156:ff21514d8981 238 * Pending CRYOTIMER interrupt sources. The only interrupt source available
AnnaBridge 156:ff21514d8981 239 * for the CRYOTIMER is @ref CRYOTIMER_IF_PERIOD.
AnnaBridge 156:ff21514d8981 240 ******************************************************************************/
AnnaBridge 156:ff21514d8981 241 __STATIC_INLINE uint32_t CRYOTIMER_IntGet(void)
AnnaBridge 156:ff21514d8981 242 {
AnnaBridge 156:ff21514d8981 243 return CRYOTIMER->IF;
AnnaBridge 156:ff21514d8981 244 }
AnnaBridge 156:ff21514d8981 245
AnnaBridge 156:ff21514d8981 246 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 247 * @brief
AnnaBridge 156:ff21514d8981 248 * Get enabled and pending CRYOTIMER interrupt flags.
AnnaBridge 156:ff21514d8981 249 * Useful for handling more interrupt sources in the same interrupt handler.
AnnaBridge 156:ff21514d8981 250 *
AnnaBridge 156:ff21514d8981 251 * @note
AnnaBridge 156:ff21514d8981 252 * Interrupt flags are not cleared by the use of this function.
AnnaBridge 156:ff21514d8981 253 *
AnnaBridge 156:ff21514d8981 254 * @return
AnnaBridge 156:ff21514d8981 255 * Pending and enabled CRYOTIMER interrupt sources
AnnaBridge 156:ff21514d8981 256 * The return value is the bitwise AND of
AnnaBridge 156:ff21514d8981 257 * - the enabled interrupt sources in CRYOTIMER_IEN and
AnnaBridge 156:ff21514d8981 258 * - the pending interrupt flags CRYOTIMER_IF
AnnaBridge 156:ff21514d8981 259 ******************************************************************************/
AnnaBridge 156:ff21514d8981 260 __STATIC_INLINE uint32_t CRYOTIMER_IntGetEnabled(void)
AnnaBridge 156:ff21514d8981 261 {
AnnaBridge 156:ff21514d8981 262 uint32_t ien;
AnnaBridge 156:ff21514d8981 263
AnnaBridge 156:ff21514d8981 264 ien = CRYOTIMER->IEN & _CRYOTIMER_IEN_MASK;
AnnaBridge 156:ff21514d8981 265 return CRYOTIMER->IF & ien;
AnnaBridge 156:ff21514d8981 266 }
AnnaBridge 156:ff21514d8981 267
AnnaBridge 156:ff21514d8981 268 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 269 * @brief
AnnaBridge 156:ff21514d8981 270 * Enable one or more CRYOTIMER interrupts.
AnnaBridge 156:ff21514d8981 271 *
AnnaBridge 156:ff21514d8981 272 * @param[in] flags
AnnaBridge 156:ff21514d8981 273 * CRYOTIMER interrupt sources to enable. Use @ref CRYOTIMER_IEN_PERIOD.
AnnaBridge 156:ff21514d8981 274 ******************************************************************************/
AnnaBridge 156:ff21514d8981 275 __STATIC_INLINE void CRYOTIMER_IntEnable(uint32_t flags)
AnnaBridge 156:ff21514d8981 276 {
AnnaBridge 156:ff21514d8981 277 CRYOTIMER->IEN |= (flags & _CRYOTIMER_IEN_MASK);
AnnaBridge 156:ff21514d8981 278 }
AnnaBridge 156:ff21514d8981 279
AnnaBridge 156:ff21514d8981 280 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 281 * @brief
AnnaBridge 156:ff21514d8981 282 * Disable one or more CRYOTIMER interrupts.
AnnaBridge 156:ff21514d8981 283 *
AnnaBridge 156:ff21514d8981 284 * @param[in] flags
AnnaBridge 156:ff21514d8981 285 * CRYOTIMER interrupt sources to disable. Use @ref CRYOTIMER_IEN_PERIOD.
AnnaBridge 156:ff21514d8981 286 ******************************************************************************/
AnnaBridge 156:ff21514d8981 287 __STATIC_INLINE void CRYOTIMER_IntDisable(uint32_t flags)
AnnaBridge 156:ff21514d8981 288 {
AnnaBridge 156:ff21514d8981 289 CRYOTIMER->IEN &= ~(flags & _CRYOTIMER_IEN_MASK);
AnnaBridge 156:ff21514d8981 290 }
AnnaBridge 156:ff21514d8981 291
AnnaBridge 156:ff21514d8981 292 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 293 * @brief
AnnaBridge 156:ff21514d8981 294 * Set the CRYOTIMER period interrupt flag.
AnnaBridge 156:ff21514d8981 295 *
AnnaBridge 156:ff21514d8981 296 * @note
AnnaBridge 156:ff21514d8981 297 * Writes 1 to the interrupt flag set register.
AnnaBridge 156:ff21514d8981 298 *
AnnaBridge 156:ff21514d8981 299 * @param[in] flags
AnnaBridge 156:ff21514d8981 300 * CRYOTIMER interrupt sources to set to pending. Use
AnnaBridge 156:ff21514d8981 301 * @ref CRYOTIMER_IFS_PERIOD.
AnnaBridge 156:ff21514d8981 302 ******************************************************************************/
AnnaBridge 156:ff21514d8981 303 __STATIC_INLINE void CRYOTIMER_IntSet(uint32_t flags)
AnnaBridge 156:ff21514d8981 304 {
AnnaBridge 156:ff21514d8981 305 CRYOTIMER->IFS = flags & _CRYOTIMER_IFS_MASK;
AnnaBridge 156:ff21514d8981 306 }
AnnaBridge 156:ff21514d8981 307
AnnaBridge 156:ff21514d8981 308 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 309 * @brief
AnnaBridge 156:ff21514d8981 310 * Set the CRYOTIMER period select
AnnaBridge 156:ff21514d8981 311 *
AnnaBridge 156:ff21514d8981 312 * @note
AnnaBridge 156:ff21514d8981 313 * Sets the duration between the Interrupts/Wakeup events based on
AnnaBridge 156:ff21514d8981 314 * the pre-scaled clock.
AnnaBridge 156:ff21514d8981 315 *
AnnaBridge 156:ff21514d8981 316 * @param[in] period
AnnaBridge 156:ff21514d8981 317 * 2^period is the number of clock cycles before a wakeup event or
AnnaBridge 156:ff21514d8981 318 * interrupt is triggered. The CRYOTIMER_Periodsel_TypeDef enum can
AnnaBridge 156:ff21514d8981 319 * be used a convenience type when calling this function.
AnnaBridge 156:ff21514d8981 320 ******************************************************************************/
AnnaBridge 156:ff21514d8981 321 __STATIC_INLINE void CRYOTIMER_PeriodSet(uint32_t period)
AnnaBridge 156:ff21514d8981 322 {
AnnaBridge 156:ff21514d8981 323 CRYOTIMER->PERIODSEL = period & _CRYOTIMER_PERIODSEL_MASK;
AnnaBridge 156:ff21514d8981 324 }
AnnaBridge 156:ff21514d8981 325
AnnaBridge 156:ff21514d8981 326 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 327 * @brief
AnnaBridge 156:ff21514d8981 328 * Get the CRYOTIMER period select value
AnnaBridge 156:ff21514d8981 329 *
AnnaBridge 156:ff21514d8981 330 * @note
AnnaBridge 156:ff21514d8981 331 * Gets the duration between the Interrupts/Wakeup events in the
AnnaBridge 156:ff21514d8981 332 * CRYOTIMER.
AnnaBridge 156:ff21514d8981 333 *
AnnaBridge 156:ff21514d8981 334 * @return
AnnaBridge 156:ff21514d8981 335 * Duration between the interrupts/wakeup events. Returns the value
AnnaBridge 156:ff21514d8981 336 * of the PERIODSEL register. The number of clock cycles can be calculated
AnnaBridge 156:ff21514d8981 337 * as the 2^n where n is the return value of this function.
AnnaBridge 156:ff21514d8981 338 ******************************************************************************/
AnnaBridge 156:ff21514d8981 339 __STATIC_INLINE uint32_t CRYOTIMER_PeriodGet(void)
AnnaBridge 156:ff21514d8981 340 {
AnnaBridge 156:ff21514d8981 341 return CRYOTIMER->PERIODSEL;
AnnaBridge 156:ff21514d8981 342 }
AnnaBridge 156:ff21514d8981 343
AnnaBridge 156:ff21514d8981 344 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 345 * @brief
AnnaBridge 156:ff21514d8981 346 * Get the CRYOTIMER counter value
AnnaBridge 156:ff21514d8981 347 *
AnnaBridge 156:ff21514d8981 348 * @return
AnnaBridge 156:ff21514d8981 349 * Returns the current CRYOTIMER counter value.
AnnaBridge 156:ff21514d8981 350 ******************************************************************************/
AnnaBridge 156:ff21514d8981 351 __STATIC_INLINE uint32_t CRYOTIMER_CounterGet(void)
AnnaBridge 156:ff21514d8981 352 {
AnnaBridge 156:ff21514d8981 353 return CRYOTIMER->CNT;
AnnaBridge 156:ff21514d8981 354 }
AnnaBridge 156:ff21514d8981 355
AnnaBridge 156:ff21514d8981 356 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 357 * @brief
AnnaBridge 156:ff21514d8981 358 * Enable/disable EM4 wakeup capability.
AnnaBridge 156:ff21514d8981 359 *
AnnaBridge 156:ff21514d8981 360 * @param[in] enable
AnnaBridge 156:ff21514d8981 361 * True to enable EM4 wakeup, false to disable.
AnnaBridge 156:ff21514d8981 362 ******************************************************************************/
AnnaBridge 156:ff21514d8981 363 __STATIC_INLINE void CRYOTIMER_EM4WakeupEnable(bool enable)
AnnaBridge 156:ff21514d8981 364 {
AnnaBridge 156:ff21514d8981 365 BUS_RegBitWrite((&CRYOTIMER->EM4WUEN), _CRYOTIMER_EM4WUEN_EM4WU_SHIFT, enable);
AnnaBridge 156:ff21514d8981 366 }
AnnaBridge 156:ff21514d8981 367
AnnaBridge 156:ff21514d8981 368 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 369 * @brief
AnnaBridge 156:ff21514d8981 370 * Enable/disable the CRYOTIMER.
AnnaBridge 156:ff21514d8981 371 *
AnnaBridge 156:ff21514d8981 372 * @param[in] enable
AnnaBridge 156:ff21514d8981 373 * True to enable the CRYOTIMER, false to disable.
AnnaBridge 156:ff21514d8981 374 ******************************************************************************/
AnnaBridge 156:ff21514d8981 375 __STATIC_INLINE void CRYOTIMER_Enable(bool enable)
AnnaBridge 156:ff21514d8981 376 {
AnnaBridge 156:ff21514d8981 377 BUS_RegBitWrite((&CRYOTIMER->CTRL), _CRYOTIMER_CTRL_EN_SHIFT, enable);
AnnaBridge 156:ff21514d8981 378 }
AnnaBridge 156:ff21514d8981 379
AnnaBridge 156:ff21514d8981 380 void CRYOTIMER_Init(const CRYOTIMER_Init_TypeDef *init);
AnnaBridge 156:ff21514d8981 381
AnnaBridge 156:ff21514d8981 382 #ifdef __cplusplus
AnnaBridge 156:ff21514d8981 383 }
AnnaBridge 156:ff21514d8981 384 #endif
AnnaBridge 156:ff21514d8981 385
AnnaBridge 156:ff21514d8981 386 /** @} (end addtogroup CRYOTIMER) */
AnnaBridge 156:ff21514d8981 387 /** @} (end addtogroup emlib) */
AnnaBridge 156:ff21514d8981 388
AnnaBridge 156:ff21514d8981 389 #endif /* defined(CRYOTIMER_PRESENT) && (CRYOTIMER_COUNT == 1) */
AnnaBridge 156:ff21514d8981 390 #endif /* EM_CRYOTIMER_H */