added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Revision:
144:ef7eb2e8f9f7
Parent:
50:a417edff4437
diff -r 423e1876dc07 -r ef7eb2e8f9f7 targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_vcmp.c
--- a/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_vcmp.c	Tue Aug 02 14:07:36 2016 +0000
+++ b/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_vcmp.c	Fri Sep 02 15:07:44 2016 +0100
@@ -1,184 +1,184 @@
-/***************************************************************************//**
- * @file em_vcmp.c
- * @brief Voltage Comparator (VCMP) peripheral API
- * @version 4.2.1
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2015 Silicon Labs, 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.
- *
- ******************************************************************************/
-
-#include "em_vcmp.h"
-#if defined(VCMP_COUNT) && (VCMP_COUNT > 0)
-
-#include "em_assert.h"
-
-/***************************************************************************//**
- * @addtogroup EM_Library
- * @{
- ******************************************************************************/
-
-/***************************************************************************//**
- * @addtogroup VCMP
- * @brief Voltage Comparator (VCMP) Peripheral API
- * @{
- ******************************************************************************/
-
-/***************************************************************************//**
- * @brief
- *   Configure and enable Voltage Comparator
- *
- * @param[in] vcmpInit
- *   VCMP Initialization structure
- ******************************************************************************/
-void VCMP_Init(const VCMP_Init_TypeDef *vcmpInit)
-{
-  /* Verify input */
-  EFM_ASSERT((vcmpInit->inactive == 0) || (vcmpInit->inactive == 1));
-  EFM_ASSERT((vcmpInit->biasProg >= 0) && (vcmpInit->biasProg < 16));
-
-  /* Configure Half Bias setting */
-  if (vcmpInit->halfBias)
-  {
-    VCMP->CTRL |= VCMP_CTRL_HALFBIAS;
-  }
-  else
-  {
-    VCMP->CTRL &= ~(VCMP_CTRL_HALFBIAS);
-  }
-
-  /* Configure bias prog */
-  VCMP->CTRL &= ~(_VCMP_CTRL_BIASPROG_MASK);
-  VCMP->CTRL |= (vcmpInit->biasProg << _VCMP_CTRL_BIASPROG_SHIFT);
-
-  /* Configure sense for falling edge */
-  if (vcmpInit->irqFalling)
-  {
-    VCMP->CTRL |= VCMP_CTRL_IFALL;
-  }
-  else
-  {
-    VCMP->CTRL &= ~(VCMP_CTRL_IFALL);
-  }
-
-  /* Configure sense for rising edge */
-  if (vcmpInit->irqRising)
-  {
-    VCMP->CTRL |= VCMP_CTRL_IRISE;
-  }
-  else
-  {
-    VCMP->CTRL &= ~(VCMP_CTRL_IRISE);
-  }
-
-  /* Configure warm-up time */
-  VCMP->CTRL &= ~(_VCMP_CTRL_WARMTIME_MASK);
-  VCMP->CTRL |= (vcmpInit->warmup << _VCMP_CTRL_WARMTIME_SHIFT);
-
-  /* Configure hysteresis */
-  switch (vcmpInit->hyst)
-  {
-    case vcmpHyst20mV:
-      VCMP->CTRL |= VCMP_CTRL_HYSTEN;
-      break;
-    case vcmpHystNone:
-      VCMP->CTRL &= ~(VCMP_CTRL_HYSTEN);
-      break;
-    default:
-      break;
-  }
-
-  /* Configure inactive output value */
-  VCMP->CTRL |= (vcmpInit->inactive << _VCMP_CTRL_INACTVAL_SHIFT);
-
-  /* Configure trigger level */
-  VCMP_TriggerSet(vcmpInit->triggerLevel);
-
-  /* Enable or disable VCMP */
-  if (vcmpInit->enable)
-  {
-    VCMP->CTRL |= VCMP_CTRL_EN;
-  }
-  else
-  {
-    VCMP->CTRL &= ~(VCMP_CTRL_EN);
-  }
-
-  /* If Low Power Reference is enabled, wait until VCMP is ready */
-  /* before enabling it, see reference manual for deatils        */
-  /* Configuring Low Power Ref without enable has no effect      */
-  if(vcmpInit->lowPowerRef && vcmpInit->enable)
-  {
-    /* Poll for VCMP ready */
-    while(!VCMP_Ready());
-    VCMP_LowPowerRefSet(vcmpInit->lowPowerRef);
-  }
-
-  /* Clear edge interrupt */
-  VCMP_IntClear(VCMP_IF_EDGE);
-}
-
-
-/***************************************************************************//**
- * @brief
- *    Enable or disable Low Power Reference setting
- *
- * @param[in] enable
- *    If true, enables low power reference, if false disable low power reference
- ******************************************************************************/
-void VCMP_LowPowerRefSet(bool enable)
-{
-  if (enable)
-  {
-    VCMP->INPUTSEL |= VCMP_INPUTSEL_LPREF;
-  }
-  else
-  {
-    VCMP->INPUTSEL &= ~VCMP_INPUTSEL_LPREF;
-  }
-}
-
-
-/***************************************************************************//**
- * @brief
- *    Configure trigger level of voltage comparator
- *
- * @param[in] level
- *    Trigger value, in range 0-63
- ******************************************************************************/
-void VCMP_TriggerSet(int level)
-{
-  /* Trigger range is 6 bits, value from 0-63 */
-  EFM_ASSERT((level > 0) && (level < 64));
-
-  /* Set trigger level */
-  VCMP->INPUTSEL = (VCMP->INPUTSEL & ~(_VCMP_INPUTSEL_TRIGLEVEL_MASK))
-                   | (level << _VCMP_INPUTSEL_TRIGLEVEL_SHIFT);
-}
-
-
-/** @} (end addtogroup VCMP) */
-/** @} (end addtogroup EM_Library) */
-#endif /* defined(VCMP_COUNT) && (VCMP_COUNT > 0) */
+/***************************************************************************//**
+ * @file em_vcmp.c
+ * @brief Voltage Comparator (VCMP) peripheral API
+ * @version 4.2.1
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2015 Silicon Labs, 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.
+ *
+ ******************************************************************************/
+
+#include "em_vcmp.h"
+#if defined(VCMP_COUNT) && (VCMP_COUNT > 0)
+
+#include "em_assert.h"
+
+/***************************************************************************//**
+ * @addtogroup EM_Library
+ * @{
+ ******************************************************************************/
+
+/***************************************************************************//**
+ * @addtogroup VCMP
+ * @brief Voltage Comparator (VCMP) Peripheral API
+ * @{
+ ******************************************************************************/
+
+/***************************************************************************//**
+ * @brief
+ *   Configure and enable Voltage Comparator
+ *
+ * @param[in] vcmpInit
+ *   VCMP Initialization structure
+ ******************************************************************************/
+void VCMP_Init(const VCMP_Init_TypeDef *vcmpInit)
+{
+  /* Verify input */
+  EFM_ASSERT((vcmpInit->inactive == 0) || (vcmpInit->inactive == 1));
+  EFM_ASSERT((vcmpInit->biasProg >= 0) && (vcmpInit->biasProg < 16));
+
+  /* Configure Half Bias setting */
+  if (vcmpInit->halfBias)
+  {
+    VCMP->CTRL |= VCMP_CTRL_HALFBIAS;
+  }
+  else
+  {
+    VCMP->CTRL &= ~(VCMP_CTRL_HALFBIAS);
+  }
+
+  /* Configure bias prog */
+  VCMP->CTRL &= ~(_VCMP_CTRL_BIASPROG_MASK);
+  VCMP->CTRL |= (vcmpInit->biasProg << _VCMP_CTRL_BIASPROG_SHIFT);
+
+  /* Configure sense for falling edge */
+  if (vcmpInit->irqFalling)
+  {
+    VCMP->CTRL |= VCMP_CTRL_IFALL;
+  }
+  else
+  {
+    VCMP->CTRL &= ~(VCMP_CTRL_IFALL);
+  }
+
+  /* Configure sense for rising edge */
+  if (vcmpInit->irqRising)
+  {
+    VCMP->CTRL |= VCMP_CTRL_IRISE;
+  }
+  else
+  {
+    VCMP->CTRL &= ~(VCMP_CTRL_IRISE);
+  }
+
+  /* Configure warm-up time */
+  VCMP->CTRL &= ~(_VCMP_CTRL_WARMTIME_MASK);
+  VCMP->CTRL |= (vcmpInit->warmup << _VCMP_CTRL_WARMTIME_SHIFT);
+
+  /* Configure hysteresis */
+  switch (vcmpInit->hyst)
+  {
+    case vcmpHyst20mV:
+      VCMP->CTRL |= VCMP_CTRL_HYSTEN;
+      break;
+    case vcmpHystNone:
+      VCMP->CTRL &= ~(VCMP_CTRL_HYSTEN);
+      break;
+    default:
+      break;
+  }
+
+  /* Configure inactive output value */
+  VCMP->CTRL |= (vcmpInit->inactive << _VCMP_CTRL_INACTVAL_SHIFT);
+
+  /* Configure trigger level */
+  VCMP_TriggerSet(vcmpInit->triggerLevel);
+
+  /* Enable or disable VCMP */
+  if (vcmpInit->enable)
+  {
+    VCMP->CTRL |= VCMP_CTRL_EN;
+  }
+  else
+  {
+    VCMP->CTRL &= ~(VCMP_CTRL_EN);
+  }
+
+  /* If Low Power Reference is enabled, wait until VCMP is ready */
+  /* before enabling it, see reference manual for deatils        */
+  /* Configuring Low Power Ref without enable has no effect      */
+  if(vcmpInit->lowPowerRef && vcmpInit->enable)
+  {
+    /* Poll for VCMP ready */
+    while(!VCMP_Ready());
+    VCMP_LowPowerRefSet(vcmpInit->lowPowerRef);
+  }
+
+  /* Clear edge interrupt */
+  VCMP_IntClear(VCMP_IF_EDGE);
+}
+
+
+/***************************************************************************//**
+ * @brief
+ *    Enable or disable Low Power Reference setting
+ *
+ * @param[in] enable
+ *    If true, enables low power reference, if false disable low power reference
+ ******************************************************************************/
+void VCMP_LowPowerRefSet(bool enable)
+{
+  if (enable)
+  {
+    VCMP->INPUTSEL |= VCMP_INPUTSEL_LPREF;
+  }
+  else
+  {
+    VCMP->INPUTSEL &= ~VCMP_INPUTSEL_LPREF;
+  }
+}
+
+
+/***************************************************************************//**
+ * @brief
+ *    Configure trigger level of voltage comparator
+ *
+ * @param[in] level
+ *    Trigger value, in range 0-63
+ ******************************************************************************/
+void VCMP_TriggerSet(int level)
+{
+  /* Trigger range is 6 bits, value from 0-63 */
+  EFM_ASSERT((level > 0) && (level < 64));
+
+  /* Set trigger level */
+  VCMP->INPUTSEL = (VCMP->INPUTSEL & ~(_VCMP_INPUTSEL_TRIGLEVEL_MASK))
+                   | (level << _VCMP_INPUTSEL_TRIGLEVEL_SHIFT);
+}
+
+
+/** @} (end addtogroup VCMP) */
+/** @} (end addtogroup EM_Library) */
+#endif /* defined(VCMP_COUNT) && (VCMP_COUNT > 0) */