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:
Anna Bridge
Date:
Wed May 10 11:31:27 2017 +0100
Revision:
142:4eea097334d6
Child:
159:7130f322cb7e
Release 142 of the mbed library

Ports for Upcoming Targets


Fixes and Changes

4059: [Silicon Labs] Rename targets https://github.com/ARMmbed/mbed-os/pull/4059
4187: [NCS36510] Reduce default heap size allocated by IAR to 1/4 of RAM https://github.com/ARMmbed/mbed-os/pull/4187
4225: fixed missing device_name for xDot and removed progen https://github.com/ARMmbed/mbed-os/pull/4225
4251: Fix C++11 build error w/ u-blox EVK-ODIN-W2 https://github.com/ARMmbed/mbed-os/pull/4251
4236: STM32 Fixed warning related to __packed redefinition https://github.com/ARMmbed/mbed-os/pull/4236
4190: LPC4088: Enable LWIP feature https://github.com/ARMmbed/mbed-os/pull/4190
4260: Inherit Xadow M0 target from LPC11U35_501 https://github.com/ARMmbed/mbed-os/pull/4260
4249: Add consistent button names across targets https://github.com/ARMmbed/mbed-os/pull/4249

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