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_12/TOOLCHAIN_IAR/em_vdac.h@171:3a7713b1edbc, 2018-11-08 (annotated)
- Committer:
- AnnaBridge
- Date:
- Thu Nov 08 11:45:42 2018 +0000
- Revision:
- 171:3a7713b1edbc
- Parent:
- TARGET_TB_SENSE_1/TARGET_Silicon_Labs/TARGET_EFM32/emlib/inc/em_vdac.h@160:5571c4ff569f
mbed library. Release version 164
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 |
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 */ |