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.

Revision:
171:3a7713b1edbc
Parent:
160:5571c4ff569f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TARGET_TB_SENSE_1/TOOLCHAIN_IAR/em_burtc.h	Thu Nov 08 11:45:42 2018 +0000
@@ -0,0 +1,393 @@
+/***************************************************************************//**
+ * @file em_burtc.h
+ * @brief Backup Real Time Counter (BURTC) peripheral API
+ * @version 5.3.3
+ *******************************************************************************
+ * # License
+ * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ *
+ * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
+ * obligation to support this Software. Silicon Labs is providing the
+ * Software "AS IS", with no express or implied warranties of any kind,
+ * including, but not limited to, any implied warranties of merchantability
+ * or fitness for any particular purpose or warranties against infringement
+ * of any proprietary rights of a third party.
+ *
+ * Silicon Labs will not be liable for any consequential, incidental, or
+ * special damages, or any other relief, or for any claim by any third party,
+ * arising from your use of this Software.
+ *
+ ******************************************************************************/
+
+#ifndef EM_BURTC_H
+#define EM_BURTC_H
+
+#include "em_device.h"
+#if defined(BURTC_PRESENT)
+
+#include <stdbool.h>
+#include "em_assert.h"
+#include "em_bus.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************//**
+ * @addtogroup emlib
+ * @{
+ ******************************************************************************/
+
+/***************************************************************************//**
+ * @addtogroup BURTC
+ * @{
+ ******************************************************************************/
+
+/*******************************************************************************
+ *******************************   DEFINES   ***********************************
+ ******************************************************************************/
+
+/** BURTC clock divisors. These values are valid for the BURTC prescaler. */
+#define burtcClkDiv_1      1     /**< Divide clock by 1. */
+#define burtcClkDiv_2      2     /**< Divide clock by 2. */
+#define burtcClkDiv_4      4     /**< Divide clock by 4. */
+#define burtcClkDiv_8      8     /**< Divide clock by 8. */
+#define burtcClkDiv_16     16    /**< Divide clock by 16. */
+#define burtcClkDiv_32     32    /**< Divide clock by 32. */
+#define burtcClkDiv_64     64    /**< Divide clock by 64. */
+#define burtcClkDiv_128    128   /**< Divide clock by 128. */
+
+/*******************************************************************************
+ ********************************   ENUMS   ************************************
+ ******************************************************************************/
+
+/** BURTC clock selection */
+typedef enum {
+  /** Ultra low frequency (1 kHz) clock */
+  burtcClkSelULFRCO = BURTC_CTRL_CLKSEL_ULFRCO,
+  /** Low frequency RC oscillator */
+  burtcClkSelLFRCO  = BURTC_CTRL_CLKSEL_LFRCO,
+  /** Low frequency crystal osciallator */
+  burtcClkSelLFXO   = BURTC_CTRL_CLKSEL_LFXO
+} BURTC_ClkSel_TypeDef;
+
+/** BURTC mode of operation */
+typedef enum {
+  /** Disable BURTC */
+  burtcModeDisable = BURTC_CTRL_MODE_DISABLE,
+  /** Enable and start BURTC counter in EM0 to EM2 */
+  burtcModeEM2     = BURTC_CTRL_MODE_EM2EN,
+  /** Enable and start BURTC counter in EM0 to EM3 */
+  burtcModeEM3     = BURTC_CTRL_MODE_EM3EN,
+  /** Enable and start BURTC counter in EM0 to EM4 */
+  burtcModeEM4     = BURTC_CTRL_MODE_EM4EN,
+} BURTC_Mode_TypeDef;
+
+/** BURTC low power mode */
+typedef enum {
+  /** Low Power Mode is disabled */
+  burtcLPDisable = BURTC_LPMODE_LPMODE_DISABLE,
+  /** Low Power Mode is always enabled */
+  burtcLPEnable  = BURTC_LPMODE_LPMODE_ENABLE,
+  /** Low Power Mode when system enters backup mode */
+  burtcLPBU      = BURTC_LPMODE_LPMODE_BUEN
+} BURTC_LP_TypeDef;
+
+/*******************************************************************************
+ *******************************   STRUCTS   ***********************************
+ ******************************************************************************/
+
+/** BURTC initialization structure. */
+typedef struct {
+  bool                 enable;       /**< Enable BURTC after initialization (starts counter) */
+
+  BURTC_Mode_TypeDef   mode;         /**< Configure energy mode operation */
+  bool                 debugRun;     /**< If true, counter will keep running under debug halt */
+  BURTC_ClkSel_TypeDef clkSel;       /**< Select clock source */
+  uint32_t             clkDiv;       /**< Clock divider; for ULFRCO 1Khz or 2kHz operation */
+
+  uint32_t             lowPowerComp; /**< Number of least significantt clock bits to ignore in low power mode */
+  bool                 timeStamp;    /**< Enable time stamp on entering backup power domain */
+
+  bool                 compare0Top;  /**< Set if Compare Value 0 is also top value (counter restart) */
+
+  BURTC_LP_TypeDef     lowPowerMode; /**< Low power operation mode, requires LFXO or LFRCO */
+} BURTC_Init_TypeDef;
+
+/** Default configuration for BURTC init structure */
+#define BURTC_INIT_DEFAULT \
+  {                        \
+    true,                  \
+    burtcModeEM2,          \
+    false,                 \
+    burtcClkSelULFRCO,     \
+    burtcClkDiv_1,         \
+    0,                     \
+    true,                  \
+    false,                 \
+    burtcLPDisable,        \
+  }
+
+/*******************************************************************************
+ *****************************   PROTOTYPES   **********************************
+ ******************************************************************************/
+
+/***************************************************************************//**
+ * @brief
+ *   Clear one or more pending BURTC interrupts.
+ *
+ * @param[in] flags
+ *   BURTC interrupt sources to clear. Use a set of interrupt flags OR-ed
+ *   together to clear multiple interrupt sources for the BURTC module
+ *   (BURTC_IFS_nnn).
+ ******************************************************************************/
+__STATIC_INLINE void BURTC_IntClear(uint32_t flags)
+{
+  BURTC->IFC = flags;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Disable one or more BURTC interrupts.
+ *
+ * @param[in] flags
+ *   BURTC interrupt sources to disable. Use a set of interrupt flags OR-ed
+ *   together to disable multiple interrupt sources for the BURTC module
+ *   (BURTC_IFS_nnn).
+ ******************************************************************************/
+__STATIC_INLINE void BURTC_IntDisable(uint32_t flags)
+{
+  BURTC->IEN &= ~(flags);
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Enable one or more BURTC interrupts.
+ *
+ * @note
+ *   Depending on the use, a pending interrupt may already be set prior to
+ *   enabling the interrupt. Consider using BURTC_IntClear() prior to enabling
+ *   if such a pending interrupt should be ignored.
+ *
+ * @param[in] flags
+ *   BURTC interrupt sources to enable. Use a set of interrupt flags OR-ed
+ *   together to set multiple interrupt sources for the BURTC module
+ *   (BURTC_IFS_nnn).
+ ******************************************************************************/
+__STATIC_INLINE void BURTC_IntEnable(uint32_t flags)
+{
+  BURTC->IEN |= flags;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Get pending BURTC interrupt flags.
+ *
+ * @note
+ *   The event bits are not cleared by the use of this function.
+ *
+ * @return
+ *   Pending BURTC interrupt sources. Returns a set of interrupt flags OR-ed
+ *   together for multiple interrupt sources in the BURTC module (BURTC_IFS_nnn).
+ ******************************************************************************/
+__STATIC_INLINE uint32_t BURTC_IntGet(void)
+{
+  return(BURTC->IF);
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Get enabled and pending BURTC interrupt flags.
+ *
+ * @note
+ *   The event bits are not cleared by the use of this function.
+ *
+ * @return
+ *   Pending BURTC interrupt sources that is also enabled. Returns a set of
+ *   interrupt flags OR-ed together for multiple interrupt sources in the
+ *   BURTC module (BURTC_IFS_nnn).
+ ******************************************************************************/
+__STATIC_INLINE uint32_t BURTC_IntGetEnabled(void)
+{
+  uint32_t tmp;
+
+  /* Get enabled interrupts */
+  tmp = BURTC->IEN;
+
+  /* Return set intterupts */
+  return BURTC->IF & tmp;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Set one or more pending BURTC interrupts from SW.
+ *
+ * @param[in] flags
+ *   BURTC interrupt sources to set to pending. Use a set of interrupt flags
+ *   OR-ed together to set multiple interrupt sources for the BURTC module
+ *   (BURTC_IFS_nnn).
+ ******************************************************************************/
+__STATIC_INLINE void BURTC_IntSet(uint32_t flags)
+{
+  BURTC->IFS = flags;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Status of BURTC RAM, timestamp and LP Mode
+ *
+ * @return A mask logially OR-ed status bits
+ ******************************************************************************/
+__STATIC_INLINE uint32_t BURTC_Status(void)
+{
+  return BURTC->STATUS;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Clear and reset BURTC status register
+ ******************************************************************************/
+__STATIC_INLINE void BURTC_StatusClear(void)
+{
+  BURTC->CMD = BURTC_CMD_CLRSTATUS;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Enable or Disable BURTC peripheral reset and start counter
+ * @param[in] enable
+ *   If true; asserts reset to BURTC, halts counter, if false; deassert reset
+ ******************************************************************************/
+__STATIC_INLINE void BURTC_Enable(bool enable)
+{
+  /* Note! If mode is disabled, BURTC counter will not start */
+  EFM_ASSERT(((enable == true)
+              && ((BURTC->CTRL & _BURTC_CTRL_MODE_MASK)
+                  != BURTC_CTRL_MODE_DISABLE))
+             || (enable == false));
+  if (enable) {
+    BUS_RegBitWrite(&BURTC->CTRL, _BURTC_CTRL_RSTEN_SHIFT, 0);
+  } else {
+    BUS_RegBitWrite(&BURTC->CTRL, _BURTC_CTRL_RSTEN_SHIFT, 1);
+  }
+}
+
+/***************************************************************************//**
+ * @brief Get BURTC counter
+ *
+ * @return
+ *   BURTC counter value
+ ******************************************************************************/
+__STATIC_INLINE uint32_t BURTC_CounterGet(void)
+{
+  return BURTC->CNT;
+}
+
+/***************************************************************************//**
+ * @brief Get BURTC timestamp for entering BU
+ *
+ * @return
+ *   BURTC Time Stamp value
+ ******************************************************************************/
+__STATIC_INLINE uint32_t BURTC_TimestampGet(void)
+{
+  return BURTC->TIMESTAMP;
+}
+
+/***************************************************************************//**
+ * @brief Freeze register updates until enabled
+ * @param[in] enable If true, registers are not updated until enabled again.
+ ******************************************************************************/
+__STATIC_INLINE void BURTC_FreezeEnable(bool enable)
+{
+  BUS_RegBitWrite(&BURTC->FREEZE, _BURTC_FREEZE_REGFREEZE_SHIFT, enable);
+}
+
+/***************************************************************************//**
+ * @brief Shut down power to rentention register bank.
+ * @param[in] enable
+ *     If true, shuts off power to retention registers.
+ * @note
+ *    When power rentention is disabled, it cannot be enabled again (until
+ *    reset).
+ ******************************************************************************/
+__STATIC_INLINE void BURTC_Powerdown(bool enable)
+{
+  BUS_RegBitWrite(&BURTC->POWERDOWN, _BURTC_POWERDOWN_RAM_SHIFT, enable);
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Set a value in one of the retention registers
+ *
+ * @param[in] num
+ *   Register to set
+ * @param[in] data
+ *   Value to put into register
+ ******************************************************************************/
+__STATIC_INLINE void BURTC_RetRegSet(uint32_t num, uint32_t data)
+{
+  EFM_ASSERT(num <= 127);
+
+  BURTC->RET[num].REG = data;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Read a value from one of the retention registers
+ *
+ * @param[in] num
+ *   Retention Register to read
+ ******************************************************************************/
+__STATIC_INLINE uint32_t BURTC_RetRegGet(uint32_t num)
+{
+  EFM_ASSERT(num <= 127);
+
+  return BURTC->RET[num].REG;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Lock BURTC registers, will protect from writing new config settings
+ ******************************************************************************/
+__STATIC_INLINE void BURTC_Lock(void)
+{
+  BURTC->LOCK = BURTC_LOCK_LOCKKEY_LOCK;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Unlock BURTC registers, enable write access to change configuration
+ ******************************************************************************/
+__STATIC_INLINE void BURTC_Unlock(void)
+{
+  BURTC->LOCK = BURTC_LOCK_LOCKKEY_UNLOCK;
+}
+
+void BURTC_Reset(void);
+void BURTC_Init(const BURTC_Init_TypeDef *burtcInit);
+void BURTC_CounterReset(void);
+void BURTC_CompareSet(unsigned int comp, uint32_t value);
+uint32_t BURTC_CompareGet(unsigned int comp);
+uint32_t BURTC_ClockFreqGet(void);
+
+/** @} (end addtogroup BURTC) */
+/** @} (end addtogroup emlib) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* BURTC_PRESENT */
+#endif /* EM_BURTC_H */