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

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

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

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 156:ff21514d8981 1 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 2 * @file em_idac.h
AnnaBridge 156:ff21514d8981 3 * @brief Current Digital to Analog Converter (IDAC) peripheral API
Anna Bridge 160:5571c4ff569f 4 * @version 5.3.3
AnnaBridge 156:ff21514d8981 5 *******************************************************************************
Anna Bridge 160:5571c4ff569f 6 * # License
AnnaBridge 156:ff21514d8981 7 * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b>
AnnaBridge 156:ff21514d8981 8 *******************************************************************************
AnnaBridge 156:ff21514d8981 9 *
AnnaBridge 156:ff21514d8981 10 * Permission is granted to anyone to use this software for any purpose,
AnnaBridge 156:ff21514d8981 11 * including commercial applications, and to alter it and redistribute it
AnnaBridge 156:ff21514d8981 12 * freely, subject to the following restrictions:
AnnaBridge 156:ff21514d8981 13 *
AnnaBridge 156:ff21514d8981 14 * 1. The origin of this software must not be misrepresented; you must not
AnnaBridge 156:ff21514d8981 15 * claim that you wrote the original software.
AnnaBridge 156:ff21514d8981 16 * 2. Altered source versions must be plainly marked as such, and must not be
AnnaBridge 156:ff21514d8981 17 * misrepresented as being the original software.
AnnaBridge 156:ff21514d8981 18 * 3. This notice may not be removed or altered from any source distribution.
AnnaBridge 156:ff21514d8981 19 *
AnnaBridge 156:ff21514d8981 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
AnnaBridge 156:ff21514d8981 21 * obligation to support this Software. Silicon Labs is providing the
AnnaBridge 156:ff21514d8981 22 * Software "AS IS", with no express or implied warranties of any kind,
AnnaBridge 156:ff21514d8981 23 * including, but not limited to, any implied warranties of merchantability
AnnaBridge 156:ff21514d8981 24 * or fitness for any particular purpose or warranties against infringement
AnnaBridge 156:ff21514d8981 25 * of any proprietary rights of a third party.
AnnaBridge 156:ff21514d8981 26 *
AnnaBridge 156:ff21514d8981 27 * Silicon Labs will not be liable for any consequential, incidental, or
AnnaBridge 156:ff21514d8981 28 * special damages, or any other relief, or for any claim by any third party,
AnnaBridge 156:ff21514d8981 29 * arising from your use of this Software.
AnnaBridge 156:ff21514d8981 30 *
AnnaBridge 156:ff21514d8981 31 ******************************************************************************/
AnnaBridge 156:ff21514d8981 32
AnnaBridge 156:ff21514d8981 33 #ifndef EM_IDAC_H
AnnaBridge 156:ff21514d8981 34 #define EM_IDAC_H
AnnaBridge 156:ff21514d8981 35
AnnaBridge 156:ff21514d8981 36 #include "em_device.h"
AnnaBridge 156:ff21514d8981 37
AnnaBridge 156:ff21514d8981 38 #if defined(IDAC_COUNT) && (IDAC_COUNT > 0)
AnnaBridge 156:ff21514d8981 39 #include <stdbool.h>
AnnaBridge 156:ff21514d8981 40
AnnaBridge 156:ff21514d8981 41 #ifdef __cplusplus
AnnaBridge 156:ff21514d8981 42 extern "C" {
AnnaBridge 156:ff21514d8981 43 #endif
AnnaBridge 156:ff21514d8981 44
AnnaBridge 156:ff21514d8981 45 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 46 * @addtogroup emlib
AnnaBridge 156:ff21514d8981 47 * @{
AnnaBridge 156:ff21514d8981 48 ******************************************************************************/
AnnaBridge 156:ff21514d8981 49
AnnaBridge 156:ff21514d8981 50 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 51 * @addtogroup IDAC
AnnaBridge 156:ff21514d8981 52 * @brief
AnnaBridge 156:ff21514d8981 53 * Current Digital-to-Analog Converter (IDAC) Peripheral API
AnnaBridge 156:ff21514d8981 54 *
AnnaBridge 156:ff21514d8981 55 * @details
AnnaBridge 156:ff21514d8981 56 * The current digital-to-analog converter (IDAC) can source or sink a configurable
AnnaBridge 156:ff21514d8981 57 * constant current, which can be output on, or sinked from pin or ADC. The current
AnnaBridge 156:ff21514d8981 58 * is configurable with several ranges of various step sizes. The IDAC can be used
AnnaBridge 156:ff21514d8981 59 * with PRS and it can operate down to EM3.
AnnaBridge 156:ff21514d8981 60 *
AnnaBridge 156:ff21514d8981 61 * The following steps are necessary for basic operation:
AnnaBridge 156:ff21514d8981 62 *
AnnaBridge 156:ff21514d8981 63 * Clock enable:
AnnaBridge 156:ff21514d8981 64 * @include em_idac_clock_enable.c
AnnaBridge 156:ff21514d8981 65 *
AnnaBridge 156:ff21514d8981 66 * Initialize the peripheral with default settings and modify selected fields such as
AnnaBridge 156:ff21514d8981 67 * output select:
AnnaBridge 156:ff21514d8981 68 * @if DOXYDOC_P1_DEVICE
AnnaBridge 156:ff21514d8981 69 * @include em_idac_init_adc.c
AnnaBridge 156:ff21514d8981 70 * @endif
AnnaBridge 156:ff21514d8981 71 * @if DOXYDOC_P2_DEVICE
AnnaBridge 156:ff21514d8981 72 * @include em_idac_init_aport.c
AnnaBridge 156:ff21514d8981 73 * @endif
AnnaBridge 156:ff21514d8981 74 *
AnnaBridge 156:ff21514d8981 75 * Set output:
AnnaBridge 156:ff21514d8981 76 * @include em_idac_basic_usage.c
AnnaBridge 156:ff21514d8981 77 *
AnnaBridge 156:ff21514d8981 78 * @{
AnnaBridge 156:ff21514d8981 79 ******************************************************************************/
AnnaBridge 156:ff21514d8981 80
AnnaBridge 156:ff21514d8981 81 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
AnnaBridge 156:ff21514d8981 82
AnnaBridge 156:ff21514d8981 83 /** Validation of IDAC register block pointer reference for assert statements. */
AnnaBridge 156:ff21514d8981 84 #define IDAC_REF_VALID(ref) ((ref) == IDAC0)
AnnaBridge 156:ff21514d8981 85
AnnaBridge 156:ff21514d8981 86 /** @endcond */
AnnaBridge 156:ff21514d8981 87
AnnaBridge 156:ff21514d8981 88 /*******************************************************************************
AnnaBridge 156:ff21514d8981 89 ******************************** ENUMS ************************************
AnnaBridge 156:ff21514d8981 90 ******************************************************************************/
AnnaBridge 156:ff21514d8981 91
AnnaBridge 156:ff21514d8981 92 /** Output mode. */
Anna Bridge 160:5571c4ff569f 93 typedef enum {
Anna Bridge 160:5571c4ff569f 94 #if defined(_IDAC_CTRL_OUTMODE_MASK)
AnnaBridge 156:ff21514d8981 95 idacOutputPin = IDAC_CTRL_OUTMODE_PIN, /**< Output to IDAC OUT pin */
AnnaBridge 156:ff21514d8981 96 idacOutputADC = IDAC_CTRL_OUTMODE_ADC /**< Output to ADC */
AnnaBridge 156:ff21514d8981 97 #elif ( _IDAC_CTRL_APORTOUTSEL_MASK )
AnnaBridge 156:ff21514d8981 98 idacOutputAPORT1XCH0 = IDAC_CTRL_APORTOUTSEL_APORT1XCH0, /**< Output to APORT 1X CH0 */
AnnaBridge 156:ff21514d8981 99 idacOutputAPORT1YCH1 = IDAC_CTRL_APORTOUTSEL_APORT1YCH1, /**< Output to APORT 1Y CH1 */
AnnaBridge 156:ff21514d8981 100 idacOutputAPORT1XCH2 = IDAC_CTRL_APORTOUTSEL_APORT1XCH2, /**< Output to APORT 1X CH2 */
AnnaBridge 156:ff21514d8981 101 idacOutputAPORT1YCH3 = IDAC_CTRL_APORTOUTSEL_APORT1YCH3, /**< Output to APORT 1Y CH3 */
AnnaBridge 156:ff21514d8981 102 idacOutputAPORT1XCH4 = IDAC_CTRL_APORTOUTSEL_APORT1XCH4, /**< Output to APORT 1X CH4 */
AnnaBridge 156:ff21514d8981 103 idacOutputAPORT1YCH5 = IDAC_CTRL_APORTOUTSEL_APORT1YCH5, /**< Output to APORT 1Y CH5 */
AnnaBridge 156:ff21514d8981 104 idacOutputAPORT1XCH6 = IDAC_CTRL_APORTOUTSEL_APORT1XCH6, /**< Output to APORT 1X CH6 */
AnnaBridge 156:ff21514d8981 105 idacOutputAPORT1YCH7 = IDAC_CTRL_APORTOUTSEL_APORT1YCH7, /**< Output to APORT 1Y CH7 */
AnnaBridge 156:ff21514d8981 106 idacOutputAPORT1XCH8 = IDAC_CTRL_APORTOUTSEL_APORT1XCH8, /**< Output to APORT 1X CH8 */
AnnaBridge 156:ff21514d8981 107 idacOutputAPORT1YCH9 = IDAC_CTRL_APORTOUTSEL_APORT1YCH9, /**< Output to APORT 1Y CH9 */
AnnaBridge 156:ff21514d8981 108 idacOutputAPORT1XCH10 = IDAC_CTRL_APORTOUTSEL_APORT1XCH10, /**< Output to APORT 1X CH10 */
AnnaBridge 156:ff21514d8981 109 idacOutputAPORT1YCH11 = IDAC_CTRL_APORTOUTSEL_APORT1YCH11, /**< Output to APORT 1Y CH11 */
AnnaBridge 156:ff21514d8981 110 idacOutputAPORT1XCH12 = IDAC_CTRL_APORTOUTSEL_APORT1XCH12, /**< Output to APORT 1X CH12 */
AnnaBridge 156:ff21514d8981 111 idacOutputAPORT1YCH13 = IDAC_CTRL_APORTOUTSEL_APORT1YCH13, /**< Output to APORT 1Y CH13 */
AnnaBridge 156:ff21514d8981 112 idacOutputAPORT1XCH14 = IDAC_CTRL_APORTOUTSEL_APORT1XCH14, /**< Output to APORT 1X CH14 */
AnnaBridge 156:ff21514d8981 113 idacOutputAPORT1YCH15 = IDAC_CTRL_APORTOUTSEL_APORT1YCH15, /**< Output to APORT 1Y CH15 */
AnnaBridge 156:ff21514d8981 114 idacOutputAPORT1XCH16 = IDAC_CTRL_APORTOUTSEL_APORT1XCH16, /**< Output to APORT 1X CH16 */
AnnaBridge 156:ff21514d8981 115 idacOutputAPORT1YCH17 = IDAC_CTRL_APORTOUTSEL_APORT1YCH17, /**< Output to APORT 1Y CH17 */
AnnaBridge 156:ff21514d8981 116 idacOutputAPORT1XCH18 = IDAC_CTRL_APORTOUTSEL_APORT1XCH18, /**< Output to APORT 1X CH18 */
AnnaBridge 156:ff21514d8981 117 idacOutputAPORT1YCH19 = IDAC_CTRL_APORTOUTSEL_APORT1YCH19, /**< Output to APORT 1Y CH19 */
AnnaBridge 156:ff21514d8981 118 idacOutputAPORT1XCH20 = IDAC_CTRL_APORTOUTSEL_APORT1XCH20, /**< Output to APORT 1X CH20 */
AnnaBridge 156:ff21514d8981 119 idacOutputAPORT1YCH21 = IDAC_CTRL_APORTOUTSEL_APORT1YCH21, /**< Output to APORT 1Y CH21 */
AnnaBridge 156:ff21514d8981 120 idacOutputAPORT1XCH22 = IDAC_CTRL_APORTOUTSEL_APORT1XCH22, /**< Output to APORT 1X CH22 */
AnnaBridge 156:ff21514d8981 121 idacOutputAPORT1YCH23 = IDAC_CTRL_APORTOUTSEL_APORT1YCH23, /**< Output to APORT 1Y CH23 */
AnnaBridge 156:ff21514d8981 122 idacOutputAPORT1XCH24 = IDAC_CTRL_APORTOUTSEL_APORT1XCH24, /**< Output to APORT 1X CH24 */
AnnaBridge 156:ff21514d8981 123 idacOutputAPORT1YCH25 = IDAC_CTRL_APORTOUTSEL_APORT1YCH25, /**< Output to APORT 1Y CH25 */
AnnaBridge 156:ff21514d8981 124 idacOutputAPORT1XCH26 = IDAC_CTRL_APORTOUTSEL_APORT1XCH26, /**< Output to APORT 1X CH26 */
AnnaBridge 156:ff21514d8981 125 idacOutputAPORT1YCH27 = IDAC_CTRL_APORTOUTSEL_APORT1YCH27, /**< Output to APORT 1Y CH27 */
AnnaBridge 156:ff21514d8981 126 idacOutputAPORT1XCH28 = IDAC_CTRL_APORTOUTSEL_APORT1XCH28, /**< Output to APORT 1X CH28 */
AnnaBridge 156:ff21514d8981 127 idacOutputAPORT1YCH29 = IDAC_CTRL_APORTOUTSEL_APORT1YCH29, /**< Output to APORT 1Y CH29 */
AnnaBridge 156:ff21514d8981 128 idacOutputAPORT1XCH30 = IDAC_CTRL_APORTOUTSEL_APORT1XCH30, /**< Output to APORT 1X CH30 */
AnnaBridge 156:ff21514d8981 129 idacOutputAPORT1YCH31 = IDAC_CTRL_APORTOUTSEL_APORT1YCH31, /**< Output to APORT 1Y CH31 */
AnnaBridge 156:ff21514d8981 130 #endif
AnnaBridge 156:ff21514d8981 131 } IDAC_OutMode_TypeDef;
AnnaBridge 156:ff21514d8981 132
AnnaBridge 156:ff21514d8981 133 /** Selects which Peripheral Reflex System (PRS) signal to use when
AnnaBridge 156:ff21514d8981 134 PRS is set to control the IDAC output. */
Anna Bridge 160:5571c4ff569f 135 typedef enum {
AnnaBridge 156:ff21514d8981 136 idacPRSSELCh0 = IDAC_CTRL_PRSSEL_PRSCH0, /**< PRS channel 0. */
AnnaBridge 156:ff21514d8981 137 idacPRSSELCh1 = IDAC_CTRL_PRSSEL_PRSCH1, /**< PRS channel 1. */
AnnaBridge 156:ff21514d8981 138 idacPRSSELCh2 = IDAC_CTRL_PRSSEL_PRSCH2, /**< PRS channel 2. */
AnnaBridge 156:ff21514d8981 139 idacPRSSELCh3 = IDAC_CTRL_PRSSEL_PRSCH3, /**< PRS channel 3. */
Anna Bridge 160:5571c4ff569f 140 #if defined(IDAC_CTRL_PRSSEL_PRSCH4)
AnnaBridge 156:ff21514d8981 141 idacPRSSELCh4 = IDAC_CTRL_PRSSEL_PRSCH4, /**< PRS channel 4. */
AnnaBridge 156:ff21514d8981 142 idacPRSSELCh5 = IDAC_CTRL_PRSSEL_PRSCH5, /**< PRS channel 5. */
AnnaBridge 156:ff21514d8981 143 #endif
Anna Bridge 160:5571c4ff569f 144 #if defined(IDAC_CTRL_PRSSEL_PRSCH6)
AnnaBridge 156:ff21514d8981 145 idacPRSSELCh6 = IDAC_CTRL_PRSSEL_PRSCH6, /**< PRS channel 6. */
AnnaBridge 156:ff21514d8981 146 idacPRSSELCh7 = IDAC_CTRL_PRSSEL_PRSCH7, /**< PRS channel 7. */
AnnaBridge 156:ff21514d8981 147 idacPRSSELCh8 = IDAC_CTRL_PRSSEL_PRSCH8, /**< PRS channel 8. */
AnnaBridge 156:ff21514d8981 148 idacPRSSELCh9 = IDAC_CTRL_PRSSEL_PRSCH9, /**< PRS channel 9. */
AnnaBridge 156:ff21514d8981 149 idacPRSSELCh10 = IDAC_CTRL_PRSSEL_PRSCH10, /**< PRS channel 10 */
AnnaBridge 156:ff21514d8981 150 idacPRSSELCh11 = IDAC_CTRL_PRSSEL_PRSCH11, /**< PRS channel 11 */
AnnaBridge 156:ff21514d8981 151 #endif
AnnaBridge 156:ff21514d8981 152 } IDAC_PRSSEL_TypeDef;
AnnaBridge 156:ff21514d8981 153
AnnaBridge 156:ff21514d8981 154 /** Selects which current range to use. */
Anna Bridge 160:5571c4ff569f 155 typedef enum {
AnnaBridge 156:ff21514d8981 156 idacCurrentRange0 = IDAC_CURPROG_RANGESEL_RANGE0, /**< current range 0. */
AnnaBridge 156:ff21514d8981 157 idacCurrentRange1 = IDAC_CURPROG_RANGESEL_RANGE1, /**< current range 1. */
AnnaBridge 156:ff21514d8981 158 idacCurrentRange2 = IDAC_CURPROG_RANGESEL_RANGE2, /**< current range 2. */
AnnaBridge 156:ff21514d8981 159 idacCurrentRange3 = IDAC_CURPROG_RANGESEL_RANGE3, /**< current range 3. */
AnnaBridge 156:ff21514d8981 160 } IDAC_Range_TypeDef;
AnnaBridge 156:ff21514d8981 161
AnnaBridge 156:ff21514d8981 162 /*******************************************************************************
AnnaBridge 156:ff21514d8981 163 ******************************* STRUCTS ***********************************
AnnaBridge 156:ff21514d8981 164 ******************************************************************************/
AnnaBridge 156:ff21514d8981 165
AnnaBridge 156:ff21514d8981 166 /** IDAC init structure, common for both channels. */
Anna Bridge 160:5571c4ff569f 167 typedef struct {
AnnaBridge 156:ff21514d8981 168 /** Enable IDAC. */
AnnaBridge 156:ff21514d8981 169 bool enable;
AnnaBridge 156:ff21514d8981 170
AnnaBridge 156:ff21514d8981 171 /** Output mode */
AnnaBridge 156:ff21514d8981 172 IDAC_OutMode_TypeDef outMode;
AnnaBridge 156:ff21514d8981 173
AnnaBridge 156:ff21514d8981 174 /**
AnnaBridge 156:ff21514d8981 175 * Enable Peripheral reflex system (PRS) to control IDAC output. If false,
AnnaBridge 156:ff21514d8981 176 * the IDAC output is controlled by writing to IDAC_OUTEN in IDAC_CTRL or
AnnaBridge 156:ff21514d8981 177 * by calling IDAC_OutEnable().
AnnaBridge 156:ff21514d8981 178 */
AnnaBridge 156:ff21514d8981 179 bool prsEnable;
AnnaBridge 156:ff21514d8981 180
AnnaBridge 156:ff21514d8981 181 /**
AnnaBridge 156:ff21514d8981 182 * Peripheral reflex system channel selection. Only applicable if @p prsEnable
AnnaBridge 156:ff21514d8981 183 * is enabled.
AnnaBridge 156:ff21514d8981 184 */
AnnaBridge 156:ff21514d8981 185 IDAC_PRSSEL_TypeDef prsSel;
AnnaBridge 156:ff21514d8981 186
AnnaBridge 156:ff21514d8981 187 /** Enable/disable current sink mode. */
AnnaBridge 156:ff21514d8981 188 bool sinkEnable;
AnnaBridge 156:ff21514d8981 189 } IDAC_Init_TypeDef;
AnnaBridge 156:ff21514d8981 190
AnnaBridge 156:ff21514d8981 191 /** Default config for IDAC init structure. */
Anna Bridge 160:5571c4ff569f 192 #if defined(_IDAC_CTRL_OUTMODE_MASK)
AnnaBridge 156:ff21514d8981 193 #define IDAC_INIT_DEFAULT \
Anna Bridge 160:5571c4ff569f 194 { \
Anna Bridge 160:5571c4ff569f 195 false, /**< Leave IDAC disabled when init done. */ \
Anna Bridge 160:5571c4ff569f 196 idacOutputPin, /**< Output to IDAC output pin. */ \
Anna Bridge 160:5571c4ff569f 197 false, /**< Disable PRS triggering. */ \
Anna Bridge 160:5571c4ff569f 198 idacPRSSELCh0, /**< Select PRS ch0 (if PRS triggering enabled). */ \
Anna Bridge 160:5571c4ff569f 199 false /**< Disable current sink mode. */ \
Anna Bridge 160:5571c4ff569f 200 }
Anna Bridge 160:5571c4ff569f 201 #elif (_IDAC_CTRL_APORTOUTSEL_MASK)
AnnaBridge 156:ff21514d8981 202 #define IDAC_INIT_DEFAULT \
Anna Bridge 160:5571c4ff569f 203 { \
Anna Bridge 160:5571c4ff569f 204 false, /**< Leave IDAC disabled when init done. */ \
Anna Bridge 160:5571c4ff569f 205 idacOutputAPORT1XCH0, /**< Output to APORT. */ \
Anna Bridge 160:5571c4ff569f 206 false, /**< Disable PRS triggering. */ \
Anna Bridge 160:5571c4ff569f 207 idacPRSSELCh0, /**< Select PRS ch0 (if PRS triggering enabled). */ \
Anna Bridge 160:5571c4ff569f 208 false /**< Disable current sink mode. */ \
Anna Bridge 160:5571c4ff569f 209 }
AnnaBridge 156:ff21514d8981 210 #endif
AnnaBridge 156:ff21514d8981 211
AnnaBridge 156:ff21514d8981 212 /*******************************************************************************
AnnaBridge 156:ff21514d8981 213 ***************************** PROTOTYPES **********************************
AnnaBridge 156:ff21514d8981 214 ******************************************************************************/
AnnaBridge 156:ff21514d8981 215
AnnaBridge 156:ff21514d8981 216 void IDAC_Init(IDAC_TypeDef *idac, const IDAC_Init_TypeDef *init);
AnnaBridge 156:ff21514d8981 217 void IDAC_Enable(IDAC_TypeDef *idac, bool enable);
AnnaBridge 156:ff21514d8981 218 void IDAC_Reset(IDAC_TypeDef *idac);
AnnaBridge 156:ff21514d8981 219 void IDAC_MinimalOutputTransitionMode(IDAC_TypeDef *idac, bool enable);
AnnaBridge 156:ff21514d8981 220 void IDAC_RangeSet(IDAC_TypeDef *idac, const IDAC_Range_TypeDef range);
AnnaBridge 156:ff21514d8981 221 void IDAC_StepSet(IDAC_TypeDef *idac, const uint32_t step);
AnnaBridge 156:ff21514d8981 222 void IDAC_OutEnable(IDAC_TypeDef *idac, bool enable);
AnnaBridge 156:ff21514d8981 223
Anna Bridge 160:5571c4ff569f 224 #if defined(_IDAC_IEN_MASK)
AnnaBridge 156:ff21514d8981 225 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 226 * @brief
AnnaBridge 156:ff21514d8981 227 * Clear one or more pending IDAC interrupts.
AnnaBridge 156:ff21514d8981 228 *
AnnaBridge 156:ff21514d8981 229 * @param[in] idac
AnnaBridge 156:ff21514d8981 230 * Pointer to IDAC peripheral register block.
AnnaBridge 156:ff21514d8981 231 *
AnnaBridge 156:ff21514d8981 232 * @param[in] flags
AnnaBridge 156:ff21514d8981 233 * Pending IDAC interrupt source(s) to clear. Use one or more valid
AnnaBridge 156:ff21514d8981 234 * interrupt flags for the IDAC module (IDAC_IF_nnn) OR'ed together.
AnnaBridge 156:ff21514d8981 235 ******************************************************************************/
AnnaBridge 156:ff21514d8981 236 __STATIC_INLINE void IDAC_IntClear(IDAC_TypeDef *idac, uint32_t flags)
AnnaBridge 156:ff21514d8981 237 {
AnnaBridge 156:ff21514d8981 238 idac->IFC = flags;
AnnaBridge 156:ff21514d8981 239 }
AnnaBridge 156:ff21514d8981 240
AnnaBridge 156:ff21514d8981 241 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 242 * @brief
AnnaBridge 156:ff21514d8981 243 * Disable one or more IDAC interrupts.
AnnaBridge 156:ff21514d8981 244 *
AnnaBridge 156:ff21514d8981 245 * @param[in] idac
AnnaBridge 156:ff21514d8981 246 * Pointer to IDAC peripheral register block.
AnnaBridge 156:ff21514d8981 247 *
AnnaBridge 156:ff21514d8981 248 * @param[in] flags
AnnaBridge 156:ff21514d8981 249 * IDAC interrupt source(s) to disable. Use one or more valid
AnnaBridge 156:ff21514d8981 250 * interrupt flags for the IDAC module (IDAC_IF_nnn) OR'ed together.
AnnaBridge 156:ff21514d8981 251 ******************************************************************************/
AnnaBridge 156:ff21514d8981 252 __STATIC_INLINE void IDAC_IntDisable(IDAC_TypeDef *idac, uint32_t flags)
AnnaBridge 156:ff21514d8981 253 {
AnnaBridge 156:ff21514d8981 254 idac->IEN &= ~flags;
AnnaBridge 156:ff21514d8981 255 }
AnnaBridge 156:ff21514d8981 256
AnnaBridge 156:ff21514d8981 257 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 258 * @brief
AnnaBridge 156:ff21514d8981 259 * Enable one or more IDAC interrupts.
AnnaBridge 156:ff21514d8981 260 *
AnnaBridge 156:ff21514d8981 261 * @note
AnnaBridge 156:ff21514d8981 262 * Depending on the use, a pending interrupt may already be set prior to
AnnaBridge 156:ff21514d8981 263 * enabling the interrupt. Consider using IDAC_IntClear() prior to enabling
AnnaBridge 156:ff21514d8981 264 * if such a pending interrupt should be ignored.
AnnaBridge 156:ff21514d8981 265 *
AnnaBridge 156:ff21514d8981 266 * @param[in] idac
AnnaBridge 156:ff21514d8981 267 * Pointer to IDAC peripheral register block.
AnnaBridge 156:ff21514d8981 268 *
AnnaBridge 156:ff21514d8981 269 * @param[in] flags
AnnaBridge 156:ff21514d8981 270 * IDAC interrupt source(s) to enable. Use one or more valid
AnnaBridge 156:ff21514d8981 271 * interrupt flags for the IDAC module (IDAC_IF_nnn) OR'ed together.
AnnaBridge 156:ff21514d8981 272 ******************************************************************************/
AnnaBridge 156:ff21514d8981 273 __STATIC_INLINE void IDAC_IntEnable(IDAC_TypeDef *idac, uint32_t flags)
AnnaBridge 156:ff21514d8981 274 {
AnnaBridge 156:ff21514d8981 275 idac->IEN |= flags;
AnnaBridge 156:ff21514d8981 276 }
AnnaBridge 156:ff21514d8981 277
AnnaBridge 156:ff21514d8981 278 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 279 * @brief
AnnaBridge 156:ff21514d8981 280 * Get pending IDAC interrupt flags.
AnnaBridge 156:ff21514d8981 281 *
AnnaBridge 156:ff21514d8981 282 * @note
AnnaBridge 156:ff21514d8981 283 * The event bits are not cleared by the use of this function.
AnnaBridge 156:ff21514d8981 284 *
AnnaBridge 156:ff21514d8981 285 * @param[in] idac
AnnaBridge 156:ff21514d8981 286 * Pointer to IDAC peripheral register block.
AnnaBridge 156:ff21514d8981 287 *
AnnaBridge 156:ff21514d8981 288 * @return
AnnaBridge 156:ff21514d8981 289 * IDAC interrupt source(s) pending. Returns one or more valid
AnnaBridge 156:ff21514d8981 290 * interrupt flags for the IDAC module (IDAC_IF_nnn) OR'ed together.
AnnaBridge 156:ff21514d8981 291 ******************************************************************************/
AnnaBridge 156:ff21514d8981 292 __STATIC_INLINE uint32_t IDAC_IntGet(IDAC_TypeDef *idac)
AnnaBridge 156:ff21514d8981 293 {
AnnaBridge 156:ff21514d8981 294 return idac->IF;
AnnaBridge 156:ff21514d8981 295 }
AnnaBridge 156:ff21514d8981 296
AnnaBridge 156:ff21514d8981 297 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 298 * @brief
AnnaBridge 156:ff21514d8981 299 * Get enabled and pending IDAC interrupt flags.
AnnaBridge 156:ff21514d8981 300 * Useful for handling more interrupt sources in the same interrupt handler.
AnnaBridge 156:ff21514d8981 301 *
AnnaBridge 156:ff21514d8981 302 * @param[in] idac
AnnaBridge 156:ff21514d8981 303 * Pointer to IDAC peripheral register block.
AnnaBridge 156:ff21514d8981 304 *
AnnaBridge 156:ff21514d8981 305 * @note
AnnaBridge 156:ff21514d8981 306 * Interrupt flags are not cleared by the use of this function.
AnnaBridge 156:ff21514d8981 307 *
AnnaBridge 156:ff21514d8981 308 * @return
AnnaBridge 156:ff21514d8981 309 * Pending and enabled IDAC interrupt sources.
AnnaBridge 156:ff21514d8981 310 * The return value is the bitwise AND combination of
AnnaBridge 156:ff21514d8981 311 * - the OR combination of enabled interrupt sources in IDACx_IEN_nnn
AnnaBridge 156:ff21514d8981 312 * register (IDACx_IEN_nnn) and
AnnaBridge 156:ff21514d8981 313 * - the OR combination of valid interrupt flags of the IDAC module
AnnaBridge 156:ff21514d8981 314 * (IDACx_IF_nnn).
AnnaBridge 156:ff21514d8981 315 ******************************************************************************/
AnnaBridge 156:ff21514d8981 316 __STATIC_INLINE uint32_t IDAC_IntGetEnabled(IDAC_TypeDef *idac)
AnnaBridge 156:ff21514d8981 317 {
AnnaBridge 156:ff21514d8981 318 uint32_t ien;
AnnaBridge 156:ff21514d8981 319
AnnaBridge 156:ff21514d8981 320 /* Store flags in temporary variable in order to define explicit order
AnnaBridge 156:ff21514d8981 321 * of volatile accesses. */
AnnaBridge 156:ff21514d8981 322 ien = idac->IEN;
AnnaBridge 156:ff21514d8981 323
AnnaBridge 156:ff21514d8981 324 /* Bitwise AND of pending and enabled interrupts */
AnnaBridge 156:ff21514d8981 325 return idac->IF & ien;
AnnaBridge 156:ff21514d8981 326 }
AnnaBridge 156:ff21514d8981 327
AnnaBridge 156:ff21514d8981 328 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 329 * @brief
AnnaBridge 156:ff21514d8981 330 * Set one or more pending IDAC interrupts from SW.
AnnaBridge 156:ff21514d8981 331 *
AnnaBridge 156:ff21514d8981 332 * @param[in] idac
AnnaBridge 156:ff21514d8981 333 * Pointer to IDAC peripheral register block.
AnnaBridge 156:ff21514d8981 334 *
AnnaBridge 156:ff21514d8981 335 * @param[in] flags
AnnaBridge 156:ff21514d8981 336 * IDAC interrupt source(s) to set to pending. Use one or more valid
AnnaBridge 156:ff21514d8981 337 * interrupt flags for the IDAC module (IDAC_IF_nnn) OR'ed together.
AnnaBridge 156:ff21514d8981 338 ******************************************************************************/
AnnaBridge 156:ff21514d8981 339 __STATIC_INLINE void IDAC_IntSet(IDAC_TypeDef *idac, uint32_t flags)
AnnaBridge 156:ff21514d8981 340 {
AnnaBridge 156:ff21514d8981 341 idac->IFS = flags;
AnnaBridge 156:ff21514d8981 342 }
AnnaBridge 156:ff21514d8981 343 #endif
AnnaBridge 156:ff21514d8981 344
AnnaBridge 156:ff21514d8981 345 /** @} (end addtogroup IDAC) */
AnnaBridge 156:ff21514d8981 346 /** @} (end addtogroup emlib) */
AnnaBridge 156:ff21514d8981 347
AnnaBridge 156:ff21514d8981 348 #ifdef __cplusplus
AnnaBridge 156:ff21514d8981 349 }
AnnaBridge 156:ff21514d8981 350 #endif
AnnaBridge 156:ff21514d8981 351
AnnaBridge 156:ff21514d8981 352 #endif /* defined(IDAC_COUNT) && (IDAC_COUNT > 0) */
AnnaBridge 156:ff21514d8981 353
AnnaBridge 156:ff21514d8981 354 #endif /* EM_IDAC_H */