]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/CORTEX_EFM32_Gecko_Starter_Kit_Simplicity_Studio/Source/SilLabs_Code/emlib/inc/em_timer.h
Add files necessary to create a Pearl Gecko build configuration in the new EFM32...
[freertos] / FreeRTOS / Demo / CORTEX_EFM32_Gecko_Starter_Kit_Simplicity_Studio / Source / SilLabs_Code / emlib / inc / em_timer.h
index 13bcf70578678338fb4eab52f3e77b4ed963dbd0..a81b8814b4c5b5971d7e8084ada572997aecbc1b 100644 (file)
@@ -1,10 +1,10 @@
 /***************************************************************************//**\r
  * @file em_timer.h\r
  * @brief Timer/counter (TIMER) peripheral API\r
- * @version 4.0.0\r
+ * @version 4.2.1\r
  *******************************************************************************\r
  * @section License\r
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>\r
+ * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>\r
  *******************************************************************************\r
  *\r
  * Permission is granted to anyone to use this software for any purpose,\r
@@ -30,9 +30,8 @@
  *\r
  ******************************************************************************/\r
 \r
-\r
-#ifndef __SILICON_LABS_EM_TIMER_H_\r
-#define __SILICON_LABS_EM_TIMER_H_\r
+#ifndef __SILICON_LABS_EM_TIMER_H__\r
+#define __SILICON_LABS_EM_TIMER_H__\r
 \r
 #include "em_device.h"\r
 #if defined(TIMER_COUNT) && (TIMER_COUNT > 0)\r
@@ -67,20 +66,26 @@ extern "C" {
 #elif (TIMER_COUNT == 2)\r
 #define TIMER_REF_VALID(ref)    (((ref) == TIMER0) || ((ref) == TIMER1))\r
 #elif (TIMER_COUNT == 3)\r
-#define TIMER_REF_VALID(ref)    (((ref) == TIMER0) || \\r
-                                 ((ref) == TIMER1) || \\r
-                                 ((ref) == TIMER2))\r
+#define TIMER_REF_VALID(ref)    (((ref) == TIMER0)    \\r
+                                 || ((ref) == TIMER1) \\r
+                                 || ((ref) == TIMER2))\r
 #elif (TIMER_COUNT == 4)\r
-#define TIMER_REF_VALID(ref)    (((ref) == TIMER0) || \\r
-                                 ((ref) == TIMER1) || \\r
-                                 ((ref) == TIMER2) || \\r
-                                 ((ref) == TIMER3))\r
+#define TIMER_REF_VALID(ref)    (((ref) == TIMER0)    \\r
+                                 || ((ref) == TIMER1) \\r
+                                 || ((ref) == TIMER2) \\r
+                                 || ((ref) == TIMER3))\r
 #else\r
-#error Undefined number of timers.\r
+#error "Undefined number of timers."\r
 #endif\r
 \r
 /** Validation of TIMER compare/capture channel number */\r
+#if defined(_SILICON_LABS_32B_PLATFORM_1)\r
 #define TIMER_CH_VALID(ch)    ((ch) < 3)\r
+#elif defined(_SILICON_LABS_32B_PLATFORM_2)\r
+#define TIMER_CH_VALID(ch)    ((ch) < 4)\r
+#else\r
+#error "Unknown platform. Undefined number of channels."\r
+#endif\r
 \r
 /** @endcond */\r
 \r
@@ -220,33 +225,33 @@ typedef enum
   timerPRSSELCh1 = _TIMER_CC_CTRL_PRSSEL_PRSCH1,        /**< PRS channel 1. */\r
   timerPRSSELCh2 = _TIMER_CC_CTRL_PRSSEL_PRSCH2,        /**< PRS channel 2. */\r
   timerPRSSELCh3 = _TIMER_CC_CTRL_PRSSEL_PRSCH3,        /**< PRS channel 3. */\r
-#if defined( _TIMER_CC_CTRL_PRSSEL_PRSCH4 )\r
+#if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH4)\r
   timerPRSSELCh4 = _TIMER_CC_CTRL_PRSSEL_PRSCH4,        /**< PRS channel 4. */\r
 #endif\r
-#if defined( _TIMER_CC_CTRL_PRSSEL_PRSCH5 )\r
+#if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH5)\r
   timerPRSSELCh5 = _TIMER_CC_CTRL_PRSSEL_PRSCH5,        /**< PRS channel 5. */\r
 #endif\r
