The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anna Bridge 142:4eea097334d6 1 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 2 * @file em_vdac.h
Anna Bridge 142:4eea097334d6 3 * @brief Digital to Analog Converter (VDAC) peripheral API
Anna Bridge 160:5571c4ff569f 4 * @version 5.3.3
Anna Bridge 142:4eea097334d6 5 *******************************************************************************
Anna Bridge 160:5571c4ff569f 6 * # License
Anna Bridge 142:4eea097334d6 7 * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b>
Anna Bridge 142:4eea097334d6 8 *******************************************************************************
Anna Bridge 142:4eea097334d6 9 *
Anna Bridge 142:4eea097334d6 10 * Permission is granted to anyone to use this software for any purpose,
Anna Bridge 142:4eea097334d6 11 * including commercial applications, and to alter it and redistribute it
Anna Bridge 142:4eea097334d6 12 * freely, subject to the following restrictions:
Anna Bridge 142:4eea097334d6 13 *
Anna Bridge 142:4eea097334d6 14 * 1. The origin of this software must not be misrepresented; you must not
Anna Bridge 142:4eea097334d6 15 * claim that you wrote the original software.
Anna Bridge 142:4eea097334d6 16 * 2. Altered source versions must be plainly marked as such, and must not be
Anna Bridge 142:4eea097334d6 17 * misrepresented as being the original software.
Anna Bridge 142:4eea097334d6 18 * 3. This notice may not be removed or altered from any source distribution.
Anna Bridge 142:4eea097334d6 19 *
Anna Bridge 142:4eea097334d6 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
Anna Bridge 142:4eea097334d6 21 * obligation to support this Software. Silicon Labs is providing the
Anna Bridge 142:4eea097334d6 22 * Software "AS IS", with no express or implied warranties of any kind,
Anna Bridge 142:4eea097334d6 23 * including, but not limited to, any implied warranties of merchantability
Anna Bridge 142:4eea097334d6 24 * or fitness for any particular purpose or warranties against infringement
Anna Bridge 142:4eea097334d6 25 * of any proprietary rights of a third party.
Anna Bridge 142:4eea097334d6 26 *
Anna Bridge 142:4eea097334d6 27 * Silicon Labs will not be liable for any consequential, incidental, or
Anna Bridge 142:4eea097334d6 28 * special damages, or any other relief, or for any claim by any third party,
Anna Bridge 142:4eea097334d6 29 * arising from your use of this Software.
Anna Bridge 142:4eea097334d6 30 *
Anna Bridge 142:4eea097334d6 31 ******************************************************************************/
Anna Bridge 142:4eea097334d6 32
Anna Bridge 142:4eea097334d6 33 #ifndef EM_VDAC_H
Anna Bridge 142:4eea097334d6 34 #define EM_VDAC_H
Anna Bridge 142:4eea097334d6 35
Anna Bridge 142:4eea097334d6 36 #include "em_device.h"
Anna Bridge 142:4eea097334d6 37
Anna Bridge 142:4eea097334d6 38 #if defined(VDAC_COUNT) && (VDAC_COUNT > 0)
Anna Bridge 142:4eea097334d6 39
Anna Bridge 142:4eea097334d6 40 #include "em_assert.h"
Anna Bridge 142:4eea097334d6 41 #include <stdbool.h>
Anna Bridge 142:4eea097334d6 42
Anna Bridge 142:4eea097334d6 43 #ifdef __cplusplus
Anna Bridge 142:4eea097334d6 44 extern "C" {
Anna Bridge 142:4eea097334d6 45 #endif
Anna Bridge 142:4eea097334d6 46
Anna Bridge 142:4eea097334d6 47 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 48 * @addtogroup emlib
Anna Bridge 142:4eea097334d6 49 * @{
Anna Bridge 142:4eea097334d6 50 ******************************************************************************/
Anna Bridge 142:4eea097334d6 51
Anna Bridge 142:4eea097334d6 52 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 53 * @addtogroup VDAC
Anna Bridge 142:4eea097334d6 54 * @brief Digital to Analog Voltage Converter (VDAC) Peripheral API
Anna Bridge 142:4eea097334d6 55 *
Anna Bridge 142:4eea097334d6 56 * @details
Anna Bridge 142:4eea097334d6 57 * This module contains functions to control the VDAC peripheral of Silicon
Anna Bridge 142:4eea097334d6 58 * Labs 32-bit MCUs and SoCs. The VDAC converts digital values to analog
Anna Bridge 142:4eea097334d6 59 * signals at up to 500 ksps with 12-bit accuracy. The VDAC is designed for
Anna Bridge 142:4eea097334d6 60 * low energy consumption, but can also provide very good performance.
Anna Bridge 142:4eea097334d6 61 *
Anna Bridge 142:4eea097334d6 62 * The following steps are necessary for basic operation:
Anna Bridge 142:4eea097334d6 63 *
Anna Bridge 142:4eea097334d6 64 * Clock enable:
Anna Bridge 142:4eea097334d6 65 * @code
Anna Bridge 142:4eea097334d6 66 CMU_ClockEnable(cmuClock_VDAC0, true);@endcode
Anna Bridge 142:4eea097334d6 67 *
Anna Bridge 142:4eea097334d6 68 * Initialize the VDAC with default settings and modify selected fields:
Anna Bridge 142:4eea097334d6 69 * @code
Anna Bridge 142:4eea097334d6 70 VDAC_Init_TypeDef vdacInit = VDAC_INIT_DEFAULT;
Anna Bridge 142:4eea097334d6 71 VDAC_InitChannel_TypeDef vdacChInit = VDAC_INITCHANNEL_DEFAULT;
Anna Bridge 142:4eea097334d6 72
Anna Bridge 142:4eea097334d6 73 // Set prescaler to get 1 MHz VDAC clock frequency.
Anna Bridge 142:4eea097334d6 74 vdacInit.prescaler = VDAC_PrescaleCalc(1000000, true, 0);
Anna Bridge 142:4eea097334d6 75 VDAC_Init(VDAC0, &vdacInit);
Anna Bridge 142:4eea097334d6 76
Anna Bridge 142:4eea097334d6 77 vdacChInit.enable = true;
Anna Bridge 142:4eea097334d6 78 VDAC_InitChannel(VDAC0, &vdacChInit, 0);@endcode
Anna Bridge 142:4eea097334d6 79 *
Anna Bridge 142:4eea097334d6 80 * Perform a conversion:
Anna Bridge 142:4eea097334d6 81 * @code
Anna Bridge 142:4eea097334d6 82 VDAC_ChannelOutputSet(VDAC0, 0, 250);@endcode
Anna Bridge 142:4eea097334d6 83 *
Anna Bridge 142:4eea097334d6 84 * @note The output stage of a VDAC channel consist of an onchip operational
Anna Bridge 142:4eea097334d6 85 * amplifier in the OPAMP module. This opamp is highly configurable and to
Anna Bridge 142:4eea097334d6 86 * exploit the VDAC functionality fully, you might need to configure the opamp
Anna Bridge 142:4eea097334d6 87 * using the OPAMP API. By using the OPAMP API you will also load opamp
Anna Bridge 142:4eea097334d6 88 * calibration values. The default (reset) settings of the opamp will be
Anna Bridge 142:4eea097334d6 89 * sufficient for many applications.
Anna Bridge 142:4eea097334d6 90 * @{
Anna Bridge 142:4eea097334d6 91 ******************************************************************************/
Anna Bridge 142:4eea097334d6 92
Anna Bridge 142:4eea097334d6 93 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
Anna Bridge 142:4eea097334d6 94
Anna Bridge 142:4eea097334d6 95 /** Validation of VDAC register block pointer reference for assert statements.*/
Anna Bridge 142:4eea097334d6 96 #define VDAC_REF_VALID(ref) ((ref) == VDAC0)
Anna Bridge 142:4eea097334d6 97
Anna Bridge 142:4eea097334d6 98 /** @endcond */
Anna Bridge 142:4eea097334d6 99
Anna Bridge 142:4eea097334d6 100 /*******************************************************************************
Anna Bridge 142:4eea097334d6 101 ******************************** ENUMS ************************************
Anna Bridge 142:4eea097334d6 102 ******************************************************************************/
Anna Bridge 142:4eea097334d6 103
Anna Bridge 142:4eea097334d6 104 /** Channel refresh period. */
Anna Bridge 160:5571c4ff569f 105 typedef enum {
Anna Bridge 142:4eea097334d6 106 vdacRefresh8 = _VDAC_CTRL_REFRESHPERIOD_8CYCLES, /**< Refresh every 8 clock cycles. */
Anna Bridge 142:4eea097334d6 107 vdacRefresh16 = _VDAC_CTRL_REFRESHPERIOD_16CYCLES, /**< Refresh every 16 clock cycles. */
Anna Bridge 142:4eea097334d6 108 vdacRefresh32 = _VDAC_CTRL_REFRESHPERIOD_32CYCLES, /**< Refresh every 32 clock cycles. */
Anna Bridge 142:4eea097334d6 109 vdacRefresh64 = _VDAC_CTRL_REFRESHPERIOD_64CYCLES, /**< Refresh every 64 clock cycles. */
Anna Bridge 142:4eea097334d6 110 } VDAC_Refresh_TypeDef;
Anna Bridge 142:4eea097334d6 111
Anna Bridge 142:4eea097334d6 112 /** Reference voltage for VDAC. */
Anna Bridge 160:5571c4ff569f 113 typedef enum {
Anna Bridge 142:4eea097334d6 114 vdacRef1V25Ln = _VDAC_CTRL_REFSEL_1V25LN, /**< Internal low noise 1.25 V bandgap reference. */
Anna Bridge 142:4eea097334d6 115 vdacRef2V5Ln = _VDAC_CTRL_REFSEL_2V5LN, /**< Internal low noise 2.5 V bandgap reference. */
Anna Bridge 142:4eea097334d6 116 vdacRef1V25 = _VDAC_CTRL_REFSEL_1V25, /**< Internal 1.25 V bandgap reference. */
Anna Bridge 142:4eea097334d6 117 vdacRef2V5 = _VDAC_CTRL_REFSEL_2V5, /**< Internal 2.5 V bandgap reference. */
Anna Bridge 142:4eea097334d6 118 vdacRefAvdd = _VDAC_CTRL_REFSEL_VDD, /**< AVDD reference. */
Anna Bridge 142:4eea097334d6 119 vdacRefExtPin = _VDAC_CTRL_REFSEL_EXT, /**< External pin reference. */
Anna Bridge 142:4eea097334d6 120 } VDAC_Ref_TypeDef;
Anna Bridge 142:4eea097334d6 121
Anna Bridge 142:4eea097334d6 122 /** Peripheral Reflex System signal used to trig VDAC channel conversion. */
Anna Bridge 160:5571c4ff569f 123 typedef enum {
Anna Bridge 160:5571c4ff569f 124 vdacPrsSelCh0 = _VDAC_CH0CTRL_PRSSEL_PRSCH0, /**< PRS ch 0 triggers conversion. */
Anna Bridge 160:5571c4ff569f 125 vdacPrsSelCh1 = _VDAC_CH0CTRL_PRSSEL_PRSCH1, /**< PRS ch 1 triggers conversion. */
Anna Bridge 160:5571c4ff569f 126 vdacPrsSelCh2 = _VDAC_CH0CTRL_PRSSEL_PRSCH2, /**< PRS ch 2 triggers conversion. */
Anna Bridge 160:5571c4ff569f 127 vdacPrsSelCh3 = _VDAC_CH0CTRL_PRSSEL_PRSCH3, /**< PRS ch 3 triggers conversion. */
Anna Bridge 160:5571c4ff569f 128 vdacPrsSelCh4 = _VDAC_CH0CTRL_PRSSEL_PRSCH4, /**< PRS ch 4 triggers conversion. */
Anna Bridge 160:5571c4ff569f 129 vdacPrsSelCh5 = _VDAC_CH0CTRL_PRSSEL_PRSCH5, /**< PRS ch 5 triggers conversion. */
Anna Bridge 160:5571c4ff569f 130 vdacPrsSelCh6 = _VDAC_CH0CTRL_PRSSEL_PRSCH6, /**< PRS ch 6 triggers conversion. */
Anna Bridge 160:5571c4ff569f 131 vdacPrsSelCh7 = _VDAC_CH0CTRL_PRSSEL_PRSCH7, /**< PRS ch 7 triggers conversion. */
Anna Bridge 160:5571c4ff569f 132 #if defined(_VDAC_CH0CTRL_PRSSEL_PRSCH8)
Anna Bridge 160:5571c4ff569f 133 vdacPrsSelCh8 = _VDAC_CH0CTRL_PRSSEL_PRSCH8, /**< PRS ch 8 triggers conversion. */
Anna Bridge 160:5571c4ff569f 134 #endif
Anna Bridge 160:5571c4ff569f 135 #if defined(_VDAC_CH0CTRL_PRSSEL_PRSCH9)
Anna Bridge 160:5571c4ff569f 136 vdacPrsSelCh9 = _VDAC_CH0CTRL_PRSSEL_PRSCH9, /**< PRS ch 9 triggers conversion. */
Anna Bridge 160:5571c4ff569f 137 #endif
Anna Bridge 160:5571c4ff569f 138 #if defined(_VDAC_CH0CTRL_PRSSEL_PRSCH10)
Anna Bridge 142:4eea097334d6 139 vdacPrsSelCh10 = _VDAC_CH0CTRL_PRSSEL_PRSCH10, /**< PRS ch 10 triggers conversion. */
Anna Bridge 160:5571c4ff569f 140 #endif
Anna Bridge 160:5571c4ff569f 141 #if defined(_VDAC_CH0CTRL_PRSSEL_PRSCH11)
Anna Bridge 142:4eea097334d6 142 vdacPrsSelCh11 = _VDAC_CH0CTRL_PRSSEL_PRSCH11, /**< PRS ch 11 triggers conversion. */
Anna Bridge 160:5571c4ff569f 143 #endif
Anna Bridge 142:4eea097334d6 144 } VDAC_PrsSel_TypeDef;
Anna Bridge 142:4eea097334d6 145
Anna Bridge 142:4eea097334d6 146 /** Channel conversion trigger mode. */
Anna Bridge 160:5571c4ff569f 147 typedef enum {
Anna Bridge 142:4eea097334d6 148 vdacTrigModeSw = _VDAC_CH0CTRL_TRIGMODE_SW, /**< Channel is triggered by CHnDATA or COMBDATA write. */
Anna Bridge 142:4eea097334d6 149 vdacTrigModePrs = _VDAC_CH0CTRL_TRIGMODE_PRS, /**< Channel is triggered by PRS input. */
Anna Bridge 142:4eea097334d6 150 vdacTrigModeRefresh = _VDAC_CH0CTRL_TRIGMODE_REFRESH, /**< Channel is triggered by Refresh timer. */
Anna Bridge 142:4eea097334d6 151 vdacTrigModeSwPrs = _VDAC_CH0CTRL_TRIGMODE_SWPRS, /**< Channel is triggered by CHnDATA/COMBDATA write or PRS input. */
Anna Bridge 142:4eea097334d6 152 vdacTrigModeSwRefresh = _VDAC_CH0CTRL_TRIGMODE_SWREFRESH, /**< Channel is triggered by CHnDATA/COMBDATA write or Refresh timer. */
Anna Bridge 142:4eea097334d6 153 vdacTrigModeLesense = _VDAC_CH0CTRL_TRIGMODE_LESENSE, /**< Channel is triggered by LESENSE. */
Anna Bridge 142:4eea097334d6 154 } VDAC_TrigMode_TypeDef;
Anna Bridge 142:4eea097334d6 155
Anna Bridge 142:4eea097334d6 156 /*******************************************************************************
Anna Bridge 142:4eea097334d6 157 ******************************* STRUCTS ***********************************
Anna Bridge 142:4eea097334d6 158 ******************************************************************************/
Anna Bridge 142:4eea097334d6 159
Anna Bridge 142:4eea097334d6 160 /** VDAC init structure, common for both channels. */
Anna Bridge 160:5571c4ff569f 161 typedef struct {
Anna Bridge 142:4eea097334d6 162 /** Select between main and alternate output path calibration values. */
Anna Bridge 142:4eea097334d6 163 bool mainCalibration;
Anna Bridge 142:4eea097334d6 164
Anna Bridge 142:4eea097334d6 165 /** Selects clock from asynchronous or synchronous (with respect to
Anna Bridge 142:4eea097334d6 166 peripheral clock) source */
Anna Bridge 142:4eea097334d6 167 bool asyncClockMode;
Anna Bridge 142:4eea097334d6 168
Anna Bridge 142:4eea097334d6 169 /** Warmup mode, keep VDAC on (in idle) - or shutdown between conversions.*/
Anna Bridge 142:4eea097334d6 170 bool warmupKeepOn;
Anna Bridge 142:4eea097334d6 171
Anna Bridge 142:4eea097334d6 172 /** Channel refresh period. */
Anna Bridge 142:4eea097334d6 173 VDAC_Refresh_TypeDef refresh;
Anna Bridge 142:4eea097334d6 174
Anna Bridge 142:4eea097334d6 175 /** Prescaler for VDAC clock. Clock is source clock divided by prescaler+1. */
Anna Bridge 142:4eea097334d6 176 uint32_t prescaler;
Anna Bridge 142:4eea097334d6 177
Anna Bridge 142:4eea097334d6 178 /** Reference voltage to use. */
Anna Bridge 142:4eea097334d6 179 VDAC_Ref_TypeDef reference;
Anna Bridge 142:4eea097334d6 180
Anna Bridge 142:4eea097334d6 181 /** Enable/disable reset of prescaler on CH 0 start. */
Anna Bridge 142:4eea097334d6 182 bool ch0ResetPre;
Anna Bridge 142:4eea097334d6 183
Anna Bridge 142:4eea097334d6 184 /** Enable/disable output enable control by CH1 PRS signal. */
Anna Bridge 142:4eea097334d6 185 bool outEnablePRS;
Anna Bridge 142:4eea097334d6 186
Anna Bridge 142:4eea097334d6 187 /** Enable/disable sine mode. */
Anna Bridge 142:4eea097334d6 188 bool sineEnable;
Anna Bridge 142:4eea097334d6 189
Anna Bridge 142:4eea097334d6 190 /** Select if single ended or differential output mode. */
Anna Bridge 142:4eea097334d6 191 bool diff;
Anna Bridge 142:4eea097334d6 192 } VDAC_Init_TypeDef;
Anna Bridge 142:4eea097334d6 193
Anna Bridge 142:4eea097334d6 194 /** Default config for VDAC init structure. */
Anna Bridge 160:5571c4ff569f 195 #define VDAC_INIT_DEFAULT \
Anna Bridge 160:5571c4ff569f 196 { \
Anna Bridge 160:5571c4ff569f 197 true, /* Use main output path calibration values. */ \
Anna Bridge 160:5571c4ff569f 198 false, /* Use synchronous clock mode. */ \
Anna Bridge 160:5571c4ff569f 199 false, /* Turn off between sample off conversions.*/ \
Anna Bridge 160:5571c4ff569f 200 vdacRefresh8, /* Refresh every 8th cycle. */ \
Anna Bridge 160:5571c4ff569f 201 0, /* No prescaling. */ \
Anna Bridge 160:5571c4ff569f 202 vdacRef1V25Ln, /* 1.25V internal low noise reference. */ \
Anna Bridge 160:5571c4ff569f 203 false, /* Do not reset prescaler on CH 0 start. */ \
Anna Bridge 160:5571c4ff569f 204 false, /* VDAC output enable always on. */ \
Anna Bridge 160:5571c4ff569f 205 false, /* Disable sine mode. */ \
Anna Bridge 160:5571c4ff569f 206 false /* Single ended mode. */ \
Anna Bridge 160:5571c4ff569f 207 }
Anna Bridge 142:4eea097334d6 208
Anna Bridge 142:4eea097334d6 209 /** VDAC channel init structure. */
Anna Bridge 160:5571c4ff569f 210 typedef struct {
Anna Bridge 142:4eea097334d6 211 /** Enable channel. */
Anna Bridge 142:4eea097334d6 212 bool enable;
Anna Bridge 142:4eea097334d6 213
Anna Bridge 142:4eea097334d6 214 /**
Anna Bridge 142:4eea097334d6 215 * Peripheral reflex system trigger selection. Only applicable if @p trigMode
Anna Bridge 142:4eea097334d6 216 * is set to @p vdacTrigModePrs or @p vdacTrigModeSwPrs. */
Anna Bridge 142:4eea097334d6 217 VDAC_PrsSel_TypeDef prsSel;
Anna Bridge 142:4eea097334d6 218
Anna Bridge 142:4eea097334d6 219 /** Treat the PRS signal asynchronously. */
Anna Bridge 142:4eea097334d6 220 bool prsAsync;
Anna Bridge 142:4eea097334d6 221
Anna Bridge 142:4eea097334d6 222 /** Channel conversion trigger mode. */
Anna Bridge 142:4eea097334d6 223 VDAC_TrigMode_TypeDef trigMode;
Anna Bridge 142:4eea097334d6 224
Anna Bridge 142:4eea097334d6 225 /** Set channel conversion mode to sample/shut-off mode. Default is
Anna Bridge 142:4eea097334d6 226 * continous.*/
Anna Bridge 142:4eea097334d6 227 bool sampleOffMode;
Anna Bridge 142:4eea097334d6 228 } VDAC_InitChannel_TypeDef;
Anna Bridge 142:4eea097334d6 229
Anna Bridge 142:4eea097334d6 230 /** Default config for VDAC channel init structure. */
Anna Bridge 160:5571c4ff569f 231 #define VDAC_INITCHANNEL_DEFAULT \
Anna Bridge 160:5571c4ff569f 232 { \
Anna Bridge 160:5571c4ff569f 233 false, /* Leave channel disabled when init done. */ \
Anna Bridge 160:5571c4ff569f 234 vdacPrsSelCh0, /* PRS CH 0 triggers conversion. */ \
Anna Bridge 160:5571c4ff569f 235 false, /* Treat PRS channel as a synchronous signal. */ \
Anna Bridge 160:5571c4ff569f 236 vdacTrigModeSw, /* Conversion trigged by CH0DATA or COMBDATA write. */ \
Anna Bridge 160:5571c4ff569f 237 false, /* Channel conversion set to continous. */ \
Anna Bridge 160:5571c4ff569f 238 }
Anna Bridge 142:4eea097334d6 239
Anna Bridge 142:4eea097334d6 240 /*******************************************************************************
Anna Bridge 142:4eea097334d6 241 ***************************** PROTOTYPES **********************************
Anna Bridge 142:4eea097334d6 242 ******************************************************************************/
Anna Bridge 142:4eea097334d6 243
Anna Bridge 142:4eea097334d6 244 void VDAC_ChannelOutputSet(VDAC_TypeDef *vdac,
Anna Bridge 142:4eea097334d6 245 unsigned int channel,
Anna Bridge 142:4eea097334d6 246 uint32_t value);
Anna Bridge 142:4eea097334d6 247 void VDAC_Enable(VDAC_TypeDef *vdac, unsigned int ch, bool enable);
Anna Bridge 142:4eea097334d6 248 void VDAC_Init(VDAC_TypeDef *vdac, const VDAC_Init_TypeDef *init);
Anna Bridge 142:4eea097334d6 249 void VDAC_InitChannel(VDAC_TypeDef *vdac,
Anna Bridge 142:4eea097334d6 250 const VDAC_InitChannel_TypeDef *init,
Anna Bridge 142:4eea097334d6 251 unsigned int ch);
Anna Bridge 142:4eea097334d6 252
Anna Bridge 142:4eea097334d6 253 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 254 * @brief
Anna Bridge 142:4eea097334d6 255 * Set the output signal of VDAC channel 0 to a given value.
Anna Bridge 142:4eea097334d6 256 *
Anna Bridge 142:4eea097334d6 257 * @details
Anna Bridge 142:4eea097334d6 258 * This function sets the output signal of VDAC channel 0 by writing @p value
Anna Bridge 142:4eea097334d6 259 * to the CH0DATA register.
Anna Bridge 142:4eea097334d6 260 *
Anna Bridge 142:4eea097334d6 261 * @param[in] vdac
Anna Bridge 142:4eea097334d6 262 * Pointer to VDAC peripheral register block.
Anna Bridge 142:4eea097334d6 263 *
Anna Bridge 142:4eea097334d6 264 * @param[in] value
Anna Bridge 142:4eea097334d6 265 * Value to write to channel 0 output register CH0DATA.
Anna Bridge 142:4eea097334d6 266 ******************************************************************************/
Anna Bridge 142:4eea097334d6 267 __STATIC_INLINE void VDAC_Channel0OutputSet(VDAC_TypeDef *vdac,
Anna Bridge 142:4eea097334d6 268 uint32_t value)
Anna Bridge 142:4eea097334d6 269 {
Anna Bridge 160:5571c4ff569f 270 EFM_ASSERT(value <= _VDAC_CH0DATA_MASK);
Anna Bridge 142:4eea097334d6 271 vdac->CH0DATA = value;
Anna Bridge 142:4eea097334d6 272 }
Anna Bridge 142:4eea097334d6 273
Anna Bridge 142:4eea097334d6 274 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 275 * @brief
Anna Bridge 142:4eea097334d6 276 * Set the output signal of VDAC channel 1 to a given value.
Anna Bridge 142:4eea097334d6 277 *
Anna Bridge 142:4eea097334d6 278 * @details
Anna Bridge 142:4eea097334d6 279 * This function sets the output signal of VDAC channel 1 by writing @p value
Anna Bridge 142:4eea097334d6 280 * to the CH1DATA register.
Anna Bridge 142:4eea097334d6 281 *
Anna Bridge 142:4eea097334d6 282 * @param[in] vdac
Anna Bridge 142:4eea097334d6 283 * Pointer to VDAC peripheral register block.
Anna Bridge 142:4eea097334d6 284 *
Anna Bridge 142:4eea097334d6 285 * @param[in] value
Anna Bridge 142:4eea097334d6 286 * Value to write to channel 1 output register CH1DATA.
Anna Bridge 142:4eea097334d6 287 ******************************************************************************/
Anna Bridge 142:4eea097334d6 288 __STATIC_INLINE void VDAC_Channel1OutputSet(VDAC_TypeDef *vdac,
Anna Bridge 142:4eea097334d6 289 uint32_t value)
Anna Bridge 142:4eea097334d6 290 {
Anna Bridge 160:5571c4ff569f 291 EFM_ASSERT(value <= _VDAC_CH1DATA_MASK);
Anna Bridge 142:4eea097334d6 292 vdac->CH1DATA = value;
Anna Bridge 142:4eea097334d6 293 }
Anna Bridge 142:4eea097334d6 294
Anna Bridge 142:4eea097334d6 295 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 296 * @brief
Anna Bridge 142:4eea097334d6 297 * Clear one or more pending VDAC interrupts.
Anna Bridge 142:4eea097334d6 298 *
Anna Bridge 142:4eea097334d6 299 * @param[in] vdac
Anna Bridge 142:4eea097334d6 300 * Pointer to VDAC peripheral register block.
Anna Bridge 142:4eea097334d6 301 *
Anna Bridge 142:4eea097334d6 302 * @param[in] flags
Anna Bridge 142:4eea097334d6 303 * Pending VDAC interrupt source to clear. Use a bitwise logic OR combination
Anna Bridge 142:4eea097334d6 304 * of valid interrupt flags for the VDAC module (VDAC_IF_nnn).
Anna Bridge 142:4eea097334d6 305 ******************************************************************************/
Anna Bridge 142:4eea097334d6 306 __STATIC_INLINE void VDAC_IntClear(VDAC_TypeDef *vdac, uint32_t flags)
Anna Bridge 142:4eea097334d6 307 {
Anna Bridge 142:4eea097334d6 308 vdac->IFC = flags;
Anna Bridge 142:4eea097334d6 309 }
Anna Bridge 142:4eea097334d6 310
Anna Bridge 142:4eea097334d6 311 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 312 * @brief
Anna Bridge 142:4eea097334d6 313 * Disable one or more VDAC interrupts.
Anna Bridge 142:4eea097334d6 314 *
Anna Bridge 142:4eea097334d6 315 * @param[in] vdac
Anna Bridge 142:4eea097334d6 316 * Pointer to VDAC peripheral register block.
Anna Bridge 142:4eea097334d6 317 *
Anna Bridge 142:4eea097334d6 318 * @param[in] flags
Anna Bridge 142:4eea097334d6 319 * VDAC interrupt sources to disable. Use a bitwise logic OR combination of
Anna Bridge 142:4eea097334d6 320 * valid interrupt flags for the VDAC module (VDAC_IF_nnn).
Anna Bridge 142:4eea097334d6 321 ******************************************************************************/
Anna Bridge 142:4eea097334d6 322 __STATIC_INLINE void VDAC_IntDisable(VDAC_TypeDef *vdac, uint32_t flags)
Anna Bridge 142:4eea097334d6 323 {
Anna Bridge 142:4eea097334d6 324 vdac->IEN &= ~flags;
Anna Bridge 142:4eea097334d6 325 }
Anna Bridge 142:4eea097334d6 326
Anna Bridge 142:4eea097334d6 327 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 328 * @brief
Anna Bridge 142:4eea097334d6 329 * Enable one or more VDAC interrupts.
Anna Bridge 142:4eea097334d6 330 *
Anna Bridge 142:4eea097334d6 331 * @note
Anna Bridge 142:4eea097334d6 332 * Depending on the use, a pending interrupt may already be set prior to
Anna Bridge 142:4eea097334d6 333 * enabling the interrupt. Consider using VDAC_IntClear() prior to enabling
Anna Bridge 142:4eea097334d6 334 * if such a pending interrupt should be ignored.
Anna Bridge 142:4eea097334d6 335 *
Anna Bridge 142:4eea097334d6 336 * @param[in] vdac
Anna Bridge 142:4eea097334d6 337 * Pointer to VDAC peripheral register block.
Anna Bridge 142:4eea097334d6 338 *
Anna Bridge 142:4eea097334d6 339 * @param[in] flags
Anna Bridge 142:4eea097334d6 340 * VDAC interrupt sources to enable. Use a bitwise logic OR combination of
Anna Bridge 142:4eea097334d6 341 * valid interrupt flags for the VDAC module (VDAC_IF_nnn).
Anna Bridge 142:4eea097334d6 342 ******************************************************************************/
Anna Bridge 142:4eea097334d6 343 __STATIC_INLINE void VDAC_IntEnable(VDAC_TypeDef *vdac, uint32_t flags)
Anna Bridge 142:4eea097334d6 344 {
Anna Bridge 142:4eea097334d6 345 vdac->IEN |= flags;
Anna Bridge 142:4eea097334d6 346 }
Anna Bridge 142:4eea097334d6 347
Anna Bridge 142:4eea097334d6 348 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 349 * @brief
Anna Bridge 142:4eea097334d6 350 * Get pending VDAC interrupt flags.
Anna Bridge 142:4eea097334d6 351 *
Anna Bridge 142:4eea097334d6 352 * @note
Anna Bridge 142:4eea097334d6 353 * The event bits are not cleared by the use of this function.
Anna Bridge 142:4eea097334d6 354 *
Anna Bridge 142:4eea097334d6 355 * @param[in] vdac
Anna Bridge 142:4eea097334d6 356 * Pointer to VDAC peripheral register block.
Anna Bridge 142:4eea097334d6 357 *
Anna Bridge 142:4eea097334d6 358 * @return
Anna Bridge 142:4eea097334d6 359 * VDAC interrupt sources pending. A bitwise logic OR combination of valid
Anna Bridge 142:4eea097334d6 360 * interrupt flags for the VDAC module (VDAC_IF_nnn).
Anna Bridge 142:4eea097334d6 361 ******************************************************************************/
Anna Bridge 142:4eea097334d6 362 __STATIC_INLINE uint32_t VDAC_IntGet(VDAC_TypeDef *vdac)
Anna Bridge 142:4eea097334d6 363 {
Anna Bridge 142:4eea097334d6 364 return vdac->IF;
Anna Bridge 142:4eea097334d6 365 }
Anna Bridge 142:4eea097334d6 366
Anna Bridge 142:4eea097334d6 367 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 368 * @brief
Anna Bridge 142:4eea097334d6 369 * Get enabled and pending VDAC interrupt flags.
Anna Bridge 142:4eea097334d6 370 * Useful for handling more interrupt sources in the same interrupt handler.
Anna Bridge 142:4eea097334d6 371 *
Anna Bridge 142:4eea097334d6 372 * @param[in] vdac
Anna Bridge 142:4eea097334d6 373 * Pointer to VDAC peripheral register block.
Anna Bridge 142:4eea097334d6 374 *
Anna Bridge 142:4eea097334d6 375 * @note
Anna Bridge 142:4eea097334d6 376 * Interrupt flags are not cleared by the use of this function.
Anna Bridge 142:4eea097334d6 377 *
Anna Bridge 142:4eea097334d6 378 * @return
Anna Bridge 142:4eea097334d6 379 * Pending and enabled VDAC interrupt sources.
Anna Bridge 142:4eea097334d6 380 * The return value is the bitwise AND combination of
Anna Bridge 142:4eea097334d6 381 * - the OR combination of enabled interrupt sources in VDACx_IEN_nnn
Anna Bridge 142:4eea097334d6 382 * register (VDACx_IEN_nnn) and
Anna Bridge 142:4eea097334d6 383 * - the OR combination of valid interrupt flags of the VDAC module
Anna Bridge 142:4eea097334d6 384 * (VDACx_IF_nnn).
Anna Bridge 142:4eea097334d6 385 ******************************************************************************/
Anna Bridge 142:4eea097334d6 386 __STATIC_INLINE uint32_t VDAC_IntGetEnabled(VDAC_TypeDef *vdac)
Anna Bridge 142:4eea097334d6 387 {
Anna Bridge 142:4eea097334d6 388 uint32_t ien = vdac->IEN;
Anna Bridge 142:4eea097334d6 389
Anna Bridge 142:4eea097334d6 390 /* Bitwise AND of pending and enabled interrupts */
Anna Bridge 142:4eea097334d6 391 return vdac->IF & ien;
Anna Bridge 142:4eea097334d6 392 }
Anna Bridge 142:4eea097334d6 393
Anna Bridge 142:4eea097334d6 394 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 395 * @brief
Anna Bridge 142:4eea097334d6 396 * Set one or more pending VDAC interrupts from SW.
Anna Bridge 142:4eea097334d6 397 *
Anna Bridge 142:4eea097334d6 398 * @param[in] vdac
Anna Bridge 142:4eea097334d6 399 * Pointer to VDAC peripheral register block.
Anna Bridge 142:4eea097334d6 400 *
Anna Bridge 142:4eea097334d6 401 * @param[in] flags
Anna Bridge 142:4eea097334d6 402 * VDAC interrupt sources to set to pending. Use a bitwise logic OR
Anna Bridge 142:4eea097334d6 403 * combination of valid interrupt flags for the VDAC module (VDAC_IF_nnn).
Anna Bridge 142:4eea097334d6 404 ******************************************************************************/
Anna Bridge 142:4eea097334d6 405 __STATIC_INLINE void VDAC_IntSet(VDAC_TypeDef *vdac, uint32_t flags)
Anna Bridge 142:4eea097334d6 406 {
Anna Bridge 142:4eea097334d6 407 vdac->IFS = flags;
Anna Bridge 142:4eea097334d6 408 }
Anna Bridge 142:4eea097334d6 409
Anna Bridge 142:4eea097334d6 410 uint32_t VDAC_PrescaleCalc(uint32_t vdacFreq, bool syncMode, uint32_t hfperFreq);
Anna Bridge 142:4eea097334d6 411 void VDAC_Reset(VDAC_TypeDef *vdac);
Anna Bridge 142:4eea097334d6 412
Anna Bridge 142:4eea097334d6 413 /** @} (end addtogroup VDAC) */
Anna Bridge 142:4eea097334d6 414 /** @} (end addtogroup emlib) */
Anna Bridge 142:4eea097334d6 415
Anna Bridge 142:4eea097334d6 416 #ifdef __cplusplus
Anna Bridge 142:4eea097334d6 417 }
Anna Bridge 142:4eea097334d6 418 #endif
Anna Bridge 142:4eea097334d6 419
Anna Bridge 142:4eea097334d6 420 #endif /* defined(VDAC_COUNT) && (VDAC_COUNT > 0) */
Anna Bridge 142:4eea097334d6 421 #endif /* EM_VDAC_H */