added prescaler for 16 bit pwm in LPC1347 target
Fork of mbed-dev by
Diff: targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_opamp.c
- Revision:
- 50:a417edff4437
- Parent:
- 0:9b334a45a8ff
- Child:
- 144:ef7eb2e8f9f7
diff -r 57ac6e3cdfd3 -r a417edff4437 targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_opamp.c --- 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; } }