-#if defined( _TIMER_CC_CTRL_PRSSEL_PRSCH6 )\r
+#if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH6)\r
   timerPRSSELCh6 = _TIMER_CC_CTRL_PRSSEL_PRSCH6,        /**< PRS channel 6. */\r
 #endif\r
-#if defined( _TIMER_CC_CTRL_PRSSEL_PRSCH7 )\r
+#if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH7)\r
   timerPRSSELCh7 = _TIMER_CC_CTRL_PRSSEL_PRSCH7,        /**< PRS channel 7. */\r
 #endif\r
-#if defined( _TIMER_CC_CTRL_PRSSEL_PRSCH8 )\r
+#if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH8)\r
   timerPRSSELCh8  = _TIMER_CC_CTRL_PRSSEL_PRSCH8,       /**< PRS channel 8. */\r
 #endif\r
-#if defined( _TIMER_CC_CTRL_PRSSEL_PRSCH9 )\r
+#if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH9)\r
   timerPRSSELCh9  = _TIMER_CC_CTRL_PRSSEL_PRSCH9,       /**< PRS channel 9. */\r
 #endif\r
-#if defined( _TIMER_CC_CTRL_PRSSEL_PRSCH10 )\r
+#if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH10)\r
   timerPRSSELCh10 = _TIMER_CC_CTRL_PRSSEL_PRSCH10,      /**< PRS channel 10. */\r
 #endif\r
-#if defined( _TIMER_CC_CTRL_PRSSEL_PRSCH11 )\r
+#if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH11)\r
   timerPRSSELCh11 = _TIMER_CC_CTRL_PRSSEL_PRSCH11,      /**< PRS channel 11. */\r
 #endif\r
 } TIMER_PRSSEL_TypeDef;\r
 \r
-#ifdef _TIMER_DTFC_DTFA_NONE\r
+#if defined(_TIMER_DTFC_DTFA_NONE)\r
 /** DT (Dead Time) Fault Actions. */\r
 typedef enum\r
 {\r
@@ -276,7 +281,7 @@ typedef struct
   /** Clock selection. */\r
   TIMER_ClkSel_TypeDef      clkSel;\r
 \r
-#if defined( TIMER_CTRL_X2CNT ) && defined( TIMER_CTRL_ATI )\r
+#if defined(TIMER_CTRL_X2CNT) && defined(TIMER_CTRL_ATI)\r
   /** 2x Count mode, counter increments/decrements by 2, meant for PWN mode. */\r
   bool                      count2x;\r
 \r
@@ -308,36 +313,38 @@ typedef struct
 } TIMER_Init_TypeDef;\r
 \r
 /** Default config for TIMER init structure. */\r
-#if defined( TIMER_CTRL_X2CNT ) && defined( TIMER_CTRL_ATI )\r
-#define TIMER_INIT_DEFAULT                                                              \\r
-  { true,                   /* Enable timer when init complete. */                      \\r
-    false,                  /* Stop counter during debug halt. */                       \\r
-    timerPrescale1,         /* No prescaling. */                                        \\r
-    timerClkSelHFPerClk,    /* Select HFPER clock. */                                   \\r
-    false,                  /* Not 2x count mode. */                                    \\r
-    false,                  /* No ATI. */                                               \\r
-    timerInputActionNone,   /* No action on falling input edge. */                      \\r
-    timerInputActionNone,   /* No action on rising input edge. */                       \\r
-    timerModeUp,            /* Up-counting. */                                          \\r
-    false,                  /* Do not clear DMA requests when DMA channel is active. */ \\r
-    false,                  /* Select X2 quadrature decode mode (if used). */           \\r
-    false,                  /* Disable one shot. */                                     \\r
-    false                   /* Not started/stopped/reloaded by other timers. */         \\r
-  }\r
+#if defined(TIMER_CTRL_X2CNT) && defined(TIMER_CTRL_ATI)\r
+#define TIMER_INIT_DEFAULT                                                            \\r
+{                                                                                     \\r
+  true,                   /* Enable timer when init complete. */                      \\r
+  false,                  /* Stop counter during debug halt. */                       \\r
+  timerPrescale1,         /* No prescaling. */                                        \\r
+  timerClkSelHFPerClk,    /* Select HFPER clock. */                                   \\r
+  false,                  /* Not 2x count mode. */                                    \\r
+  false,                  /* No ATI. */                                               \\r
+  timerInputActionNone,   /* No action on falling input edge. */                      \\r
+  timerInputActionNone,   /* No action on rising input edge. */                       \\r
+  timerModeUp,            /* Up-counting. */                                          \\r
+  false,                  /* Do not clear DMA requests when DMA channel is active. */ \\r
+  false,                  /* Select X2 quadrature decode mode (if used). */           \\r
+  false,                  /* Disable one shot. */                                     \\r
+  false                   /* Not started/stopped/reloaded by other timers. */         \\r
+}\r
 #else\r
