added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Revision:
50:a417edff4437
Parent:
0:9b334a45a8ff
Child:
144:ef7eb2e8f9f7
--- a/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_opamp.c	Wed Jan 13 12:45:11 2016 +0000
+++ b/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_opamp.c	Fri Jan 15 07:45:16 2016 +0000
@@ -1,10 +1,10 @@
 /**************************************************************************//**
  * @file em_opamp.c
  * @brief Operational Amplifier (OPAMP) peripheral API
- * @version 3.20.12
+ * @version 4.2.1
  ******************************************************************************
  * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
  *******************************************************************************
  *
  * Permission is granted to anyone to use this software for any purpose,
@@ -30,13 +30,11 @@
  *
  ******************************************************************************/
 
-
-#include "em_device.h"
-#if defined( OPAMP_PRESENT ) && ( OPAMP_COUNT == 1 )
+#include "em_opamp.h"
+#if defined(OPAMP_PRESENT) && (OPAMP_COUNT == 1)
 
 #include "em_system.h"
 #include "em_assert.h"
-#include "em_opamp.h"
 
 /***************************************************************************//**
  * @addtogroup EM_Library
@@ -204,17 +202,17 @@
  * @param[in] opa
  *   Selects an OPA, valid vaules are @ref OPA0, @ref OPA1 and @ref OPA2.
  ******************************************************************************/
