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.
TARGET_TB_SENSE_1/TARGET_Silicon_Labs/TARGET_EFM32/emlib/inc/em_vdac.h@142:4eea097334d6, 2017-05-10 (annotated)
- 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?
User | Revision | Line number | New 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 */ |