-#define TIMER_INIT_DEFAULT                                                              \\r
-  { true,                   /* Enable timer when init complete. */                      \\r
-    false,                  /* Stop counter during debug halt. */                       \\r
-    timerPrescale1,         /* No prescaling. */                                        \\r
-    timerClkSelHFPerClk,    /* Select HFPER clock. */                                   \\r
-    timerInputActionNone,   /* No action on falling input edge. */                      \\r
-    timerInputActionNone,   /* No action on rising input edge. */                       \\r
-    timerModeUp,            /* Up-counting. */                                          \\r
-    false,                  /* Do not clear DMA requests when DMA channel is active. */ \\r
-    false,                  /* Select X2 quadrature decode mode (if used). */           \\r
-    false,                  /* Disable one shot. */                                     \\r
-    false                   /* Not started/stopped/reloaded by other timers. */         \\r
-  }\r
+#define TIMER_INIT_DEFAULT                                                            \\r
+{                                                                                     \\r
+  true,                   /* Enable timer when init complete. */                      \\r
+  false,                  /* Stop counter during debug halt. */                       \\r
+  timerPrescale1,         /* No prescaling. */                                        \\r
+  timerClkSelHFPerClk,    /* Select HFPER clock. */                                   \\r
+  timerInputActionNone,   /* No action on falling input edge. */                      \\r
+  timerInputActionNone,   /* No action on rising input edge. */                       \\r
+  timerModeUp,            /* Up-counting. */                                          \\r
+  false,                  /* Do not clear DMA requests when DMA channel is active. */ \\r
+  false,                  /* Select X2 quadrature decode mode (if used). */           \\r
+  false,                  /* Disable one shot. */                                     \\r
+  false                   /* Not started/stopped/reloaded by other timers. */         \\r
+}\r
 #endif\r
 \r
 /** TIMER compare/capture initialization structure. */\r
@@ -387,21 +394,22 @@ typedef struct
 } TIMER_InitCC_TypeDef;\r
 \r
 /** Default config for TIMER compare/capture init structure. */\r
-#define TIMER_INITCC_DEFAULT                                                   \\r
-  { timerEventEveryEdge,      /* Event on every capture. */                    \\r
-    timerEdgeRising,          /* Input capture edge on rising edge. */         \\r
-    timerPRSSELCh0,           /* Not used by default, select PRS channel 0. */ \\r
-    timerOutputActionNone,    /* No action on underflow. */                    \\r
-    timerOutputActionNone,    /* No action on overflow. */                     \\r
-    timerOutputActionNone,    /* No action on match. */                        \\r
-    timerCCModeOff,           /* Disable compare/capture channel. */           \\r
-    false,                    /* Disable filter. */                            \\r
-    false,                    /* Select TIMERnCCx input. */                    \\r
-    false,                    /* Clear output when counter disabled. */        \\r
-    false                     /* Do not invert output. */                      \\r
-  }\r
+#define TIMER_INITCC_DEFAULT                                                 \\r
+{                                                                            \\r
+  timerEventEveryEdge,      /* Event on every capture. */                    \\r
+  timerEdgeRising,          /* Input capture edge on rising edge. */         \\r
+  timerPRSSELCh0,           /* Not used by default, select PRS channel 0. */ \\r
+  timerOutputActionNone,    /* No action on underflow. */                    \\r
+  timerOutputActionNone,    /* No action on overflow. */                     \\r
+  timerOutputActionNone,    /* No action on match. */                        \\r
+  timerCCModeOff,           /* Disable compare/capture channel. */           \\r
+  false,                    /* Disable filter. */                            \\r
+  false,                    /* Select TIMERnCCx input. */                    \\r
+  false,                    /* Clear output when counter disabled. */        \\r
+  false                     /* Do not invert output. */                      \\r
+}\r
 \r
