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
Anna Bridge 142:4eea097334d6 1 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 2 * @file
Anna Bridge 142:4eea097334d6 3 * @brief Real Time Counter (RTCC) peripheral API.
Anna Bridge 160:5571c4ff569f 4 * @version 5.3.3
Anna Bridge 142:4eea097334d6 5 *******************************************************************************
Anna Bridge 160:5571c4ff569f 6 * # License
Anna Bridge 142:4eea097334d6 7 * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b>
Anna Bridge 142:4eea097334d6 8 *******************************************************************************
Anna Bridge 142:4eea097334d6 9 *
Anna Bridge 142:4eea097334d6 10 * Permission is granted to anyone to use this software for any purpose,
Anna Bridge 142:4eea097334d6 11 * including commercial applications, and to alter it and redistribute it
Anna Bridge 142:4eea097334d6 12 * freely, subject to the following restrictions:
Anna Bridge 142:4eea097334d6 13 *
Anna Bridge 142:4eea097334d6 14 * 1. The origin of this software must not be misrepresented; you must not
Anna Bridge 142:4eea097334d6 15 * claim that you wrote the original software.
Anna Bridge 142:4eea097334d6 16 * 2. Altered source versions must be plainly marked as such, and must not be
Anna Bridge 142:4eea097334d6 17 * misrepresented as being the original software.
Anna Bridge 142:4eea097334d6 18 * 3. This notice may not be removed or altered from any source distribution.
Anna Bridge 142:4eea097334d6 19 *
Anna Bridge 142:4eea097334d6 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
Anna Bridge 142:4eea097334d6 21 * obligation to support this Software. Silicon Labs is providing the
Anna Bridge 142:4eea097334d6 22 * Software "AS IS", with no express or implied warranties of any kind,
Anna Bridge 142:4eea097334d6 23 * including, but not limited to, any implied warranties of merchantability
Anna Bridge 142:4eea097334d6 24 * or fitness for any particular purpose or warranties against infringement
Anna Bridge 142:4eea097334d6 25 * of any proprietary rights of a third party.
Anna Bridge 142:4eea097334d6 26 *
Anna Bridge 142:4eea097334d6 27 * Silicon Labs will not be liable for any consequential, incidental, or
Anna Bridge 142:4eea097334d6 28 * special damages, or any other relief, or for any claim by any third party,
Anna Bridge 142:4eea097334d6 29 * arising from your use of this Software.
Anna Bridge 142:4eea097334d6 30 *
Anna Bridge 142:4eea097334d6 31 ******************************************************************************/
Anna Bridge 142:4eea097334d6 32
Anna Bridge 142:4eea097334d6 33 #ifndef EM_RTCC_H
Anna Bridge 142:4eea097334d6 34 #define EM_RTCC_H
Anna Bridge 142:4eea097334d6 35
Anna Bridge 142:4eea097334d6 36 #include "em_device.h"
Anna Bridge 160:5571c4ff569f 37 #if defined(RTCC_COUNT) && (RTCC_COUNT == 1)
Anna Bridge 142:4eea097334d6 38
Anna Bridge 142:4eea097334d6 39 #include <stdbool.h>
Anna Bridge 142:4eea097334d6 40 #include "em_assert.h"
Anna Bridge 142:4eea097334d6 41
Anna Bridge 142:4eea097334d6 42 #ifdef __cplusplus
Anna Bridge 142:4eea097334d6 43 extern "C" {
Anna Bridge 142:4eea097334d6 44 #endif
Anna Bridge 142:4eea097334d6 45
Anna Bridge 142:4eea097334d6 46 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 47 * @addtogroup emlib
Anna Bridge 142:4eea097334d6 48 * @{
Anna Bridge 142:4eea097334d6 49 ******************************************************************************/
Anna Bridge 142:4eea097334d6 50
Anna Bridge 142:4eea097334d6 51 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 52 * @addtogroup RTCC
Anna Bridge 142:4eea097334d6 53 * @{
Anna Bridge 142:4eea097334d6 54 ******************************************************************************/
Anna Bridge 142:4eea097334d6 55
Anna Bridge 142:4eea097334d6 56 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
Anna Bridge 160:5571c4ff569f 57 #if defined(_SILICON_LABS_GECKO_INTERNAL_SDID_84) \
Anna Bridge 160:5571c4ff569f 58 || defined(_SILICON_LABS_GECKO_INTERNAL_SDID_89)
Anna Bridge 142:4eea097334d6 59 /* Enable fix for errata "RTCC_E203 - Potential Stability Issue with RTCC
Anna Bridge 142:4eea097334d6 60 * Registers". */
Anna Bridge 142:4eea097334d6 61 #define ERRATA_FIX_RTCC_E203
Anna Bridge 142:4eea097334d6 62 #endif
Anna Bridge 142:4eea097334d6 63
Anna Bridge 142:4eea097334d6 64 #if defined(_SILICON_LABS_GECKO_INTERNAL_SDID_84)
Anna Bridge 142:4eea097334d6 65 /* Enable fix for errata "RTCC_E204 - Disabling the RTCC Backup RAM may consume extra
Anna Bridge 142:4eea097334d6 66 * current". */
Anna Bridge 142:4eea097334d6 67 #define ERRATA_FIX_RTCC_E204
Anna Bridge 142:4eea097334d6 68 #endif
Anna Bridge 142:4eea097334d6 69 /** @endcond */
Anna Bridge 142:4eea097334d6 70
Anna Bridge 142:4eea097334d6 71 /*******************************************************************************
Anna Bridge 142:4eea097334d6 72 ********************************* ENUM ************************************
Anna Bridge 142:4eea097334d6 73 ******************************************************************************/
Anna Bridge 142:4eea097334d6 74
Anna Bridge 142:4eea097334d6 75 /** Operational mode of the counter. */
Anna Bridge 160:5571c4ff569f 76 typedef enum {
Anna Bridge 142:4eea097334d6 77 /** Normal counter mode. The counter is incremented by 1 for each tick. */
Anna Bridge 160:5571c4ff569f 78 rtccCntModeNormal = _RTCC_CTRL_CNTMODE_NORMAL,
Anna Bridge 142:4eea097334d6 79
Anna Bridge 142:4eea097334d6 80 /** Calendar mode. Refer to the RTCC chapter of the Reference Manual for more
Anna Bridge 142:4eea097334d6 81 * details on the calendar mode. */
Anna Bridge 160:5571c4ff569f 82 rtccCntModeCalendar = _RTCC_CTRL_CNTMODE_CALENDAR
Anna Bridge 142:4eea097334d6 83 } RTCC_CntMode_TypeDef;
Anna Bridge 142:4eea097334d6 84
Anna Bridge 142:4eea097334d6 85 /** Counter prescaler selection. */
Anna Bridge 160:5571c4ff569f 86 typedef enum {
Anna Bridge 142:4eea097334d6 87 rtccCntPresc_1 = _RTCC_CTRL_CNTPRESC_DIV1, /**< Divide clock by 1. */
Anna Bridge 142:4eea097334d6 88 rtccCntPresc_2 = _RTCC_CTRL_CNTPRESC_DIV2, /**< Divide clock by 2. */
Anna Bridge 142:4eea097334d6 89 rtccCntPresc_4 = _RTCC_CTRL_CNTPRESC_DIV4, /**< Divide clock by 4. */
Anna Bridge 142:4eea097334d6 90 rtccCntPresc_8 = _RTCC_CTRL_CNTPRESC_DIV8, /**< Divide clock by 8. */
Anna Bridge 142:4eea097334d6 91 rtccCntPresc_16 = _RTCC_CTRL_CNTPRESC_DIV16, /**< Divide clock by 16. */
Anna Bridge 142:4eea097334d6 92 rtccCntPresc_32 = _RTCC_CTRL_CNTPRESC_DIV32, /**< Divide clock by 32. */
Anna Bridge 142:4eea097334d6 93 rtccCntPresc_64 = _RTCC_CTRL_CNTPRESC_DIV64, /**< Divide clock by 64. */
Anna Bridge 142:4eea097334d6 94 rtccCntPresc_128 = _RTCC_CTRL_CNTPRESC_DIV128, /**< Divide clock by 128. */
Anna Bridge 142:4eea097334d6 95 rtccCntPresc_256 = _RTCC_CTRL_CNTPRESC_DIV256, /**< Divide clock by 256. */
Anna Bridge 142:4eea097334d6 96 rtccCntPresc_512 = _RTCC_CTRL_CNTPRESC_DIV512, /**< Divide clock by 512. */
Anna Bridge 142:4eea097334d6 97 rtccCntPresc_1024 = _RTCC_CTRL_CNTPRESC_DIV1024, /**< Divide clock by 1024. */
Anna Bridge 142:4eea097334d6 98 rtccCntPresc_2048 = _RTCC_CTRL_CNTPRESC_DIV2048, /**< Divide clock by 2048. */
Anna Bridge 142:4eea097334d6 99 rtccCntPresc_4096 = _RTCC_CTRL_CNTPRESC_DIV4096, /**< Divide clock by 4096. */
Anna Bridge 142:4eea097334d6 100 rtccCntPresc_8192 = _RTCC_CTRL_CNTPRESC_DIV8192, /**< Divide clock by 8192. */
Anna Bridge 142:4eea097334d6 101 rtccCntPresc_16384 = _RTCC_CTRL_CNTPRESC_DIV16384, /**< Divide clock by 16384. */
Anna Bridge 142:4eea097334d6 102 rtccCntPresc_32768 = _RTCC_CTRL_CNTPRESC_DIV32768 /**< Divide clock by 32768. */
Anna Bridge 142:4eea097334d6 103 } RTCC_CntPresc_TypeDef;
Anna Bridge 142:4eea097334d6 104
Anna Bridge 142:4eea097334d6 105 /** Prescaler mode of the RTCC counter. */
Anna Bridge 160:5571c4ff569f 106 typedef enum {
Anna Bridge 142:4eea097334d6 107 /** CNT register ticks according to the prescaler value. */
Anna Bridge 142:4eea097334d6 108 rtccCntTickPresc = _RTCC_CTRL_CNTTICK_PRESC,
Anna Bridge 142:4eea097334d6 109
Anna Bridge 142:4eea097334d6 110 /** CNT register ticks when PRECNT matches the 15 least significant bits of
Anna Bridge 142:4eea097334d6 111 * ch. 0 CCV register. */
Anna Bridge 142:4eea097334d6 112 rtccCntTickCCV0Match = _RTCC_CTRL_CNTTICK_CCV0MATCH
Anna Bridge 142:4eea097334d6 113 } RTCC_PrescMode_TypeDef;
Anna Bridge 142:4eea097334d6 114
Anna Bridge 142:4eea097334d6 115 /** Capture/Compare channel mode. */
Anna Bridge 160:5571c4ff569f 116 typedef enum {
Anna Bridge 142:4eea097334d6 117 rtccCapComChModeOff = _RTCC_CC_CTRL_MODE_OFF, /**< Capture/Compare channel turned off. */
Anna Bridge 142:4eea097334d6 118 rtccCapComChModeCapture = _RTCC_CC_CTRL_MODE_INPUTCAPTURE, /**< Capture mode. */
Anna Bridge 142:4eea097334d6 119 rtccCapComChModeCompare = _RTCC_CC_CTRL_MODE_OUTPUTCOMPARE, /**< Compare mode. */
Anna Bridge 142:4eea097334d6 120 } RTCC_CapComChMode_TypeDef;
Anna Bridge 142:4eea097334d6 121
Anna Bridge 142:4eea097334d6 122 /** Compare match output action mode. */
Anna Bridge 160:5571c4ff569f 123 typedef enum {
Anna Bridge 142:4eea097334d6 124 rtccCompMatchOutActionPulse = _RTCC_CC_CTRL_CMOA_PULSE, /**< Generate a pulse. */
Anna Bridge 142:4eea097334d6 125 rtccCompMatchOutActionToggle = _RTCC_CC_CTRL_CMOA_TOGGLE, /**< Toggle output. */
Anna Bridge 142:4eea097334d6 126 rtccCompMatchOutActionClear = _RTCC_CC_CTRL_CMOA_CLEAR, /**< Clear output. */
Anna Bridge 142:4eea097334d6 127 rtccCompMatchOutActionSet = _RTCC_CC_CTRL_CMOA_SET /**< Set output. */
Anna Bridge 142:4eea097334d6 128 } RTCC_CompMatchOutAction_TypeDef;
Anna Bridge 142:4eea097334d6 129
Anna Bridge 142:4eea097334d6 130 /** PRS input sources. */
Anna Bridge 160:5571c4ff569f 131 typedef enum {
Anna Bridge 142:4eea097334d6 132 rtccPRSCh0 = _RTCC_CC_CTRL_PRSSEL_PRSCH0, /**< PRS channel 0. */
Anna Bridge 142:4eea097334d6 133 rtccPRSCh1 = _RTCC_CC_CTRL_PRSSEL_PRSCH1, /**< PRS channel 1. */
Anna Bridge 142:4eea097334d6 134 rtccPRSCh2 = _RTCC_CC_CTRL_PRSSEL_PRSCH2, /**< PRS channel 2. */
Anna Bridge 142:4eea097334d6 135 rtccPRSCh3 = _RTCC_CC_CTRL_PRSSEL_PRSCH3, /**< PRS channel 3. */
Anna Bridge 142:4eea097334d6 136 rtccPRSCh4 = _RTCC_CC_CTRL_PRSSEL_PRSCH4, /**< PRS channel 4. */
Anna Bridge 142:4eea097334d6 137 rtccPRSCh5 = _RTCC_CC_CTRL_PRSSEL_PRSCH5, /**< PRS channel 5. */
Anna Bridge 142:4eea097334d6 138 rtccPRSCh6 = _RTCC_CC_CTRL_PRSSEL_PRSCH6, /**< PRS channel 6. */
Anna Bridge 142:4eea097334d6 139 rtccPRSCh7 = _RTCC_CC_CTRL_PRSSEL_PRSCH7, /**< PRS channel 7. */
Anna Bridge 160:5571c4ff569f 140 #if defined(_RTCC_CC_CTRL_PRSSEL_PRSCH8)
Anna Bridge 142:4eea097334d6 141 rtccPRSCh8 = _RTCC_CC_CTRL_PRSSEL_PRSCH8, /**< PRS channel 8. */
Anna Bridge 160:5571c4ff569f 142 #endif
Anna Bridge 160:5571c4ff569f 143 #if defined(_RTCC_CC_CTRL_PRSSEL_PRSCH9)
Anna Bridge 142:4eea097334d6 144 rtccPRSCh9 = _RTCC_CC_CTRL_PRSSEL_PRSCH9, /**< PRS channel 9. */
Anna Bridge 160:5571c4ff569f 145 #endif
Anna Bridge 160:5571c4ff569f 146 #if defined(_RTCC_CC_CTRL_PRSSEL_PRSCH10)
Anna Bridge 142:4eea097334d6 147 rtccPRSCh10 = _RTCC_CC_CTRL_PRSSEL_PRSCH10, /**< PRS channel 10. */
Anna Bridge 160:5571c4ff569f 148 #endif
Anna Bridge 160:5571c4ff569f 149 #if defined(_RTCC_CC_CTRL_PRSSEL_PRSCH11)
Anna Bridge 142:4eea097334d6 150 rtccPRSCh11 = _RTCC_CC_CTRL_PRSSEL_PRSCH11 /**< PRS channel 11. */
Anna Bridge 160:5571c4ff569f 151 #endif
Anna Bridge 142:4eea097334d6 152 } RTCC_PRSSel_TypeDef;
Anna Bridge 142:4eea097334d6 153
Anna Bridge 142:4eea097334d6 154 /** Input edge select. */
Anna Bridge 160:5571c4ff569f 155 typedef enum {
Anna Bridge 142:4eea097334d6 156 rtccInEdgeRising = _RTCC_CC_CTRL_ICEDGE_RISING, /**< Rising edges detected. */
Anna Bridge 142:4eea097334d6 157 rtccInEdgeFalling = _RTCC_CC_CTRL_ICEDGE_FALLING, /**< Falling edges detected. */
Anna Bridge 142:4eea097334d6 158 rtccInEdgeBoth = _RTCC_CC_CTRL_ICEDGE_BOTH, /**< Both edges detected. */
Anna Bridge 142:4eea097334d6 159 rtccInEdgeNone = _RTCC_CC_CTRL_ICEDGE_NONE /**< No edge detection, signal is left as is. */
Anna Bridge 142:4eea097334d6 160 } RTCC_InEdgeSel_TypeDef;
Anna Bridge 142:4eea097334d6 161
Anna Bridge 142:4eea097334d6 162 /** Capture/Compare channel compare mode. */
Anna Bridge 160:5571c4ff569f 163 typedef enum {
Anna Bridge 142:4eea097334d6 164 /** CCVx is compared with the CNT register. */
Anna Bridge 142:4eea097334d6 165 rtccCompBaseCnt = _RTCC_CC_CTRL_COMPBASE_CNT,
Anna Bridge 142:4eea097334d6 166
Anna Bridge 142:4eea097334d6 167 /** CCVx is compared with a CNT[16:0] and PRECNT[14:0]. */
Anna Bridge 142:4eea097334d6 168 rtccCompBasePreCnt = _RTCC_CC_CTRL_COMPBASE_PRECNT
Anna Bridge 142:4eea097334d6 169 } RTCC_CompBase_TypeDef;
Anna Bridge 142:4eea097334d6 170
Anna Bridge 160:5571c4ff569f 171 /** Day compare mode. */
Anna Bridge 160:5571c4ff569f 172 typedef enum {
Anna Bridge 142:4eea097334d6 173 rtccDayCompareModeMonth = _RTCC_CC_CTRL_DAYCC_MONTH, /**< Day of month is selected for Capture/Compare. */
Anna Bridge 142:4eea097334d6 174 rtccDayCompareModeWeek = _RTCC_CC_CTRL_DAYCC_WEEK /**< Day of week is selected for Capture/Compare. */
Anna Bridge 142:4eea097334d6 175 } RTCC_DayCompareMode_TypeDef;
Anna Bridge 142:4eea097334d6 176
Anna Bridge 142:4eea097334d6 177 /*******************************************************************************
Anna Bridge 142:4eea097334d6 178 ******************************* STRUCTS ***********************************
Anna Bridge 142:4eea097334d6 179 ******************************************************************************/
Anna Bridge 142:4eea097334d6 180
Anna Bridge 142:4eea097334d6 181 /** RTCC initialization structure. */
Anna Bridge 160:5571c4ff569f 182 typedef struct {
Anna Bridge 142:4eea097334d6 183 /** Enable/disable counting when initialization is completed. */
Anna Bridge 142:4eea097334d6 184 bool enable;
Anna Bridge 142:4eea097334d6 185
Anna Bridge 142:4eea097334d6 186 /** Enable/disable timer counting during debug halt. */
Anna Bridge 142:4eea097334d6 187 bool debugRun;
Anna Bridge 142:4eea097334d6 188
Anna Bridge 142:4eea097334d6 189 /** Enable/disable precounter wrap on ch. 0 CCV value. */
Anna Bridge 142:4eea097334d6 190 bool precntWrapOnCCV0;
Anna Bridge 142:4eea097334d6 191
Anna Bridge 142:4eea097334d6 192 /** Enable/disable counter wrap on ch. 1 CCV value. */
Anna Bridge 142:4eea097334d6 193 bool cntWrapOnCCV1;
Anna Bridge 142:4eea097334d6 194
Anna Bridge 142:4eea097334d6 195 /** Counter prescaler. */
Anna Bridge 142:4eea097334d6 196 RTCC_CntPresc_TypeDef presc;
Anna Bridge 142:4eea097334d6 197
Anna Bridge 142:4eea097334d6 198 /** Prescaler mode. */
Anna Bridge 142:4eea097334d6 199 RTCC_PrescMode_TypeDef prescMode;
Anna Bridge 142:4eea097334d6 200
Anna Bridge 142:4eea097334d6 201 #if defined(_RTCC_CTRL_BUMODETSEN_MASK)
Anna Bridge 142:4eea097334d6 202 /** Enable/disable storing RTCC counter value in RTCC_CCV2 upon backup mode
Anna Bridge 142:4eea097334d6 203 * entry. */
Anna Bridge 142:4eea097334d6 204 bool enaBackupModeSet;
Anna Bridge 142:4eea097334d6 205 #endif
Anna Bridge 142:4eea097334d6 206
Anna Bridge 142:4eea097334d6 207 /** Enable/disable the check that sets the OSCFFAIL interrupt flag if no
Anna Bridge 142:4eea097334d6 208 * LFCLK-RTCC ticks are detected within one ULFRCO cycles. */
Anna Bridge 142:4eea097334d6 209 bool enaOSCFailDetect;
Anna Bridge 142:4eea097334d6 210
Anna Bridge 142:4eea097334d6 211 /** Select the operational mode of the counter. */
Anna Bridge 142:4eea097334d6 212 RTCC_CntMode_TypeDef cntMode;
Anna Bridge 142:4eea097334d6 213
Anna Bridge 142:4eea097334d6 214 /** Disable leap year correction for the calendar mode. When this parameter is
Anna Bridge 142:4eea097334d6 215 * set to false, February has 29 days if (year % 4 == 0). If true, February
Anna Bridge 142:4eea097334d6 216 * always has 28 days. */
Anna Bridge 142:4eea097334d6 217 bool disLeapYearCorr;
Anna Bridge 142:4eea097334d6 218 } RTCC_Init_TypeDef;
Anna Bridge 142:4eea097334d6 219
Anna Bridge 142:4eea097334d6 220 /** RTCC capture/compare channel configuration structure. */
Anna Bridge 160:5571c4ff569f 221 typedef struct {
Anna Bridge 142:4eea097334d6 222 /** Select the mode of the Capture/Compare channel. */
Anna Bridge 142:4eea097334d6 223 RTCC_CapComChMode_TypeDef chMode;
Anna Bridge 142:4eea097334d6 224
Anna Bridge 142:4eea097334d6 225 /** Compare mode channel match output action. */
Anna Bridge 142:4eea097334d6 226 RTCC_CompMatchOutAction_TypeDef compMatchOutAction;
Anna Bridge 142:4eea097334d6 227
Anna Bridge 142:4eea097334d6 228 /** Capture mode channel PRS input channel selection. */
Anna Bridge 142:4eea097334d6 229 RTCC_PRSSel_TypeDef prsSel;
Anna Bridge 142:4eea097334d6 230
Anna Bridge 142:4eea097334d6 231 /** Capture mode channel input edge selection. */
Anna Bridge 142:4eea097334d6 232 RTCC_InEdgeSel_TypeDef inputEdgeSel;
Anna Bridge 142:4eea097334d6 233
Anna Bridge 142:4eea097334d6 234 /** Comparison base of the channel in compare mode. */
Anna Bridge 142:4eea097334d6 235 RTCC_CompBase_TypeDef compBase;
Anna Bridge 142:4eea097334d6 236
Anna Bridge 142:4eea097334d6 237 /** The COMPMASK (5 bit) most significant bits of the compare value will not
Anna Bridge 142:4eea097334d6 238 * be subject to comparison. */
Anna Bridge 142:4eea097334d6 239 uint8_t compMask;
Anna Bridge 142:4eea097334d6 240
Anna Bridge 142:4eea097334d6 241 /** Day compare mode. */
Anna Bridge 142:4eea097334d6 242 RTCC_DayCompareMode_TypeDef dayCompMode;
Anna Bridge 142:4eea097334d6 243 } RTCC_CCChConf_TypeDef;
Anna Bridge 142:4eea097334d6 244
Anna Bridge 142:4eea097334d6 245 /*******************************************************************************
Anna Bridge 142:4eea097334d6 246 ******************************* DEFINES ***********************************
Anna Bridge 142:4eea097334d6 247 ******************************************************************************/
Anna Bridge 142:4eea097334d6 248
Anna Bridge 142:4eea097334d6 249 /** Default RTCC init structure. */
Anna Bridge 142:4eea097334d6 250 #if defined(_RTCC_CTRL_BUMODETSEN_MASK)
Anna Bridge 142:4eea097334d6 251 #define RTCC_INIT_DEFAULT \
Anna Bridge 160:5571c4ff569f 252 { \
Anna Bridge 160:5571c4ff569f 253 true, /* Start counting when init done. */ \
Anna Bridge 160:5571c4ff569f 254 false, /* Disable RTCC during debug halt. */ \
Anna Bridge 160:5571c4ff569f 255 false, /* Disable precounter wrap on ch. 0 CCV value. */ \
Anna Bridge 160:5571c4ff569f 256 false, /* Disable counter wrap on ch. 1 CCV value. */ \
Anna Bridge 160:5571c4ff569f 257 rtccCntPresc_32, /* 977 us per tick. */ \
Anna Bridge 160:5571c4ff569f 258 rtccCntTickPresc, /* Counter increments according to prescaler value.*/ \
Anna Bridge 160:5571c4ff569f 259 false, /* No RTCC storage on backup mode entry. */ \
Anna Bridge 160:5571c4ff569f 260 false, /* No RTCC oscillator failure detection. */ \
Anna Bridge 160:5571c4ff569f 261 rtccCntModeNormal, /* Normal RTCC mode. */ \
Anna Bridge 160:5571c4ff569f 262 false, /* No leap year correction. */ \
Anna Bridge 160:5571c4ff569f 263 }
Anna Bridge 142:4eea097334d6 264 #else
Anna Bridge 142:4eea097334d6 265 #define RTCC_INIT_DEFAULT \
Anna Bridge 160:5571c4ff569f 266 { \
Anna Bridge 160:5571c4ff569f 267 true, /* Start counting when init done. */ \
Anna Bridge 160:5571c4ff569f 268 false, /* Disable RTCC during debug halt. */ \
Anna Bridge 160:5571c4ff569f 269 false, /* Disable precounter wrap on ch. 0 CCV value. */ \
Anna Bridge 160:5571c4ff569f 270 false, /* Disable counter wrap on ch. 1 CCV value. */ \
Anna Bridge 160:5571c4ff569f 271 rtccCntPresc_32, /* 977 us per tick. */ \
Anna Bridge 160:5571c4ff569f 272 rtccCntTickPresc, /* Counter increments according to prescaler value.*/ \
Anna Bridge 160:5571c4ff569f 273 false, /* No RTCC oscillator failure detection. */ \
Anna Bridge 160:5571c4ff569f 274 rtccCntModeNormal, /* Normal RTCC mode. */ \
Anna Bridge 160:5571c4ff569f 275 false, /* No leap year correction. */ \
Anna Bridge 160:5571c4ff569f 276 }
Anna Bridge 142:4eea097334d6 277 #endif
Anna Bridge 142:4eea097334d6 278
Anna Bridge 142:4eea097334d6 279 /** Default RTCC channel output compare init structure. */
Anna Bridge 160:5571c4ff569f 280 #define RTCC_CH_INIT_COMPARE_DEFAULT \
Anna Bridge 160:5571c4ff569f 281 { \
Anna Bridge 160:5571c4ff569f 282 rtccCapComChModeCompare, /* Select output compare mode. */ \
Anna Bridge 160:5571c4ff569f 283 rtccCompMatchOutActionPulse, /* Create pulse on compare match.*/ \
Anna Bridge 160:5571c4ff569f 284 rtccPRSCh0, /* PRS channel 0 (not used). */ \
Anna Bridge 160:5571c4ff569f 285 rtccInEdgeNone, /* No edge detection. */ \
Anna Bridge 160:5571c4ff569f 286 rtccCompBaseCnt, /* Counter comparison base. */ \
Anna Bridge 160:5571c4ff569f 287 0, /* No compare mask bits set. */ \
Anna Bridge 160:5571c4ff569f 288 rtccDayCompareModeMonth /* Don't care */ \
Anna Bridge 160:5571c4ff569f 289 }
Anna Bridge 142:4eea097334d6 290
Anna Bridge 142:4eea097334d6 291 /** Default RTCC channel input capture init structure. */
Anna Bridge 160:5571c4ff569f 292 #define RTCC_CH_INIT_CAPTURE_DEFAULT \
Anna Bridge 160:5571c4ff569f 293 { \
Anna Bridge 160:5571c4ff569f 294 rtccCapComChModeCapture, /* Select input capture mode. */ \
Anna Bridge 160:5571c4ff569f 295 rtccCompMatchOutActionPulse, /* Create pulse on capture. */ \
Anna Bridge 160:5571c4ff569f 296 rtccPRSCh0, /* PRS channel 0. */ \
Anna Bridge 160:5571c4ff569f 297 rtccInEdgeRising, /* Rising edge detection. */ \
Anna Bridge 160:5571c4ff569f 298 rtccCompBaseCnt, /* Don't care. */ \
Anna Bridge 160:5571c4ff569f 299 0, /* Don't care. */ \
Anna Bridge 160:5571c4ff569f 300 rtccDayCompareModeMonth /* Don't care */ \
Anna Bridge 160:5571c4ff569f 301 }
Anna Bridge 142:4eea097334d6 302
Anna Bridge 142:4eea097334d6 303 /** Validation of valid RTCC channel for assert statements. */
Anna Bridge 160:5571c4ff569f 304 #define RTCC_CH_VALID(ch) ( (ch) < 3)
Anna Bridge 142:4eea097334d6 305
Anna Bridge 142:4eea097334d6 306 /*******************************************************************************
Anna Bridge 142:4eea097334d6 307 ***************************** PROTOTYPES **********************************
Anna Bridge 142:4eea097334d6 308 ******************************************************************************/
Anna Bridge 142:4eea097334d6 309
Anna Bridge 142:4eea097334d6 310 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 311 * @brief
Anna Bridge 142:4eea097334d6 312 * Get RTCC capture/compare register value (CCV) for selected channel.
Anna Bridge 142:4eea097334d6 313 *
Anna Bridge 142:4eea097334d6 314 * @param[in] ch
Anna Bridge 142:4eea097334d6 315 * Channel selector.
Anna Bridge 142:4eea097334d6 316 *
Anna Bridge 142:4eea097334d6 317 * @return
Anna Bridge 142:4eea097334d6 318 * Capture/compare register value.
Anna Bridge 142:4eea097334d6 319 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 320 __STATIC_INLINE uint32_t RTCC_ChannelCCVGet(int ch)
Anna Bridge 142:4eea097334d6 321 {
Anna Bridge 160:5571c4ff569f 322 EFM_ASSERT(RTCC_CH_VALID(ch) );
Anna Bridge 160:5571c4ff569f 323 return RTCC->CC[ch].CCV;
Anna Bridge 142:4eea097334d6 324 }
Anna Bridge 142:4eea097334d6 325
Anna Bridge 142:4eea097334d6 326 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 327 * @brief
Anna Bridge 142:4eea097334d6 328 * Set RTCC capture/compare register value (CCV) for selected channel.
Anna Bridge 142:4eea097334d6 329 *
Anna Bridge 142:4eea097334d6 330 * @param[in] ch
Anna Bridge 142:4eea097334d6 331 * Channel selector.
Anna Bridge 142:4eea097334d6 332 *
Anna Bridge 142:4eea097334d6 333 * @param[in] value
Anna Bridge 142:4eea097334d6 334 * CCV value.
Anna Bridge 142:4eea097334d6 335 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 336 __STATIC_INLINE void RTCC_ChannelCCVSet(int ch, uint32_t value)
Anna Bridge 142:4eea097334d6 337 {
Anna Bridge 160:5571c4ff569f 338 EFM_ASSERT(RTCC_CH_VALID(ch) );
Anna Bridge 160:5571c4ff569f 339 RTCC->CC[ch].CCV = value;
Anna Bridge 142:4eea097334d6 340 }
Anna Bridge 142:4eea097334d6 341
Anna Bridge 142:4eea097334d6 342 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 343 * @brief
Anna Bridge 142:4eea097334d6 344 * Get the calendar DATE register content for selected channel.
Anna Bridge 142:4eea097334d6 345 *
Anna Bridge 142:4eea097334d6 346 * @param[in] ch
Anna Bridge 142:4eea097334d6 347 * Channel selector.
Anna Bridge 142:4eea097334d6 348 *
Anna Bridge 142:4eea097334d6 349 * @return
Anna Bridge 142:4eea097334d6 350 * DATE register value.
Anna Bridge 142:4eea097334d6 351 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 352 __STATIC_INLINE uint32_t RTCC_ChannelDateGet(int ch)
Anna Bridge 142:4eea097334d6 353 {
Anna Bridge 160:5571c4ff569f 354 EFM_ASSERT(RTCC_CH_VALID(ch) );
Anna Bridge 160:5571c4ff569f 355 return RTCC->CC[ch].DATE;
Anna Bridge 142:4eea097334d6 356 }
Anna Bridge 142:4eea097334d6 357
Anna Bridge 142:4eea097334d6 358 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 359 * @brief
Anna Bridge 142:4eea097334d6 360 * Set the calendar DATE register for selected channel.
Anna Bridge 142:4eea097334d6 361 *
Anna Bridge 142:4eea097334d6 362 * @param[in] ch
Anna Bridge 142:4eea097334d6 363 * Channel selector.
Anna Bridge 142:4eea097334d6 364 *
Anna Bridge 142:4eea097334d6 365 * @param[in] date
Anna Bridge 142:4eea097334d6 366 * DATE value.
Anna Bridge 142:4eea097334d6 367 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 368 __STATIC_INLINE void RTCC_ChannelDateSet(int ch, uint32_t date)
Anna Bridge 142:4eea097334d6 369 {
Anna Bridge 160:5571c4ff569f 370 EFM_ASSERT(RTCC_CH_VALID(ch) );
Anna Bridge 160:5571c4ff569f 371 RTCC->CC[ch].DATE = date;
Anna Bridge 142:4eea097334d6 372 }
Anna Bridge 142:4eea097334d6 373
Anna Bridge 160:5571c4ff569f 374 void RTCC_ChannelInit(int ch, RTCC_CCChConf_TypeDef const *confPtr);
Anna Bridge 142:4eea097334d6 375
Anna Bridge 142:4eea097334d6 376 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 377 * @brief
Anna Bridge 142:4eea097334d6 378 * Get the calendar TIME register content for selected channel.
Anna Bridge 142:4eea097334d6 379 *
Anna Bridge 142:4eea097334d6 380 * @param[in] ch
Anna Bridge 142:4eea097334d6 381 * Channel selector.
Anna Bridge 142:4eea097334d6 382 *
Anna Bridge 142:4eea097334d6 383 * @return
Anna Bridge 142:4eea097334d6 384 * TIME register value.
Anna Bridge 142:4eea097334d6 385 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 386 __STATIC_INLINE uint32_t RTCC_ChannelTimeGet(int ch)
Anna Bridge 142:4eea097334d6 387 {
Anna Bridge 160:5571c4ff569f 388 EFM_ASSERT(RTCC_CH_VALID(ch) );
Anna Bridge 160:5571c4ff569f 389 return RTCC->CC[ch].TIME;
Anna Bridge 142:4eea097334d6 390 }
Anna Bridge 142:4eea097334d6 391
Anna Bridge 142:4eea097334d6 392 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 393 * @brief
Anna Bridge 142:4eea097334d6 394 * Set the calendar TIME register for selected channel.
Anna Bridge 142:4eea097334d6 395 *
Anna Bridge 142:4eea097334d6 396 * @param[in] ch
Anna Bridge 142:4eea097334d6 397 * Channel selector.
Anna Bridge 142:4eea097334d6 398 *
Anna Bridge 142:4eea097334d6 399 * @param[in] time
Anna Bridge 142:4eea097334d6 400 * TIME value.
Anna Bridge 142:4eea097334d6 401 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 402 __STATIC_INLINE void RTCC_ChannelTimeSet(int ch, uint32_t time)
Anna Bridge 142:4eea097334d6 403 {
Anna Bridge 160:5571c4ff569f 404 EFM_ASSERT(RTCC_CH_VALID(ch) );
Anna Bridge 160:5571c4ff569f 405 RTCC->CC[ch].TIME = time;
Anna Bridge 142:4eea097334d6 406 }
Anna Bridge 142:4eea097334d6 407
Anna Bridge 142:4eea097334d6 408 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 409 * @brief
Anna Bridge 142:4eea097334d6 410 * Get the combined CNT/PRECNT register content.
Anna Bridge 142:4eea097334d6 411 *
Anna Bridge 142:4eea097334d6 412 * @return
Anna Bridge 142:4eea097334d6 413 * CNT/PRECNT register value.
Anna Bridge 142:4eea097334d6 414 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 415 __STATIC_INLINE uint32_t RTCC_CombinedCounterGet(void)
Anna Bridge 142:4eea097334d6 416 {
Anna Bridge 142:4eea097334d6 417 return RTCC->COMBCNT;
Anna Bridge 142:4eea097334d6 418 }
Anna Bridge 142:4eea097334d6 419
Anna Bridge 142:4eea097334d6 420 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 421 * @brief
Anna Bridge 142:4eea097334d6 422 * Get RTCC counter value.
Anna Bridge 142:4eea097334d6 423 *
Anna Bridge 142:4eea097334d6 424 * @return
Anna Bridge 142:4eea097334d6 425 * Current RTCC counter value.
Anna Bridge 142:4eea097334d6 426 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 427 __STATIC_INLINE uint32_t RTCC_CounterGet(void)
Anna Bridge 142:4eea097334d6 428 {
Anna Bridge 142:4eea097334d6 429 return RTCC->CNT;
Anna Bridge 142:4eea097334d6 430 }
Anna Bridge 142:4eea097334d6 431
Anna Bridge 142:4eea097334d6 432 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 433 * @brief
Anna Bridge 142:4eea097334d6 434 * Set RTCC CNT counter.
Anna Bridge 142:4eea097334d6 435 *
Anna Bridge 142:4eea097334d6 436 * @param[in] value
Anna Bridge 142:4eea097334d6 437 * CNT value.
Anna Bridge 142:4eea097334d6 438 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 439 __STATIC_INLINE void RTCC_CounterSet(uint32_t value)
Anna Bridge 142:4eea097334d6 440 {
Anna Bridge 142:4eea097334d6 441 RTCC->CNT = value;
Anna Bridge 142:4eea097334d6 442 }
Anna Bridge 142:4eea097334d6 443
Anna Bridge 142:4eea097334d6 444 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 445 * @brief
Anna Bridge 142:4eea097334d6 446 * Get DATE register value.
Anna Bridge 142:4eea097334d6 447 *
Anna Bridge 142:4eea097334d6 448 * @return
Anna Bridge 142:4eea097334d6 449 * Current DATE register value.
Anna Bridge 142:4eea097334d6 450 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 451 __STATIC_INLINE uint32_t RTCC_DateGet(void)
Anna Bridge 142:4eea097334d6 452 {
Anna Bridge 142:4eea097334d6 453 return RTCC->DATE;
Anna Bridge 142:4eea097334d6 454 }
Anna Bridge 142:4eea097334d6 455
Anna Bridge 142:4eea097334d6 456 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 457 * @brief
Anna Bridge 142:4eea097334d6 458 * Set RTCC DATE register.
Anna Bridge 142:4eea097334d6 459 *
Anna Bridge 142:4eea097334d6 460 * @param[in] date
Anna Bridge 142:4eea097334d6 461 * DATE value.
Anna Bridge 142:4eea097334d6 462 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 463 __STATIC_INLINE void RTCC_DateSet(uint32_t date)
Anna Bridge 142:4eea097334d6 464 {
Anna Bridge 142:4eea097334d6 465 RTCC->DATE = date;
Anna Bridge 142:4eea097334d6 466 }
Anna Bridge 142:4eea097334d6 467
Anna Bridge 142:4eea097334d6 468 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 469 * @brief
Anna Bridge 142:4eea097334d6 470 * Enable/disable EM4 wakeup capability.
Anna Bridge 142:4eea097334d6 471 *
Anna Bridge 142:4eea097334d6 472 * @param[in] enable
Anna Bridge 142:4eea097334d6 473 * True to enable EM4 wakeup, false to disable.
Anna Bridge 142:4eea097334d6 474 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 475 __STATIC_INLINE void RTCC_EM4WakeupEnable(bool enable)
Anna Bridge 142:4eea097334d6 476 {
Anna Bridge 160:5571c4ff569f 477 if ( enable ) {
Anna Bridge 142:4eea097334d6 478 RTCC->EM4WUEN = RTCC_EM4WUEN_EM4WU;
Anna Bridge 160:5571c4ff569f 479 } else {
Anna Bridge 142:4eea097334d6 480 RTCC->EM4WUEN = 0;
Anna Bridge 142:4eea097334d6 481 }
Anna Bridge 142:4eea097334d6 482 }
Anna Bridge 142:4eea097334d6 483
Anna Bridge 160:5571c4ff569f 484 void RTCC_Enable(bool enable);
Anna Bridge 142:4eea097334d6 485
Anna Bridge 160:5571c4ff569f 486 void RTCC_Init(const RTCC_Init_TypeDef *init);
Anna Bridge 142:4eea097334d6 487
Anna Bridge 142:4eea097334d6 488 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 489 * @brief
Anna Bridge 142:4eea097334d6 490 * Clear one or more pending RTCC interrupts.
Anna Bridge 142:4eea097334d6 491 *
Anna Bridge 142:4eea097334d6 492 * @param[in] flags
Anna Bridge 142:4eea097334d6 493 * RTCC interrupt sources to clear. Use a set of interrupt flags OR-ed
Anna Bridge 142:4eea097334d6 494 * together to clear multiple interrupt sources.
Anna Bridge 142:4eea097334d6 495 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 496 __STATIC_INLINE void RTCC_IntClear(uint32_t flags)
Anna Bridge 142:4eea097334d6 497 {
Anna Bridge 142:4eea097334d6 498 RTCC->IFC = flags;
Anna Bridge 142:4eea097334d6 499 }
Anna Bridge 142:4eea097334d6 500
Anna Bridge 142:4eea097334d6 501 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 502 * @brief
Anna Bridge 142:4eea097334d6 503 * Disable one or more RTCC interrupts.
Anna Bridge 142:4eea097334d6 504 *
Anna Bridge 142:4eea097334d6 505 * @param[in] flags
Anna Bridge 142:4eea097334d6 506 * RTCC interrupt sources to disable. Use a set of interrupt flags OR-ed
Anna Bridge 142:4eea097334d6 507 * together to disable multiple interrupt.
Anna Bridge 142:4eea097334d6 508 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 509 __STATIC_INLINE void RTCC_IntDisable(uint32_t flags)
Anna Bridge 142:4eea097334d6 510 {
Anna Bridge 142:4eea097334d6 511 RTCC->IEN &= ~flags;
Anna Bridge 142:4eea097334d6 512 }
Anna Bridge 142:4eea097334d6 513
Anna Bridge 142:4eea097334d6 514 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 515 * @brief
Anna Bridge 142:4eea097334d6 516 * Enable one or more RTCC interrupts.
Anna Bridge 142:4eea097334d6 517 *
Anna Bridge 142:4eea097334d6 518 * @note
Anna Bridge 142:4eea097334d6 519 * Depending on the use, a pending interrupt may already be set prior to
Anna Bridge 142:4eea097334d6 520 * enabling the interrupt. Consider using RTCC_IntClear() prior to enabling
Anna Bridge 142:4eea097334d6 521 * if such a pending interrupt should be ignored.
Anna Bridge 142:4eea097334d6 522 *
Anna Bridge 142:4eea097334d6 523 * @param[in] flags
Anna Bridge 142:4eea097334d6 524 * RTCC interrupt sources to enable. Use a set of interrupt flags OR-ed
Anna Bridge 142:4eea097334d6 525 * together to set multiple interrupt.
Anna Bridge 142:4eea097334d6 526 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 527 __STATIC_INLINE void RTCC_IntEnable(uint32_t flags)
Anna Bridge 142:4eea097334d6 528 {
Anna Bridge 142:4eea097334d6 529 RTCC->IEN |= flags;
Anna Bridge 142:4eea097334d6 530 }
Anna Bridge 142:4eea097334d6 531
Anna Bridge 142:4eea097334d6 532 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 533 * @brief
Anna Bridge 142:4eea097334d6 534 * Get pending RTCC interrupt flags.
Anna Bridge 142:4eea097334d6 535 *
Anna Bridge 142:4eea097334d6 536 * @note
Anna Bridge 142:4eea097334d6 537 * The event bits are not cleared by the use of this function.
Anna Bridge 142:4eea097334d6 538 *
Anna Bridge 142:4eea097334d6 539 * @return
Anna Bridge 142:4eea097334d6 540 * Pending RTCC interrupt sources. Returns a set of interrupt flags OR-ed
Anna Bridge 142:4eea097334d6 541 * together for the interrupt sources set.
Anna Bridge 142:4eea097334d6 542 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 543 __STATIC_INLINE uint32_t RTCC_IntGet(void)
Anna Bridge 142:4eea097334d6 544 {
Anna Bridge 142:4eea097334d6 545 return RTCC->IF;
Anna Bridge 142:4eea097334d6 546 }
Anna Bridge 142:4eea097334d6 547
Anna Bridge 142:4eea097334d6 548 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 549 * @brief
Anna Bridge 142:4eea097334d6 550 * Get enabled and pending RTCC interrupt flags.
Anna Bridge 142:4eea097334d6 551 *
Anna Bridge 142:4eea097334d6 552 * @details
Anna Bridge 142:4eea097334d6 553 * Useful for handling more interrupt sources in the same interrupt handler.
Anna Bridge 142:4eea097334d6 554 *
Anna Bridge 142:4eea097334d6 555 * @return
Anna Bridge 142:4eea097334d6 556 * Pending and enabled RTCC interrupt sources. Returns a set of interrupt
Anna Bridge 142:4eea097334d6 557 * flags OR-ed together for the interrupt sources set.
Anna Bridge 142:4eea097334d6 558 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 559 __STATIC_INLINE uint32_t RTCC_IntGetEnabled(void)
Anna Bridge 142:4eea097334d6 560 {
Anna Bridge 142:4eea097334d6 561 uint32_t tmp;
Anna Bridge 142:4eea097334d6 562
Anna Bridge 142:4eea097334d6 563 tmp = RTCC->IEN;
Anna Bridge 142:4eea097334d6 564
Anna Bridge 142:4eea097334d6 565 /* Bitwise AND of pending and enabled interrupt flags. */
Anna Bridge 142:4eea097334d6 566 return RTCC->IF & tmp;
Anna Bridge 142:4eea097334d6 567 }
Anna Bridge 142:4eea097334d6 568
Anna Bridge 142:4eea097334d6 569 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 570 * @brief
Anna Bridge 142:4eea097334d6 571 * Set one or more pending RTCC interrupts from SW.
Anna Bridge 142:4eea097334d6 572 *
Anna Bridge 142:4eea097334d6 573 * @param[in] flags
Anna Bridge 142:4eea097334d6 574 * RTCC interrupt sources to set to pending. Use a set of interrupt flags
Anna Bridge 142:4eea097334d6 575 * (RTCC_IFS_nnn).
Anna Bridge 142:4eea097334d6 576 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 577 __STATIC_INLINE void RTCC_IntSet(uint32_t flags)
Anna Bridge 142:4eea097334d6 578 {
Anna Bridge 142:4eea097334d6 579 RTCC->IFS = flags;
Anna Bridge 142:4eea097334d6 580 }
Anna Bridge 142:4eea097334d6 581
Anna Bridge 142:4eea097334d6 582 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 583 * @brief
Anna Bridge 142:4eea097334d6 584 * Lock RTCC registers.
Anna Bridge 142:4eea097334d6 585 *
Anna Bridge 142:4eea097334d6 586 * @note
Anna Bridge 142:4eea097334d6 587 * When RTCC registers are locked, RTCC_CTRL, RTCC_PRECNT, RTCC_CNT,
Anna Bridge 142:4eea097334d6 588 * RTCC_TIME, RTCC_DATE, RTCC_IEN, RTCC_POWERDOWN and RTCC_CCx_XXX registers
Anna Bridge 142:4eea097334d6 589 * can not be written to.
Anna Bridge 142:4eea097334d6 590 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 591 __STATIC_INLINE void RTCC_Lock(void)
Anna Bridge 142:4eea097334d6 592 {
Anna Bridge 142:4eea097334d6 593 #if defined(ERRATA_FIX_RTCC_E203)
Anna Bridge 142:4eea097334d6 594 /* RTCC_E203 - Potential Stability Issue with RTCC Registers
Anna Bridge 142:4eea097334d6 595 * RTCC_LOCK register must be modified while RTCC clock is disabled. */
Anna Bridge 142:4eea097334d6 596 uint32_t lfeReg = CMU->LFECLKEN0;
Anna Bridge 142:4eea097334d6 597 bool cmuLocked = (CMU->LOCK == CMU_LOCK_LOCKKEY_LOCKED);
Anna Bridge 160:5571c4ff569f 598 if (cmuLocked) {
Anna Bridge 142:4eea097334d6 599 CMU->LOCK = CMU_LOCK_LOCKKEY_UNLOCK;
Anna Bridge 142:4eea097334d6 600 }
Anna Bridge 142:4eea097334d6 601 CMU->LFECLKEN0 = 0x0;
Anna Bridge 142:4eea097334d6 602 #endif
Anna Bridge 142:4eea097334d6 603 RTCC->LOCK = RTCC_LOCK_LOCKKEY_LOCK;
Anna Bridge 142:4eea097334d6 604 #if defined(ERRATA_FIX_RTCC_E203)
Anna Bridge 142:4eea097334d6 605 /* Restore clock state after RTCC_E203 fix. */
Anna Bridge 142:4eea097334d6 606 CMU->LFECLKEN0 = lfeReg;
Anna Bridge 160:5571c4ff569f 607 if (cmuLocked) {
Anna Bridge 142:4eea097334d6 608 CMU->LOCK = CMU_LOCK_LOCKKEY_LOCK;
Anna Bridge 142:4eea097334d6 609 }
Anna Bridge 142:4eea097334d6 610 #endif
Anna Bridge 142:4eea097334d6 611 }
Anna Bridge 142:4eea097334d6 612
Anna Bridge 142:4eea097334d6 613 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 614 * @brief
Anna Bridge 142:4eea097334d6 615 * Get RTCC pre-counter value.
Anna Bridge 142:4eea097334d6 616 *
Anna Bridge 142:4eea097334d6 617 * @return
Anna Bridge 142:4eea097334d6 618 * Current RTCC pre-counter value.
Anna Bridge 142:4eea097334d6 619 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 620 __STATIC_INLINE uint32_t RTCC_PreCounterGet(void)
Anna Bridge 142:4eea097334d6 621 {
Anna Bridge 142:4eea097334d6 622 return RTCC->PRECNT;
Anna Bridge 142:4eea097334d6 623 }
Anna Bridge 142:4eea097334d6 624
Anna Bridge 142:4eea097334d6 625 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 626 * @brief
Anna Bridge 142:4eea097334d6 627 * Set RTCC pre-counter value.
Anna Bridge 142:4eea097334d6 628 *
Anna Bridge 142:4eea097334d6 629 * @param[in] preCntVal
Anna Bridge 142:4eea097334d6 630 * RTCC pre-counter value to be set.
Anna Bridge 142:4eea097334d6 631 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 632 __STATIC_INLINE void RTCC_PreCounterSet(uint32_t preCntVal)
Anna Bridge 142:4eea097334d6 633 {
Anna Bridge 142:4eea097334d6 634 RTCC->PRECNT = preCntVal;
Anna Bridge 142:4eea097334d6 635 }
Anna Bridge 142:4eea097334d6 636
Anna Bridge 160:5571c4ff569f 637 void RTCC_Reset(void);
Anna Bridge 142:4eea097334d6 638
Anna Bridge 142:4eea097334d6 639 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 640 * @brief
Anna Bridge 142:4eea097334d6 641 * Power down the retention ram.
Anna Bridge 142:4eea097334d6 642 *
Anna Bridge 142:4eea097334d6 643 * @note
Anna Bridge 142:4eea097334d6 644 * Once retention ram is powered down, it cannot be powered up again.
Anna Bridge 142:4eea097334d6 645 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 646 __STATIC_INLINE void RTCC_RetentionRamPowerDown(void)
Anna Bridge 142:4eea097334d6 647 {
Anna Bridge 142:4eea097334d6 648 #if !defined(ERRATA_FIX_RTCC_E204)
Anna Bridge 142:4eea097334d6 649 /* Devices that are affected by RTCC_E204 should always keep the RTCC
Anna Bridge 142:4eea097334d6 650 * backup RAM retained. */
Anna Bridge 142:4eea097334d6 651 RTCC->POWERDOWN = RTCC_POWERDOWN_RAM;
Anna Bridge 142:4eea097334d6 652 #endif
Anna Bridge 142:4eea097334d6 653 }
Anna Bridge 142:4eea097334d6 654
Anna Bridge 160:5571c4ff569f 655 void RTCC_StatusClear(void);
Anna Bridge 142:4eea097334d6 656
Anna Bridge 142:4eea097334d6 657 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 658 * @brief
Anna Bridge 142:4eea097334d6 659 * Get STATUS register value.
Anna Bridge 142:4eea097334d6 660 *
Anna Bridge 142:4eea097334d6 661 * @return
Anna Bridge 142:4eea097334d6 662 * Current STATUS register value.
Anna Bridge 142:4eea097334d6 663 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 664 __STATIC_INLINE uint32_t RTCC_StatusGet(void)
Anna Bridge 142:4eea097334d6 665 {
Anna Bridge 160:5571c4ff569f 666 while ( RTCC->SYNCBUSY & RTCC_SYNCBUSY_CMD ) {
Anna Bridge 142:4eea097334d6 667 // Wait for syncronization.
Anna Bridge 142:4eea097334d6 668 }
Anna Bridge 142:4eea097334d6 669 return RTCC->STATUS;
Anna Bridge 142:4eea097334d6 670 }
Anna Bridge 142:4eea097334d6 671
Anna Bridge 142:4eea097334d6 672 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 673 * @brief
Anna Bridge 142:4eea097334d6 674 * Get TIME register value.
Anna Bridge 142:4eea097334d6 675 *
Anna Bridge 142:4eea097334d6 676 * @return
Anna Bridge 142:4eea097334d6 677 * Current TIME register value.
Anna Bridge 142:4eea097334d6 678 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 679 __STATIC_INLINE uint32_t RTCC_TimeGet(void)
Anna Bridge 142:4eea097334d6 680 {
Anna Bridge 142:4eea097334d6 681 return RTCC->TIME;
Anna Bridge 142:4eea097334d6 682 }
Anna Bridge 142:4eea097334d6 683
Anna Bridge 142:4eea097334d6 684 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 685 * @brief
Anna Bridge 142:4eea097334d6 686 * Set RTCC TIME register.
Anna Bridge 142:4eea097334d6 687 *
Anna Bridge 142:4eea097334d6 688 * @param[in] time
Anna Bridge 142:4eea097334d6 689 * TIME value.
Anna Bridge 142:4eea097334d6 690 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 691 __STATIC_INLINE void RTCC_TimeSet(uint32_t time)
Anna Bridge 142:4eea097334d6 692 {
Anna Bridge 142:4eea097334d6 693 RTCC->TIME = time;
Anna Bridge 142:4eea097334d6 694 }
Anna Bridge 142:4eea097334d6 695
Anna Bridge 142:4eea097334d6 696 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 697 * @brief
Anna Bridge 142:4eea097334d6 698 * Unlock RTCC registers.
Anna Bridge 142:4eea097334d6 699 *
Anna Bridge 142:4eea097334d6 700 * @note
Anna Bridge 142:4eea097334d6 701 * When RTCC registers are locked, RTCC_CTRL, RTCC_PRECNT, RTCC_CNT,
Anna Bridge 142:4eea097334d6 702 * RTCC_TIME, RTCC_DATE, RTCC_IEN, RTCC_POWERDOWN and RTCC_CCx_XXX registers
Anna Bridge 142:4eea097334d6 703 * can not be written to.
Anna Bridge 142:4eea097334d6 704 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 705 __STATIC_INLINE void RTCC_Unlock(void)
Anna Bridge 142:4eea097334d6 706 {
Anna Bridge 142:4eea097334d6 707 #if defined(ERRATA_FIX_RTCC_E203)
Anna Bridge 142:4eea097334d6 708 /* RTCC_E203 - Potential Stability Issue with RTCC Registers
Anna Bridge 142:4eea097334d6 709 * RTCC_LOCK register must be modified while RTCC clock is disabled. */
Anna Bridge 142:4eea097334d6 710 uint32_t lfeReg = CMU->LFECLKEN0;
Anna Bridge 142:4eea097334d6 711 bool cmuLocked = (CMU->LOCK == CMU_LOCK_LOCKKEY_LOCKED);
Anna Bridge 160:5571c4ff569f 712 if (cmuLocked) {
Anna Bridge 142:4eea097334d6 713 CMU->LOCK = CMU_LOCK_LOCKKEY_UNLOCK;
Anna Bridge 142:4eea097334d6 714 }
Anna Bridge 142:4eea097334d6 715 CMU->LFECLKEN0 = 0x0;
Anna Bridge 142:4eea097334d6 716 #endif
Anna Bridge 142:4eea097334d6 717 RTCC->LOCK = RTCC_LOCK_LOCKKEY_UNLOCK;
Anna Bridge 142:4eea097334d6 718 #if defined(ERRATA_FIX_RTCC_E203)
Anna Bridge 142:4eea097334d6 719 /* Restore clock state after RTCC_E203 fix. */
Anna Bridge 142:4eea097334d6 720 CMU->LFECLKEN0 = lfeReg;
Anna Bridge 160:5571c4ff569f 721 if (cmuLocked) {
Anna Bridge 142:4eea097334d6 722 CMU->LOCK = CMU_LOCK_LOCKKEY_LOCK;
Anna Bridge 142:4eea097334d6 723 }
Anna Bridge 142:4eea097334d6 724 #endif
Anna Bridge 142:4eea097334d6 725 }
Anna Bridge 142:4eea097334d6 726
Anna Bridge 142:4eea097334d6 727 /** @} (end addtogroup RTCC) */
Anna Bridge 142:4eea097334d6 728 /** @} (end addtogroup emlib) */
Anna Bridge 142:4eea097334d6 729
Anna Bridge 142:4eea097334d6 730 #ifdef __cplusplus
Anna Bridge 142:4eea097334d6 731 }
Anna Bridge 142:4eea097334d6 732 #endif
Anna Bridge 142:4eea097334d6 733
Anna Bridge 142:4eea097334d6 734 #endif /* defined( RTCC_COUNT ) && ( RTC_COUNT == 1 ) */
Anna Bridge 142:4eea097334d6 735 #endif /* EM_RTCC_H */