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_EFM32PG12_STK3402/TOOLCHAIN_ARM_STD/em_cryotimer.h@171:3a7713b1edbc, 2018-11-08 (annotated)
- Committer:
- AnnaBridge
- Date:
- Thu Nov 08 11:45:42 2018 +0000
- Revision:
- 171:3a7713b1edbc
- Parent:
- TARGET_EFM32HG_STK3400/TARGET_Silicon_Labs/TARGET_EFM32/emlib/inc/em_cryotimer.h@160:5571c4ff569f
mbed library. Release version 164
Who changed what in which revision?
User | Revision | Line number | New 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 */ |