-#ifdef _TIMER_DTCTRL_MASK\r
+#if defined(_TIMER_DTCTRL_MASK)\r
 /** TIMER Dead Time Insertion (DTI) initialization structure. */\r
 typedef struct\r
 {\r
@@ -464,25 +472,26 @@ typedef struct
 \r
 \r
   /** Default config for TIMER DTI init structure. */\r
-#define TIMER_INITDTI_DEFAULT                                                  \\r
-  { true,                     /* Enable the DTI. */                            \\r
-    false,                    /* CC[0|1|2] outputs are active high. */         \\r
-    false,                    /* CDTI[0|1|2] outputs are not inverted. */      \\r
-    false,                    /* No auto restart when debugger exits. */       \\r
-    false,                    /* No PRS source selected. */                    \\r
-    timerPRSSELCh0,           /* Not used by default, select PRS channel 0. */ \\r
-    timerPrescale1,           /* No prescaling.  */                            \\r
-    0,                        /* No rise time. */                              \\r
-    0,                        /* No fall time. */                              \\r
-    TIMER_DTOGEN_DTOGCC0EN|TIMER_DTOGEN_DTOGCDTI0EN, /* Enable CC0 and CDTI0 */\\r
-    true,                     /* Enable core lockup as fault source */         \\r
-    true,                     /* Enable debugger as fault source */            \\r
-    false,                    /* Disable PRS fault source 0 */                 \\r
-    timerPRSSELCh0,           /* Not used by default, select PRS channel 0. */ \\r
-    false,                    /* Disable PRS fault source 1 */                 \\r
-    timerPRSSELCh0,           /* Not used by default, select PRS channel 0. */ \\r
-    timerDtiFaultActionInactive, /* No fault action. */                        \\r
-  }\r
+#define TIMER_INITDTI_DEFAULT                                                \\r
+{                                                                            \\r
+  true,                     /* Enable the DTI. */                            \\r
+  false,                    /* CC[0|1|2] outputs are active high. */         \\r
+  false,                    /* CDTI[0|1|2] outputs are not inverted. */      \\r
+  false,                    /* No auto restart when debugger exits. */       \\r
+  false,                    /* No PRS source selected. */                    \\r
+  timerPRSSELCh0,           /* Not used by default, select PRS channel 0. */ \\r
+  timerPrescale1,           /* No prescaling.  */                            \\r
+  0,                        /* No rise time. */                              \\r
+  0,                        /* No fall time. */                              \\r
+  TIMER_DTOGEN_DTOGCC0EN|TIMER_DTOGEN_DTOGCDTI0EN, /* Enable CC0 and CDTI0 */\\r
+  true,                     /* Enable core lockup as fault source */         \\r
+  true,                     /* Enable debugger as fault source */            \\r
+  false,                    /* Disable PRS fault source 0 */                 \\r
+  timerPRSSELCh0,           /* Not used by default, select PRS channel 0. */ \\r
+  false,                    /* Disable PRS fault source 1 */                 \\r
+  timerPRSSELCh0,           /* Not used by default, select PRS channel 0. */ \\r
+  timerDtiFaultActionInactive, /* No fault action. */                        \\r
+}\r
 #endif /* _TIMER_DTCTRL_MASK */\r
 \r
 \r
@@ -506,7 +515,7 @@ typedef struct
  ******************************************************************************/\r
 __STATIC_INLINE uint32_t TIMER_CaptureGet(TIMER_TypeDef *timer, unsigned int ch)\r
 {\r
-  return(timer->CC[ch].CCV);\r
+  return timer->CC[ch].CCV;\r
 }\r
 \r
 \r
@@ -571,7 +580,7 @@ __STATIC_INLINE void TIMER_CompareSet(TIMER_TypeDef *timer,
  ******************************************************************************/\r
 __STATIC_INLINE uint32_t TIMER_CounterGet(TIMER_TypeDef *timer)\r
 {\r
-  return(timer->CNT);\r
+  return timer->CNT;\r
 }\r
 \r
 \r
@@ -621,7 +630,7 @@ void TIMER_InitCC(TIMER_TypeDef *timer,
                   unsigned int ch,\r
                   const TIMER_InitCC_TypeDef *init);\r
 \r
-#ifdef _TIMER_DTCTRL_MASK\r
+#if defined(_TIMER_DTCTRL_MASK)\r
 void TIMER_InitDTI(TIMER_TypeDef *timer, const TIMER_InitDTI_TypeDef *init);\r
 \r
 /***************************************************************************//**\r
@@ -666,7 +675,7 @@ __STATIC_INLINE void TIMER_EnableDTI(TIMER_TypeDef *timer, bool enable)
 __STATIC_INLINE uint32_t TIMER_GetDTIFault(TIMER_TypeDef *timer)\r
 {\r
   EFM_ASSERT(TIMER0 == timer);\r
-  return(timer->DTFAULT);\r
+  return timer->DTFAULT;\r
 }\r
 \r
 \r
@@ -720,7 +729,7 @@ __STATIC_INLINE void TIMER_IntClear(TIMER_TypeDef *timer, uint32_t flags)
  ******************************************************************************/\r
 __STATIC_INLINE void TIMER_IntDisable(TIMER_TypeDef *timer, uint32_t flags)\r
 {\r
-  timer->IEN &= ~(flags);\r
+  timer->IEN &= ~flags;\r
 }\r
 \r
 \r
@@ -762,7 +771,7 @@ __STATIC_INLINE void TIMER_IntEnable(TIMER_TypeDef *timer, uint32_t flags)
  ******************************************************************************/\r
 __STATIC_INLINE uint32_t TIMER_IntGet(TIMER_TypeDef *timer)\r
 {\r
-  return(timer->IF);\r
+  return timer->IF;\r
 }\r
 \r
 \r
@@ -787,14 +796,14 @@ __STATIC_INLINE uint32_t TIMER_IntGet(TIMER_TypeDef *timer)
  ******************************************************************************/\r
 __STATIC_INLINE uint32_t TIMER_IntGetEnabled(TIMER_TypeDef *timer)\r
 {\r
-  uint32_t tmp;\r
+  uint32_t ien;\r
 \r
   /* Store TIMER->IEN in temporary variable in order to define explicit order\r
    * of volatile accesses. */\r
-  tmp = timer->IEN;\r
+  ien = timer->IEN;\r
 \r
   /* Bitwise AND of pending and enabled interrupts */\r
-  return timer->IF & tmp;\r
+  return timer->IF & ien;\r
 }\r
 \r
 \r
@@ -814,7 +823,7 @@ __STATIC_INLINE void TIMER_IntSet(TIMER_TypeDef *timer, uint32_t flags)
   timer->IFS = flags;\r
 }\r
 \r
-#ifdef TIMER_DTLOCK_LOCKKEY_LOCK\r
+#if defined(_TIMER_DTLOCK_LOCKKEY_LOCK)\r
 /***************************************************************************//**\r
  * @brief\r
  *   Lock some of the TIMER registers in order to protect them from being\r
@@ -874,7 +883,7 @@ __STATIC_INLINE void TIMER_TopBufSet(TIMER_TypeDef *timer, uint32_t val)
  ******************************************************************************/\r
 __STATIC_INLINE uint32_t TIMER_TopGet(TIMER_TypeDef *timer)\r
 {\r
-  return(timer->TOP);\r
+  return timer->TOP;\r
 }\r
 \r
 \r
@@ -894,7 +903,7 @@ __STATIC_INLINE void TIMER_TopSet(TIMER_TypeDef *timer, uint32_t val)
 }\r
 \r
 \r
-#ifdef TIMER_DTLOCK_LOCKKEY_UNLOCK\r
+#if defined(TIMER_DTLOCK_LOCKKEY_UNLOCK)\r
 /***************************************************************************//**\r
  * @brief\r
  *   Unlock the TIMER so that writing to locked registers again is possible.\r
@@ -919,4 +928,4 @@ __STATIC_INLINE void TIMER_Unlock(TIMER_TypeDef *timer)
 #endif\r
 \r
 #endif /* defined(TIMER_COUNT) && (TIMER_COUNT > 0) */\r
-#endif /* __SILICON_LABS_EM_TIMER_H_ */\r
+#endif /* __SILICON_LABS_EM_TIMER_H__ */\r