34 #if defined(OPAMP_PRESENT) && (OPAMP_COUNT == 1)
205 void OPAMP_Disable(DAC_TypeDef *dac, OPAMP_TypeDef opa)
207 EFM_ASSERT(DAC_REF_VALID(dac));
208 EFM_ASSERT(DAC_OPA_VALID(opa));
212 dac->CH0CTRL &= ~DAC_CH0CTRL_EN;
213 dac->OPACTRL &= ~DAC_OPACTRL_OPA0EN;
215 else if (opa == OPA1)
217 dac->CH1CTRL &= ~DAC_CH1CTRL_EN;
218 dac->OPACTRL &= ~DAC_OPACTRL_OPA1EN;
222 dac->OPACTRL &= ~DAC_OPACTRL_OPA2EN;
266 void OPAMP_Enable(DAC_TypeDef *dac, OPAMP_TypeDef opa,
const OPAMP_Init_TypeDef *init)
270 EFM_ASSERT(DAC_REF_VALID(dac));
271 EFM_ASSERT(DAC_OPA_VALID(opa));
272 EFM_ASSERT(init->bias <= (_DAC_BIASPROG_BIASPROG_MASK
273 >> _DAC_BIASPROG_BIASPROG_SHIFT));
277 EFM_ASSERT((init->outPen & ~_DAC_OPA0MUX_OUTPEN_MASK) == 0);
279 dac->BIASPROG = (dac->BIASPROG
280 & ~(_DAC_BIASPROG_BIASPROG_MASK
281 | DAC_BIASPROG_HALFBIAS))
282 | (init->bias << _DAC_BIASPROG_BIASPROG_SHIFT)
283 | (init->halfBias ? DAC_BIASPROG_HALFBIAS : 0);
285 if (init->defaultOffset)
287 offset = SYSTEM_GetCalibrationValue(&dac->CAL);
288 dac->CAL = (dac->CAL & ~_DAC_CAL_CH0OFFSET_MASK)
289 | (offset & _DAC_CAL_CH0OFFSET_MASK);
293 EFM_ASSERT(init->offset <= (_DAC_CAL_CH0OFFSET_MASK
294 >> _DAC_CAL_CH0OFFSET_SHIFT));
296 dac->CAL = (dac->CAL & ~_DAC_CAL_CH0OFFSET_MASK)
297 | (init->offset << _DAC_CAL_CH0OFFSET_SHIFT);
300 dac->OPA0MUX = (uint32_t)init->resSel
301 | (uint32_t)init->outMode
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);
310 dac->CH0CTRL |= DAC_CH0CTRL_EN;
311 dac->OPACTRL = (dac->OPACTRL
312 & ~(DAC_OPACTRL_OPA0SHORT
313 | _DAC_OPACTRL_OPA0LPFDIS_MASK
314 | DAC_OPACTRL_OPA0HCMDIS))
315 | (init->shortInputs ? DAC_OPACTRL_OPA0SHORT : 0)
316 | (init->lpfPosPadDisable
317 ? DAC_OPACTRL_OPA0LPFDIS_PLPFDIS : 0)
318 | (init->lpfNegPadDisable
319 ? DAC_OPACTRL_OPA0LPFDIS_NLPFDIS : 0)
320 | (init->hcmDisable ? DAC_OPACTRL_OPA0HCMDIS : 0)
321 | DAC_OPACTRL_OPA0EN;
323 else if ( opa == OPA1 )
325 EFM_ASSERT((init->outPen & ~_DAC_OPA1MUX_OUTPEN_MASK) == 0);
327 dac->BIASPROG = (dac->BIASPROG
328 & ~(_DAC_BIASPROG_BIASPROG_MASK
329 | DAC_BIASPROG_HALFBIAS))
330 | (init->bias << _DAC_BIASPROG_BIASPROG_SHIFT)
331 | (init->halfBias ? DAC_BIASPROG_HALFBIAS : 0 );
333 if (init->defaultOffset)
335 offset = SYSTEM_GetCalibrationValue(&dac->CAL);
336 dac->CAL = (dac->CAL & ~_DAC_CAL_CH1OFFSET_MASK)
337 | (offset & _DAC_CAL_CH1OFFSET_MASK);
341 EFM_ASSERT(init->offset <= (_DAC_CAL_CH1OFFSET_MASK
342 >> _DAC_CAL_CH1OFFSET_SHIFT));
344 dac->CAL = (dac->CAL & ~_DAC_CAL_CH1OFFSET_MASK)
345 | (init->offset << _DAC_CAL_CH1OFFSET_SHIFT);
348 dac->OPA1MUX = (uint32_t)init->resSel
349 | (uint32_t)init->outMode
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);
358 dac->CH1CTRL |= DAC_CH1CTRL_EN;
359 dac->OPACTRL = (dac->OPACTRL
360 & ~(DAC_OPACTRL_OPA1SHORT
361 | _DAC_OPACTRL_OPA1LPFDIS_MASK
362 | DAC_OPACTRL_OPA1HCMDIS))
363 | (init->shortInputs ? DAC_OPACTRL_OPA1SHORT : 0)
364 | (init->lpfPosPadDisable
365 ? DAC_OPACTRL_OPA1LPFDIS_PLPFDIS : 0)
366 | (init->lpfNegPadDisable
367 ? DAC_OPACTRL_OPA1LPFDIS_NLPFDIS : 0)
368 | (init->hcmDisable ? DAC_OPACTRL_OPA1HCMDIS : 0)
369 | DAC_OPACTRL_OPA1EN;
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));
378 EFM_ASSERT((init->outMode & ~DAC_OPA2MUX_OUTMODE) == 0);
380 EFM_ASSERT((init->outPen & ~_DAC_OPA2MUX_OUTPEN_MASK) == 0);
382 dac->BIASPROG = (dac->BIASPROG
383 & ~(_DAC_BIASPROG_OPA2BIASPROG_MASK
384 | DAC_BIASPROG_OPA2HALFBIAS))
385 | (init->bias << _DAC_BIASPROG_OPA2BIASPROG_SHIFT)
386 | (init->halfBias ? DAC_BIASPROG_OPA2HALFBIAS : 0);
388 if (init->defaultOffset)
390 offset = SYSTEM_GetCalibrationValue(&dac->OPAOFFSET);
391 dac->OPAOFFSET = (dac->OPAOFFSET & ~_DAC_OPAOFFSET_OPA2OFFSET_MASK)
392 | (offset & _DAC_OPAOFFSET_OPA2OFFSET_MASK);
396 EFM_ASSERT(init->offset <= (_DAC_OPAOFFSET_OPA2OFFSET_MASK
397 >> _DAC_OPAOFFSET_OPA2OFFSET_SHIFT));
398 dac->OPAOFFSET = (dac->OPAOFFSET & ~_DAC_OPAOFFSET_OPA2OFFSET_MASK)
399 | (init->offset << _DAC_OPAOFFSET_OPA2OFFSET_SHIFT);
402 dac->OPA2MUX = (uint32_t)init->resSel
403 | (uint32_t)init->outMode
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 );
412 dac->OPACTRL = (dac->OPACTRL
413 & ~(DAC_OPACTRL_OPA2SHORT
414 | _DAC_OPACTRL_OPA2LPFDIS_MASK
415 | DAC_OPACTRL_OPA2HCMDIS))
416 | (init->shortInputs ? DAC_OPACTRL_OPA2SHORT : 0)
417 | (init->lpfPosPadDisable
418 ? DAC_OPACTRL_OPA2LPFDIS_PLPFDIS : 0)
419 | (init->lpfNegPadDisable
420 ? DAC_OPACTRL_OPA2LPFDIS_NLPFDIS : 0)
421 | (init->hcmDisable ? DAC_OPACTRL_OPA2HCMDIS : 0)
422 | DAC_OPACTRL_OPA2EN;
Emlib peripheral API "assert" implementation.
Operational Amplifier (OPAMP) peripheral API.