EFM32 Wonder Gecko Software Documentation  efm32wg-doc-4.2.1
em_opamp.c
Go to the documentation of this file.
1 /**************************************************************************/
33 #include "em_opamp.h"
34 #if defined(OPAMP_PRESENT) && (OPAMP_COUNT == 1)
35 
36 #include "em_system.h"
37 #include "em_assert.h"
38 
39 /***************************************************************************/
45 /***************************************************************************/
191 /*******************************************************************************
192  ************************** GLOBAL FUNCTIONS *******************************
193  ******************************************************************************/
194 
195 /***************************************************************************/
206 {
207  EFM_ASSERT(DAC_REF_VALID(dac));
208  EFM_ASSERT(DAC_OPA_VALID(opa));
209 
210  if (opa == OPA0)
211  {
212  dac->CH0CTRL &= ~DAC_CH0CTRL_EN;
213  dac->OPACTRL &= ~DAC_OPACTRL_OPA0EN;
214  }
215  else if (opa == OPA1)
216  {
217  dac->CH1CTRL &= ~DAC_CH1CTRL_EN;
218  dac->OPACTRL &= ~DAC_OPACTRL_OPA1EN;
219  }
220  else /* OPA2 */
221  {
222  dac->OPACTRL &= ~DAC_OPACTRL_OPA2EN;
223  }
224 }
225 
226 
227 /***************************************************************************/
267 {
268  uint32_t offset;
269 
270  EFM_ASSERT(DAC_REF_VALID(dac));
271  EFM_ASSERT(DAC_OPA_VALID(opa));
272  EFM_ASSERT(init->bias <= (_DAC_BIASPROG_BIASPROG_MASK
274 
275  if (opa == OPA0)
276  {
277  EFM_ASSERT((init->outPen & ~_DAC_OPA0MUX_OUTPEN_MASK) == 0);
278 
279  dac->BIASPROG = (dac->BIASPROG
283  | (init->halfBias ? DAC_BIASPROG_HALFBIAS : 0);
284 
285  if (init->defaultOffset)
286  {
287  offset = SYSTEM_GetCalibrationValue(&dac->CAL);
288  dac->CAL = (dac->CAL & ~_DAC_CAL_CH0OFFSET_MASK)
289  | (offset & _DAC_CAL_CH0OFFSET_MASK);
290  }
291  else
292  {
293  EFM_ASSERT(init->offset <= (_DAC_CAL_CH0OFFSET_MASK
295 
296  dac->CAL = (dac->CAL & ~_DAC_CAL_CH0OFFSET_MASK)
297  | (init->offset << _DAC_CAL_CH0OFFSET_SHIFT);
298  }
299 
300  dac->OPA0MUX = (uint32_t)init->resSel
301  | (uint32_t)init->outMode
302  | init->outPen
303  | (uint32_t)init->resInMux
304  | (uint32_t)init->negSel
305  | (uint32_t)init->posSel
306  | ( init->nextOut ? DAC_OPA0MUX_NEXTOUT : 0)
307  | ( init->npEn ? DAC_OPA0MUX_NPEN : 0)
308  | ( init->ppEn ? DAC_OPA0MUX_PPEN : 0);
309 
310  dac->CH0CTRL |= DAC_CH0CTRL_EN;
311  dac->OPACTRL = (dac->OPACTRL
315  | (init->shortInputs ? DAC_OPACTRL_OPA0SHORT : 0)
316  | (init->lpfPosPadDisable
318  | (init->lpfNegPadDisable
320  | (init->hcmDisable ? DAC_OPACTRL_OPA0HCMDIS : 0)
322  }
323  else if ( opa == OPA1 )
324  {
325  EFM_ASSERT((init->outPen & ~_DAC_OPA1MUX_OUTPEN_MASK) == 0);
326 
327  dac->BIASPROG = (dac->BIASPROG
331  | (init->halfBias ? DAC_BIASPROG_HALFBIAS : 0 );
332 
333  if (init->defaultOffset)
334  {
335  offset = SYSTEM_GetCalibrationValue(&dac->CAL);
336  dac->CAL = (dac->CAL & ~_DAC_CAL_CH1OFFSET_MASK)
337  | (offset & _DAC_CAL_CH1OFFSET_MASK);
338  }
339  else
340  {
341  EFM_ASSERT(init->offset <= (_DAC_CAL_CH1OFFSET_MASK
343 
344  dac->CAL = (dac->CAL & ~_DAC_CAL_CH1OFFSET_MASK)
345  | (init->offset << _DAC_CAL_CH1OFFSET_SHIFT);
346  }
347 
348  dac->OPA1MUX = (uint32_t)init->resSel
349  | (uint32_t)init->outMode
350  | init->outPen
351  | (uint32_t)init->resInMux
352  | (uint32_t)init->negSel
353  | (uint32_t)init->posSel
354  | (init->nextOut ? DAC_OPA1MUX_NEXTOUT : 0)
355  | (init->npEn ? DAC_OPA1MUX_NPEN : 0)
356  | (init->ppEn ? DAC_OPA1MUX_PPEN : 0);
357 
358  dac->CH1CTRL |= DAC_CH1CTRL_EN;
359  dac->OPACTRL = (dac->OPACTRL
363  | (init->shortInputs ? DAC_OPACTRL_OPA1SHORT : 0)
364  | (init->lpfPosPadDisable
366  | (init->lpfNegPadDisable
368  | (init->hcmDisable ? DAC_OPACTRL_OPA1HCMDIS : 0)
370  }
371  else /* OPA2 */
372  {
373  EFM_ASSERT((init->posSel == DAC_OPA2MUX_POSSEL_DISABLE)
374  || (init->posSel == DAC_OPA2MUX_POSSEL_POSPAD)
375  || (init->posSel == DAC_OPA2MUX_POSSEL_OPA1INP)
376  || (init->posSel == DAC_OPA2MUX_POSSEL_OPATAP));
377 
378  EFM_ASSERT((init->outMode & ~DAC_OPA2MUX_OUTMODE) == 0);
379 
380  EFM_ASSERT((init->outPen & ~_DAC_OPA2MUX_OUTPEN_MASK) == 0);
381 
382  dac->BIASPROG = (dac->BIASPROG
386  | (init->halfBias ? DAC_BIASPROG_OPA2HALFBIAS : 0);
387 
388  if (init->defaultOffset)
389  {
390  offset = SYSTEM_GetCalibrationValue(&dac->OPAOFFSET);
392  | (offset & _DAC_OPAOFFSET_OPA2OFFSET_MASK);
393  }
394  else
395  {
396  EFM_ASSERT(init->offset <= (_DAC_OPAOFFSET_OPA2OFFSET_MASK
400  }
401 
402  dac->OPA2MUX = (uint32_t)init->resSel
403  | (uint32_t)init->outMode
404  | init->outPen
405  | (uint32_t)init->resInMux
406  | (uint32_t)init->negSel
407  | (uint32_t)init->posSel
408  | ( init->nextOut ? DAC_OPA2MUX_NEXTOUT : 0 )
409  | ( init->npEn ? DAC_OPA2MUX_NPEN : 0 )
410  | ( init->ppEn ? DAC_OPA2MUX_PPEN : 0 );
411 
412  dac->OPACTRL = (dac->OPACTRL
416  | (init->shortInputs ? DAC_OPACTRL_OPA2SHORT : 0)
417  | (init->lpfPosPadDisable
419  | (init->lpfNegPadDisable
421  | (init->hcmDisable ? DAC_OPACTRL_OPA2HCMDIS : 0)
423  }
424 }
425 
429 #endif /* defined( OPAMP_PRESENT ) && ( OPAMP_COUNT == 1 ) */
#define _DAC_OPA1MUX_OUTPEN_MASK
Definition: efm32wg_dac.h:653
void OPAMP_Enable(DAC_TypeDef *dac, OPAMP_TypeDef opa, const OPAMP_Init_TypeDef *init)
Configure and enable an Operational Amplifier.
Definition: em_opamp.c:266
OPAMP_PosSel_TypeDef posSel
Definition: em_opamp.h:136
Emlib peripheral API "assert" implementation.
#define DAC_OPA2MUX_POSSEL_POSPAD
Definition: efm32wg_dac.h:716
#define DAC_OPA0MUX_NEXTOUT
Definition: efm32wg_dac.h:573
#define _DAC_BIASPROG_BIASPROG_SHIFT
Definition: efm32wg_dac.h:394
#define DAC_OPACTRL_OPA1HCMDIS
Definition: efm32wg_dac.h:436
__IO uint32_t OPA2MUX
Definition: efm32wg_dac.h:61
#define DAC_OPA2MUX_POSSEL_OPATAP
Definition: efm32wg_dac.h:718
#define _DAC_CAL_CH1OFFSET_SHIFT
Definition: efm32wg_dac.h:382
#define DAC_OPACTRL_OPA0HCMDIS
Definition: efm32wg_dac.h:431
#define DAC_OPA2MUX_NEXTOUT
Definition: efm32wg_dac.h:768
#define DAC_OPACTRL_OPA1EN
Definition: efm32wg_dac.h:421
#define _DAC_OPACTRL_OPA0LPFDIS_MASK
Definition: efm32wg_dac.h:447
uint32_t outPen
Definition: em_opamp.h:140
#define DAC_OPACTRL_OPA1SHORT
Definition: efm32wg_dac.h:475
#define DAC_BIASPROG_HALFBIAS
Definition: efm32wg_dac.h:398
OPAMP_ResInMux_TypeDef resInMux
Definition: em_opamp.h:139
#define _DAC_CAL_CH0OFFSET_SHIFT
Definition: efm32wg_dac.h:378
#define DAC_OPA1MUX_PPEN
Definition: efm32wg_dac.h:642
#define _DAC_BIASPROG_OPA2BIASPROG_SHIFT
Definition: efm32wg_dac.h:403
#define DAC_OPACTRL_OPA1LPFDIS_PLPFDIS
Definition: efm32wg_dac.h:460
#define DAC_CH1CTRL_EN
Definition: efm32wg_dac.h:207
OPAMP_NegSel_TypeDef negSel
Definition: em_opamp.h:135
uint32_t SYSTEM_GetCalibrationValue(volatile uint32_t *regAddress)
Get factory calibration value for a given peripheral register.
Definition: em_system.c:92
OPAMP_TypeDef
Definition: em_opamp.h:69
#define DAC_OPA2MUX_NPEN
Definition: efm32wg_dac.h:750
#define DAC_OPACTRL_OPA0LPFDIS_PLPFDIS
Definition: efm32wg_dac.h:452
#define _DAC_BIASPROG_BIASPROG_MASK
Definition: efm32wg_dac.h:395
#define DAC_OPA2MUX_POSSEL_DISABLE
Definition: efm32wg_dac.h:715
#define DAC_OPA0MUX_PPEN
Definition: efm32wg_dac.h:537
__IO uint32_t OPA0MUX
Definition: efm32wg_dac.h:59
#define DAC_OPACTRL_OPA2HCMDIS
Definition: efm32wg_dac.h:441
#define DAC_OPACTRL_OPA2SHORT
Definition: efm32wg_dac.h:480
#define DAC_OPACTRL_OPA0EN
Definition: efm32wg_dac.h:416
__IO uint32_t OPA1MUX
Definition: efm32wg_dac.h:60
__IO uint32_t BIASPROG
Definition: efm32wg_dac.h:55
#define _DAC_OPACTRL_OPA1LPFDIS_MASK
Definition: efm32wg_dac.h:455
#define DAC_OPA2MUX_POSSEL_OPA1INP
Definition: efm32wg_dac.h:717
OPAMP_ResSel_TypeDef resSel
Definition: em_opamp.h:138
#define DAC_OPA0MUX_NPEN
Definition: efm32wg_dac.h:542
__IO uint32_t OPACTRL
Definition: efm32wg_dac.h:57
#define DAC_OPACTRL_OPA2LPFDIS_NLPFDIS
Definition: efm32wg_dac.h:469
uint32_t offset
Definition: em_opamp.h:177
#define DAC_OPA1MUX_NEXTOUT
Definition: efm32wg_dac.h:678
Definition: em_opamp.h:71
#define DAC_OPACTRL_OPA0SHORT
Definition: efm32wg_dac.h:470
#define DAC_BIASPROG_OPA2HALFBIAS
Definition: efm32wg_dac.h:407
#define DAC_OPACTRL_OPA0LPFDIS_NLPFDIS
Definition: efm32wg_dac.h:453
__IO uint32_t CAL
Definition: efm32wg_dac.h:54
#define DAC_OPA2MUX_OUTMODE
Definition: efm32wg_dac.h:763
#define _DAC_CAL_CH0OFFSET_MASK
Definition: efm32wg_dac.h:379
#define DAC_OPA2MUX_PPEN
Definition: efm32wg_dac.h:745
#define DAC_OPACTRL_OPA2EN
Definition: efm32wg_dac.h:426
#define _DAC_OPA2MUX_OUTPEN_MASK
Definition: efm32wg_dac.h:756
#define _DAC_OPA0MUX_OUTPEN_MASK
Definition: efm32wg_dac.h:548
#define _DAC_OPACTRL_OPA2LPFDIS_MASK
Definition: efm32wg_dac.h:463
__IO uint32_t CH0CTRL
Definition: efm32wg_dac.h:45
#define _DAC_OPAOFFSET_OPA2OFFSET_MASK
Definition: efm32wg_dac.h:490
#define DAC_OPACTRL_OPA1LPFDIS_NLPFDIS
Definition: efm32wg_dac.h:461
System API.
#define DAC_OPACTRL_OPA2LPFDIS_PLPFDIS
Definition: efm32wg_dac.h:468
Definition: em_opamp.h:72
void OPAMP_Disable(DAC_TypeDef *dac, OPAMP_TypeDef opa)
Disable an Operational Amplifier.
Definition: em_opamp.c:205
__IO uint32_t OPAOFFSET
Definition: efm32wg_dac.h:58
#define _DAC_CAL_CH1OFFSET_MASK
Definition: efm32wg_dac.h:383
#define _DAC_OPAOFFSET_OPA2OFFSET_SHIFT
Definition: efm32wg_dac.h:489
Operational Amplifier (OPAMP) peripheral API.
__IO uint32_t CH1CTRL
Definition: efm32wg_dac.h:46
#define _DAC_BIASPROG_OPA2BIASPROG_MASK
Definition: efm32wg_dac.h:404
OPAMP_OutMode_TypeDef outMode
Definition: em_opamp.h:137
#define DAC_OPA1MUX_NPEN
Definition: efm32wg_dac.h:647
#define DAC_CH0CTRL_EN
Definition: efm32wg_dac.h:160