-void OPAMP_Disable( DAC_TypeDef *dac, OPAMP_TypeDef opa )
+void OPAMP_Disable(DAC_TypeDef *dac, OPAMP_TypeDef opa)
 {
-  EFM_ASSERT( DAC_REF_VALID( dac ) );
-  EFM_ASSERT( DAC_OPA_VALID( opa ) );
+  EFM_ASSERT(DAC_REF_VALID(dac));
+  EFM_ASSERT(DAC_OPA_VALID(opa));
 
-  if ( opa == OPA0 )
+  if (opa == OPA0)
   {
     dac->CH0CTRL &= ~DAC_CH0CTRL_EN;
     dac->OPACTRL &= ~DAC_OPACTRL_OPA0EN;
   }
-  else if ( opa == OPA1 )
+  else if (opa == OPA1)
   {
     dac->CH1CTRL &= ~DAC_CH1CTRL_EN;
     dac->OPACTRL &= ~DAC_OPACTRL_OPA1EN;
@@ -265,163 +263,163 @@
  * @param[in] init
  *   Pointer to a structure containing OPAMP init information.
  ******************************************************************************/
-void OPAMP_Enable( DAC_TypeDef *dac, OPAMP_TypeDef opa, const OPAMP_Init_TypeDef *init )
+void OPAMP_Enable(DAC_TypeDef *dac, OPAMP_TypeDef opa, const OPAMP_Init_TypeDef *init)
 {
   uint32_t offset;
 
-  EFM_ASSERT( DAC_REF_VALID( dac ) );
-  EFM_ASSERT( DAC_OPA_VALID( opa ) );
-  EFM_ASSERT( init->bias <= ( _DAC_BIASPROG_BIASPROG_MASK  >>
-                              _DAC_BIASPROG_BIASPROG_SHIFT    ) );
+  EFM_ASSERT(DAC_REF_VALID(dac));
+  EFM_ASSERT(DAC_OPA_VALID(opa));
+  EFM_ASSERT(init->bias <= (_DAC_BIASPROG_BIASPROG_MASK
+                             >> _DAC_BIASPROG_BIASPROG_SHIFT));
 
-  if ( opa == OPA0 )
+  if (opa == OPA0)
   {
-    EFM_ASSERT( ( init->outPen & ~_DAC_OPA0MUX_OUTPEN_MASK ) == 0 );
+    EFM_ASSERT((init->outPen & ~_DAC_OPA0MUX_OUTPEN_MASK) == 0);
 
-    dac->BIASPROG = ( dac->BIASPROG
-                      & ~( _DAC_BIASPROG_BIASPROG_MASK             |
-                            DAC_BIASPROG_HALFBIAS                    )  ) |
-                    ( init->bias      << _DAC_BIASPROG_BIASPROG_SHIFT   ) |
-                    ( init->halfBias   ? DAC_BIASPROG_HALFBIAS      : 0 );
+    dac->BIASPROG = (dac->BIASPROG
+                     & ~(_DAC_BIASPROG_BIASPROG_MASK
+                         | DAC_BIASPROG_HALFBIAS))
+                    | (init->bias     << _DAC_BIASPROG_BIASPROG_SHIFT)
+                    | (init->halfBias ?   DAC_BIASPROG_HALFBIAS : 0);
 
-    if ( init->defaultOffset )
+    if (init->defaultOffset)
     {
-      offset = SYSTEM_GetCalibrationValue( &dac->CAL );
-      dac->CAL = ( dac->CAL & ~_DAC_CAL_CH0OFFSET_MASK ) |
-                 ( offset   &  _DAC_CAL_CH0OFFSET_MASK );
+      offset = SYSTEM_GetCalibrationValue(&dac->CAL);
+      dac->CAL = (dac->CAL & ~_DAC_CAL_CH0OFFSET_MASK)
+                 | (offset &  _DAC_CAL_CH0OFFSET_MASK);
     }
     else
     {
-      EFM_ASSERT( init->offset <= ( _DAC_CAL_CH0OFFSET_MASK >>
-                                    _DAC_CAL_CH0OFFSET_SHIFT   ) );
+      EFM_ASSERT(init->offset <= (_DAC_CAL_CH0OFFSET_MASK
+                                  >> _DAC_CAL_CH0OFFSET_SHIFT));
 
-      dac->CAL = ( dac->CAL      & ~_DAC_CAL_CH0OFFSET_MASK  ) |
-                 ( init->offset <<  _DAC_CAL_CH0OFFSET_SHIFT );
+      dac->CAL = (dac->CAL & ~_DAC_CAL_CH0OFFSET_MASK)
+                 | (init->offset << _DAC_CAL_CH0OFFSET_SHIFT);
     }
 
-    dac->OPA0MUX  = (uint32_t)init->resSel                                |
-                    (uint32_t)init->outMode                               |
-                    init->outPen                                          |
-                    (uint32_t)init->resInMux                              |
-                    (uint32_t)init->negSel                                |
-                    (uint32_t)init->posSel                                |
-                    ( init->nextOut     ? DAC_OPA0MUX_NEXTOUT       : 0 ) |
-                    ( init->npEn        ? DAC_OPA0MUX_NPEN          : 0 ) |
-                    ( init->ppEn        ? DAC_OPA0MUX_PPEN          : 0 );
+    dac->OPA0MUX  = (uint32_t)init->resSel
+                    | (uint32_t)init->outMode
+                    | init->outPen
+                    | (uint32_t)init->resInMux
+                    | (uint32_t)init->negSel
+                    | (uint32_t)init->posSel
+                    | ( init->nextOut ? DAC_OPA0MUX_NEXTOUT : 0)
+                    | ( init->npEn    ? DAC_OPA0MUX_NPEN    : 0)
+                    | ( init->ppEn    ? DAC_OPA0MUX_PPEN    : 0);
 
     dac->CH0CTRL |= DAC_CH0CTRL_EN;
-    dac->OPACTRL  = ( dac->OPACTRL
-                      & ~(  DAC_OPACTRL_OPA0SHORT                  |
-                           _DAC_OPACTRL_OPA0LPFDIS_MASK            |
-                            DAC_OPACTRL_OPA0HCMDIS                   )  ) |
-                    ( init->shortInputs ?  DAC_OPACTRL_OPA0SHORT    : 0 ) |
-                    ( init->lpfPosPadDisable ?
-                                     DAC_OPACTRL_OPA0LPFDIS_PLPFDIS : 0 ) |
-                    ( init->lpfNegPadDisable ?
-                                     DAC_OPACTRL_OPA0LPFDIS_NLPFDIS : 0 ) |
-                    ( init->hcmDisable  ?  DAC_OPACTRL_OPA0HCMDIS   : 0 ) |
-                    ( DAC_OPACTRL_OPA0EN                                );
+    dac->OPACTRL  = (dac->OPACTRL
+                     & ~(DAC_OPACTRL_OPA0SHORT
+                         | _DAC_OPACTRL_OPA0LPFDIS_MASK
+                         |  DAC_OPACTRL_OPA0HCMDIS))
+                    | (init->shortInputs ?  DAC_OPACTRL_OPA0SHORT : 0)
+                    | (init->lpfPosPadDisable
+                       ? DAC_OPACTRL_OPA0LPFDIS_PLPFDIS : 0)
+                    | (init->lpfNegPadDisable
+                       ? DAC_OPACTRL_OPA0LPFDIS_NLPFDIS : 0)
+                    | (init->hcmDisable ? DAC_OPACTRL_OPA0HCMDIS : 0)
+                    | DAC_OPACTRL_OPA0EN;
   }
   else if ( opa == OPA1 )
   {
-    EFM_ASSERT( ( init->outPen & ~_DAC_OPA1MUX_OUTPEN_MASK ) == 0 );
+    EFM_ASSERT((init->outPen & ~_DAC_OPA1MUX_OUTPEN_MASK) == 0);
 
-    dac->BIASPROG = ( dac->BIASPROG
-                      & ~( _DAC_BIASPROG_BIASPROG_MASK             |
-                            DAC_BIASPROG_HALFBIAS                    )  ) |
-                    ( init->bias      << _DAC_BIASPROG_BIASPROG_SHIFT   ) |
-                    ( init->halfBias   ? DAC_BIASPROG_HALFBIAS      : 0 );
+    dac->BIASPROG = (dac->BIASPROG
+                     & ~(_DAC_BIASPROG_BIASPROG_MASK
+                         | DAC_BIASPROG_HALFBIAS))
+                    | (init->bias   << _DAC_BIASPROG_BIASPROG_SHIFT)
+                    | (init->halfBias ? DAC_BIASPROG_HALFBIAS : 0 );
 
-    if ( init->defaultOffset )
+    if (init->defaultOffset)
     {
-      offset = SYSTEM_GetCalibrationValue( &dac->CAL );
-      dac->CAL = ( dac->CAL & ~_DAC_CAL_CH1OFFSET_MASK ) |
-                 ( offset   &  _DAC_CAL_CH1OFFSET_MASK );
+      offset = SYSTEM_GetCalibrationValue(&dac->CAL);
+      dac->CAL = (dac->CAL & ~_DAC_CAL_CH1OFFSET_MASK)
+                 | (offset &  _DAC_CAL_CH1OFFSET_MASK);
     }
     else
     {
-      EFM_ASSERT( init->offset <= ( _DAC_CAL_CH1OFFSET_MASK >>
-                                    _DAC_CAL_CH1OFFSET_SHIFT   ) );
+      EFM_ASSERT(init->offset <= (_DAC_CAL_CH1OFFSET_MASK
+                                  >> _DAC_CAL_CH1OFFSET_SHIFT));
 
-      dac->CAL = ( dac->CAL      & ~_DAC_CAL_CH1OFFSET_MASK  ) |
-                 ( init->offset <<  _DAC_CAL_CH1OFFSET_SHIFT );
+      dac->CAL = (dac->CAL & ~_DAC_CAL_CH1OFFSET_MASK)
+                 | (init->offset << _DAC_CAL_CH1OFFSET_SHIFT);
     }
 
-    dac->OPA1MUX  = (uint32_t)init->resSel                                |
-                    (uint32_t)init->outMode                               |
-                    init->outPen                                          |
-                    (uint32_t)init->resInMux                              |
-                    (uint32_t)init->negSel                                |
-                    (uint32_t)init->posSel                                |
-                    ( init->nextOut     ? DAC_OPA1MUX_NEXTOUT       : 0 ) |
-                    ( init->npEn        ? DAC_OPA1MUX_NPEN          : 0 ) |
-                    ( init->ppEn        ? DAC_OPA1MUX_PPEN          : 0 );
+    dac->OPA1MUX  = (uint32_t)init->resSel
+                    | (uint32_t)init->outMode
+                    | init->outPen
+                    | (uint32_t)init->resInMux
+                    | (uint32_t)init->negSel
+                    | (uint32_t)init->posSel
+                    | (init->nextOut ? DAC_OPA1MUX_NEXTOUT : 0)
+                    | (init->npEn    ? DAC_OPA1MUX_NPEN    : 0)
+                    | (init->ppEn    ? DAC_OPA1MUX_PPEN    : 0);
 
     dac->CH1CTRL |= DAC_CH1CTRL_EN;
-    dac->OPACTRL  = ( dac->OPACTRL
-                      & ~(  DAC_OPACTRL_OPA1SHORT                  |
-                           _DAC_OPACTRL_OPA1LPFDIS_MASK            |
-                             DAC_OPACTRL_OPA1HCMDIS                  )  ) |
-                    ( init->shortInputs ?  DAC_OPACTRL_OPA1SHORT    : 0 ) |
-                    ( init->lpfPosPadDisable ?
-                                     DAC_OPACTRL_OPA1LPFDIS_PLPFDIS : 0 ) |
-                    ( init->lpfNegPadDisable ?
-                                     DAC_OPACTRL_OPA1LPFDIS_NLPFDIS : 0 ) |
-                    ( init->hcmDisable  ?  DAC_OPACTRL_OPA1HCMDIS   : 0 ) |
-                    ( DAC_OPACTRL_OPA1EN                                );
+    dac->OPACTRL  = (dac->OPACTRL
+                     & ~(DAC_OPACTRL_OPA1SHORT
+                         | _DAC_OPACTRL_OPA1LPFDIS_MASK
+                         | DAC_OPACTRL_OPA1HCMDIS))
+                    | (init->shortInputs ? DAC_OPACTRL_OPA1SHORT : 0)
+                    | (init->lpfPosPadDisable
+                       ? DAC_OPACTRL_OPA1LPFDIS_PLPFDIS : 0)
+                    | (init->lpfNegPadDisable
+                       ? DAC_OPACTRL_OPA1LPFDIS_NLPFDIS : 0)
+                    | (init->hcmDisable ? DAC_OPACTRL_OPA1HCMDIS : 0)
+                    | DAC_OPACTRL_OPA1EN;
   }
   else /* OPA2 */
   {
-    EFM_ASSERT( ( init->posSel == DAC_OPA2MUX_POSSEL_DISABLE ) ||
-                ( init->posSel == DAC_OPA2MUX_POSSEL_POSPAD  ) ||
-                ( init->posSel == DAC_OPA2MUX_POSSEL_OPA1INP ) ||
-                ( init->posSel == DAC_OPA2MUX_POSSEL_OPATAP  )    );
+    EFM_ASSERT((init->posSel == DAC_OPA2MUX_POSSEL_DISABLE)
+               || (init->posSel == DAC_OPA2MUX_POSSEL_POSPAD)
+               || (init->posSel == DAC_OPA2MUX_POSSEL_OPA1INP)
+               || (init->posSel == DAC_OPA2MUX_POSSEL_OPATAP));
 
-    EFM_ASSERT( ( init->outMode & ~DAC_OPA2MUX_OUTMODE ) == 0 );
+    EFM_ASSERT((init->outMode & ~DAC_OPA2MUX_OUTMODE) == 0);
 
-    EFM_ASSERT( ( init->outPen & ~_DAC_OPA2MUX_OUTPEN_MASK ) == 0 );
+    EFM_ASSERT((init->outPen & ~_DAC_OPA2MUX_OUTPEN_MASK) == 0);
 
-    dac->BIASPROG = ( dac->BIASPROG
-                      & ~( _DAC_BIASPROG_OPA2BIASPROG_MASK         |
-                            DAC_BIASPROG_OPA2HALFBIAS                )  ) |
-                    ( init->bias   << _DAC_BIASPROG_OPA2BIASPROG_SHIFT  ) |
-                    ( init->halfBias   ? DAC_BIASPROG_OPA2HALFBIAS  : 0 );
+    dac->BIASPROG = (dac->BIASPROG
+                     & ~(_DAC_BIASPROG_OPA2BIASPROG_MASK
+                         | DAC_BIASPROG_OPA2HALFBIAS))
+                    | (init->bias << _DAC_BIASPROG_OPA2BIASPROG_SHIFT)
+                    | (init->halfBias ? DAC_BIASPROG_OPA2HALFBIAS : 0);
 
-    if ( init->defaultOffset )
+    if (init->defaultOffset)
     {
-      offset = SYSTEM_GetCalibrationValue( &dac->OPAOFFSET );
-      dac->OPAOFFSET = ( dac->OPAOFFSET & ~_DAC_OPAOFFSET_OPA2OFFSET_MASK ) |
-                       ( offset         &  _DAC_OPAOFFSET_OPA2OFFSET_MASK );
+      offset = SYSTEM_GetCalibrationValue(&dac->OPAOFFSET);
+      dac->OPAOFFSET = (dac->OPAOFFSET & ~_DAC_OPAOFFSET_OPA2OFFSET_MASK)
+                       | (offset       &  _DAC_OPAOFFSET_OPA2OFFSET_MASK);
     }
     else
     {
-      EFM_ASSERT( init->offset <= ( _DAC_OPAOFFSET_OPA2OFFSET_MASK >>
-                                    _DAC_OPAOFFSET_OPA2OFFSET_SHIFT   ) );
-      dac->OPAOFFSET = ( dac->OPAOFFSET & ~_DAC_OPAOFFSET_OPA2OFFSET_MASK ) |
-                       ( init->offset <<  _DAC_OPAOFFSET_OPA2OFFSET_SHIFT );
+      EFM_ASSERT(init->offset <= (_DAC_OPAOFFSET_OPA2OFFSET_MASK
+                                  >> _DAC_OPAOFFSET_OPA2OFFSET_SHIFT));
+      dac->OPAOFFSET = (dac->OPAOFFSET & ~_DAC_OPAOFFSET_OPA2OFFSET_MASK)
+                       | (init->offset << _DAC_OPAOFFSET_OPA2OFFSET_SHIFT);
     }
 
-    dac->OPA2MUX  = (uint32_t)init->resSel                                |
-                    (uint32_t)init->outMode                               |
-                    init->outPen                                          |
-                    (uint32_t)init->resInMux                              |
-                    (uint32_t)init->negSel                                |
-                    (uint32_t)init->posSel                                |
-                    ( init->nextOut     ? DAC_OPA2MUX_NEXTOUT       : 0 ) |
-                    ( init->npEn        ? DAC_OPA2MUX_NPEN          : 0 ) |
-                    ( init->ppEn        ? DAC_OPA2MUX_PPEN          : 0 );
+    dac->OPA2MUX  = (uint32_t)init->resSel
+                    | (uint32_t)init->outMode
+                    | init->outPen
+                    | (uint32_t)init->resInMux
+                    | (uint32_t)init->negSel
+                    | (uint32_t)init->posSel
+                    | ( init->nextOut ? DAC_OPA2MUX_NEXTOUT : 0 )
+                    | ( init->npEn    ? DAC_OPA2MUX_NPEN    : 0 )
+                    | ( init->ppEn    ? DAC_OPA2MUX_PPEN    : 0 );
 
-    dac->OPACTRL  = ( dac->OPACTRL
-                      & ~(  DAC_OPACTRL_OPA2SHORT                  |
-                           _DAC_OPACTRL_OPA2LPFDIS_MASK            |
-                            DAC_OPACTRL_OPA2HCMDIS                   )  ) |
-                    ( init->shortInputs ?  DAC_OPACTRL_OPA2SHORT    : 0 ) |
-                    ( init->lpfPosPadDisable ?
-                                     DAC_OPACTRL_OPA2LPFDIS_PLPFDIS : 0 ) |
-                    ( init->lpfNegPadDisable ?
-                                     DAC_OPACTRL_OPA2LPFDIS_NLPFDIS : 0 ) |
-                    ( init->hcmDisable  ?  DAC_OPACTRL_OPA2HCMDIS   : 0 ) |
-                    ( DAC_OPACTRL_OPA2EN                                );
+    dac->OPACTRL  = (dac->OPACTRL
+                     & ~(DAC_OPACTRL_OPA2SHORT
+                         | _DAC_OPACTRL_OPA2LPFDIS_MASK
+                         | DAC_OPACTRL_OPA2HCMDIS))
+                    | (init->shortInputs ?  DAC_OPACTRL_OPA2SHORT : 0)
+                    | (init->lpfPosPadDisable
+                       ? DAC_OPACTRL_OPA2LPFDIS_PLPFDIS : 0)
+                    | (init->lpfNegPadDisable
+                       ? DAC_OPACTRL_OPA2LPFDIS_NLPFDIS : 0)
+                    | (init->hcmDisable ? DAC_OPACTRL_OPA2HCMDIS : 0)
+                    | DAC_OPACTRL_OPA2EN;
   }
 }