added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Sep 02 15:07:44 2016 +0100
Revision:
144:ef7eb2e8f9f7
Parent:
50:a417edff4437
This updates the lib to the mbed lib v125

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /**************************************************************************//**
<> 144:ef7eb2e8f9f7 2 * @file em_opamp.c
<> 144:ef7eb2e8f9f7 3 * @brief Operational Amplifier (OPAMP) peripheral API
<> 144:ef7eb2e8f9f7 4 * @version 4.2.1
<> 144:ef7eb2e8f9f7 5 ******************************************************************************
<> 144:ef7eb2e8f9f7 6 * @section License
<> 144:ef7eb2e8f9f7 7 * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
<> 144:ef7eb2e8f9f7 8 *******************************************************************************
<> 144:ef7eb2e8f9f7 9 *
<> 144:ef7eb2e8f9f7 10 * Permission is granted to anyone to use this software for any purpose,
<> 144:ef7eb2e8f9f7 11 * including commercial applications, and to alter it and redistribute it
<> 144:ef7eb2e8f9f7 12 * freely, subject to the following restrictions:
<> 144:ef7eb2e8f9f7 13 *
<> 144:ef7eb2e8f9f7 14 * 1. The origin of this software must not be misrepresented; you must not
<> 144:ef7eb2e8f9f7 15 * claim that you wrote the original software.
<> 144:ef7eb2e8f9f7 16 * 2. Altered source versions must be plainly marked as such, and must not be
<> 144:ef7eb2e8f9f7 17 * misrepresented as being the original software.
<> 144:ef7eb2e8f9f7 18 * 3. This notice may not be removed or altered from any source distribution.
<> 144:ef7eb2e8f9f7 19 *
<> 144:ef7eb2e8f9f7 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
<> 144:ef7eb2e8f9f7 21 * obligation to support this Software. Silicon Labs is providing the
<> 144:ef7eb2e8f9f7 22 * Software "AS IS", with no express or implied warranties of any kind,
<> 144:ef7eb2e8f9f7 23 * including, but not limited to, any implied warranties of merchantability
<> 144:ef7eb2e8f9f7 24 * or fitness for any particular purpose or warranties against infringement
<> 144:ef7eb2e8f9f7 25 * of any proprietary rights of a third party.
<> 144:ef7eb2e8f9f7 26 *
<> 144:ef7eb2e8f9f7 27 * Silicon Labs will not be liable for any consequential, incidental, or
<> 144:ef7eb2e8f9f7 28 * special damages, or any other relief, or for any claim by any third party,
<> 144:ef7eb2e8f9f7 29 * arising from your use of this Software.
<> 144:ef7eb2e8f9f7 30 *
<> 144:ef7eb2e8f9f7 31 ******************************************************************************/
<> 144:ef7eb2e8f9f7 32
<> 144:ef7eb2e8f9f7 33 #include "em_opamp.h"
<> 144:ef7eb2e8f9f7 34 #if defined(OPAMP_PRESENT) && (OPAMP_COUNT == 1)
<> 144:ef7eb2e8f9f7 35
<> 144:ef7eb2e8f9f7 36 #include "em_system.h"
<> 144:ef7eb2e8f9f7 37 #include "em_assert.h"
<> 144:ef7eb2e8f9f7 38
<> 144:ef7eb2e8f9f7 39 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 40 * @addtogroup EM_Library
<> 144:ef7eb2e8f9f7 41 * @{
<> 144:ef7eb2e8f9f7 42 ******************************************************************************/
<> 144:ef7eb2e8f9f7 43
<> 144:ef7eb2e8f9f7 44
<> 144:ef7eb2e8f9f7 45 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 46 * @addtogroup OPAMP
<> 144:ef7eb2e8f9f7 47 * @brief Operational Amplifier (OPAMP) peripheral API
<> 144:ef7eb2e8f9f7 48 * @details
<> 144:ef7eb2e8f9f7 49 * This module contains functions to:
<> 144:ef7eb2e8f9f7 50 * @li OPAMP_Enable() Configure and enable an opamp.
<> 144:ef7eb2e8f9f7 51 * @li OPAMP_Disable() Disable an opamp.
<> 144:ef7eb2e8f9f7 52 *
<> 144:ef7eb2e8f9f7 53 * All OPAMP functions assume that the DAC clock is running. If the DAC is not
<> 144:ef7eb2e8f9f7 54 * used, the clock can be turned off when the opamp's are configured.
<> 144:ef7eb2e8f9f7 55 *
<> 144:ef7eb2e8f9f7 56 * If the available gain values dont suit the application at hand, the resistor
<> 144:ef7eb2e8f9f7 57 * ladders can be disabled and external gain programming resistors used.
<> 144:ef7eb2e8f9f7 58 *
<> 144:ef7eb2e8f9f7 59 * A number of predefined opamp setup macros are available for configuration
<> 144:ef7eb2e8f9f7 60 * of the most common opamp topologies (see figures below).
<> 144:ef7eb2e8f9f7 61 *
<> 144:ef7eb2e8f9f7 62 * @note
<> 144:ef7eb2e8f9f7 63 * <em>The terms POSPAD and NEGPAD in the figures are used to indicate that these
<> 144:ef7eb2e8f9f7 64 * pads should be connected to a suitable signal ground.</em>
<> 144:ef7eb2e8f9f7 65 *
<> 144:ef7eb2e8f9f7 66 * \n<b>Unity gain voltage follower.</b>\n
<> 144:ef7eb2e8f9f7 67 * Use predefined macros @ref OPA_INIT_UNITY_GAIN and
<> 144:ef7eb2e8f9f7 68 * @ref OPA_INIT_UNITY_GAIN_OPA2.
<> 144:ef7eb2e8f9f7 69 * @verbatim
<> 144:ef7eb2e8f9f7 70
<> 144:ef7eb2e8f9f7 71 |\
<> 144:ef7eb2e8f9f7 72 ___________|+\
<> 144:ef7eb2e8f9f7 73 | \_______
<> 144:ef7eb2e8f9f7 74 ___|_ / |
<> 144:ef7eb2e8f9f7 75 | | / |
<> 144:ef7eb2e8f9f7 76 | |/ |
<> 144:ef7eb2e8f9f7 77 |___________|
<> 144:ef7eb2e8f9f7 78 @endverbatim
<> 144:ef7eb2e8f9f7 79 *
<> 144:ef7eb2e8f9f7 80 * \n<b>Non-inverting amplifier.</b>\n
<> 144:ef7eb2e8f9f7 81 * Use predefined macros @ref OPA_INIT_NON_INVERTING and
<> 144:ef7eb2e8f9f7 82 * @ref OPA_INIT_NON_INVERTING_OPA2.
<> 144:ef7eb2e8f9f7 83 * @verbatim
<> 144:ef7eb2e8f9f7 84
<> 144:ef7eb2e8f9f7 85 |\
<> 144:ef7eb2e8f9f7 86 ___________|+\
<> 144:ef7eb2e8f9f7 87 | \_______
<> 144:ef7eb2e8f9f7 88 ___|_ / |
<> 144:ef7eb2e8f9f7 89 | | / |
<> 144:ef7eb2e8f9f7 90 | |/ |
<> 144:ef7eb2e8f9f7 91 |_____R2____|
<> 144:ef7eb2e8f9f7 92 |
<> 144:ef7eb2e8f9f7 93 R1
<> 144:ef7eb2e8f9f7 94 |
<> 144:ef7eb2e8f9f7 95 NEGPAD @endverbatim
<> 144:ef7eb2e8f9f7 96 *
<> 144:ef7eb2e8f9f7 97 * \n<b>Inverting amplifier.</b>\n
<> 144:ef7eb2e8f9f7 98 * Use predefined macros @ref OPA_INIT_INVERTING and
<> 144:ef7eb2e8f9f7 99 * @ref OPA_INIT_INVERTING_OPA2.
<> 144:ef7eb2e8f9f7 100 * @verbatim
<> 144:ef7eb2e8f9f7 101
<> 144:ef7eb2e8f9f7 102 _____R2____
<> 144:ef7eb2e8f9f7 103 | |
<> 144:ef7eb2e8f9f7 104 | |\ |
<> 144:ef7eb2e8f9f7 105 ____R1_|___|_\ |
<> 144:ef7eb2e8f9f7 106 | \____|___
<> 144:ef7eb2e8f9f7 107 ___| /
<> 144:ef7eb2e8f9f7 108 | |+/
<> 144:ef7eb2e8f9f7 109 | |/
<> 144:ef7eb2e8f9f7 110 |
<> 144:ef7eb2e8f9f7 111 POSPAD @endverbatim
<> 144:ef7eb2e8f9f7 112 *
<> 144:ef7eb2e8f9f7 113 * \n<b>Cascaded non-inverting amplifiers.</b>\n
<> 144:ef7eb2e8f9f7 114 * Use predefined macros @ref OPA_INIT_CASCADED_NON_INVERTING_OPA0,
<> 144:ef7eb2e8f9f7 115 * @ref OPA_INIT_CASCADED_NON_INVERTING_OPA1 and
<> 144:ef7eb2e8f9f7 116 * @ref OPA_INIT_CASCADED_NON_INVERTING_OPA2.
<> 144:ef7eb2e8f9f7 117 * @verbatim
<> 144:ef7eb2e8f9f7 118
<> 144:ef7eb2e8f9f7 119 |\ |\ |\
<> 144:ef7eb2e8f9f7 120 ___________|+\ OPA0 ___________|+\ OPA1 ___________|+\ OPA2
<> 144:ef7eb2e8f9f7 121 | \_________| | \_________| | \_______
<> 144:ef7eb2e8f9f7 122 ___|_ / | ___|_ / | ___|_ / |
<> 144:ef7eb2e8f9f7 123 | | / | | | / | | | / |
<> 144:ef7eb2e8f9f7 124 | |/ | | |/ | | |/ |
<> 144:ef7eb2e8f9f7 125 |_____R2____| |_____R2____| |_____R2____|
<> 144:ef7eb2e8f9f7 126 | | |
<> 144:ef7eb2e8f9f7 127 R1 R1 R1
<> 144:ef7eb2e8f9f7 128 | | |
<> 144:ef7eb2e8f9f7 129 NEGPAD NEGPAD NEGPAD @endverbatim
<> 144:ef7eb2e8f9f7 130 *
<> 144:ef7eb2e8f9f7 131 * \n<b>Cascaded inverting amplifiers.</b>\n
<> 144:ef7eb2e8f9f7 132 * Use predefined macros @ref OPA_INIT_CASCADED_INVERTING_OPA0,
<> 144:ef7eb2e8f9f7 133 * @ref OPA_INIT_CASCADED_INVERTING_OPA1 and
<> 144:ef7eb2e8f9f7 134 * @ref OPA_INIT_CASCADED_INVERTING_OPA2.
<> 144:ef7eb2e8f9f7 135 * @verbatim
<> 144:ef7eb2e8f9f7 136
<> 144:ef7eb2e8f9f7 137 _____R2____ _____R2____ _____R2____
<> 144:ef7eb2e8f9f7 138 | | | | | |
<> 144:ef7eb2e8f9f7 139 | |\ | | |\ | | |\ |
<> 144:ef7eb2e8f9f7 140 ____R1_|___|_\ | ____R1_|___|_\ | ____R1_|___|_\ |
<> 144:ef7eb2e8f9f7 141 | \____|____| | \____|___| | \____|__
<> 144:ef7eb2e8f9f7 142 ___| / ___| / ___| /
<> 144:ef7eb2e8f9f7 143 | |+/ OPA0 | |+/ OPA1 | |+/ OPA2
<> 144:ef7eb2e8f9f7 144 | |/ | |/ | |/
<> 144:ef7eb2e8f9f7 145 | | |
<> 144:ef7eb2e8f9f7 146 POSPAD POSPAD POSPAD @endverbatim
<> 144:ef7eb2e8f9f7 147 *
<> 144:ef7eb2e8f9f7 148 * \n<b>Differential driver with two opamp's.</b>\n
<> 144:ef7eb2e8f9f7 149 * Use predefined macros @ref OPA_INIT_DIFF_DRIVER_OPA0 and
<> 144:ef7eb2e8f9f7 150 * @ref OPA_INIT_DIFF_DRIVER_OPA1.
<> 144:ef7eb2e8f9f7 151 * @verbatim
<> 144:ef7eb2e8f9f7 152
<> 144:ef7eb2e8f9f7 153 __________________________
<> 144:ef7eb2e8f9f7 154 | +
<> 144:ef7eb2e8f9f7 155 | _____R2____
<> 144:ef7eb2e8f9f7 156 |\ | | |
<> 144:ef7eb2e8f9f7 157 ___________|+\ OPA0 | | |\ OPA1 |
<> 144:ef7eb2e8f9f7 158 | \_________|____R1_|___|_\ | _
<> 144:ef7eb2e8f9f7 159 ___|_ / | | \____|______
<> 144:ef7eb2e8f9f7 160 | | / | ___| /
<> 144:ef7eb2e8f9f7 161 | |/ | | |+/
<> 144:ef7eb2e8f9f7 162 |________________| | |/
<> 144:ef7eb2e8f9f7 163 |
<> 144:ef7eb2e8f9f7 164 POSPAD @endverbatim
<> 144:ef7eb2e8f9f7 165 *
<> 144:ef7eb2e8f9f7 166 * \n<b>Differential receiver with three opamp's.</b>\n
<> 144:ef7eb2e8f9f7 167 * Use predefined macros @ref OPA_INIT_DIFF_RECEIVER_OPA0,
<> 144:ef7eb2e8f9f7 168 * @ref OPA_INIT_DIFF_RECEIVER_OPA1 and @ref OPA_INIT_DIFF_RECEIVER_OPA2.
<> 144:ef7eb2e8f9f7 169 * @verbatim
<> 144:ef7eb2e8f9f7 170
<> 144:ef7eb2e8f9f7 171 |\
<> 144:ef7eb2e8f9f7 172 __________|+\ OPA1
<> 144:ef7eb2e8f9f7 173 _ | \_________
<> 144:ef7eb2e8f9f7 174 ___|_ / | | _____R2____
<> 144:ef7eb2e8f9f7 175 | | / | | | |
<> 144:ef7eb2e8f9f7 176 | |/ | | | |\ |
<> 144:ef7eb2e8f9f7 177 |___________| |____R1_|___|_\ |
<> 144:ef7eb2e8f9f7 178 | \____|___
<> 144:ef7eb2e8f9f7 179 |\ ____R1_ ___| /
<> 144:ef7eb2e8f9f7 180 +__________|+\ OPA0 | | |+/ OPA2
<> 144:ef7eb2e8f9f7 181 | \_________| | |/
<> 144:ef7eb2e8f9f7 182 ___|_ / | R2
<> 144:ef7eb2e8f9f7 183 | | / | |
<> 144:ef7eb2e8f9f7 184 | |/ | NEGPAD OPA0
<> 144:ef7eb2e8f9f7 185 |___________|
<> 144:ef7eb2e8f9f7 186 @endverbatim
<> 144:ef7eb2e8f9f7 187 *
<> 144:ef7eb2e8f9f7 188 * @{
<> 144:ef7eb2e8f9f7 189 ******************************************************************************/
<> 144:ef7eb2e8f9f7 190
<> 144:ef7eb2e8f9f7 191 /*******************************************************************************
<> 144:ef7eb2e8f9f7 192 ************************** GLOBAL FUNCTIONS *******************************
<> 144:ef7eb2e8f9f7 193 ******************************************************************************/
<> 144:ef7eb2e8f9f7 194
<> 144:ef7eb2e8f9f7 195 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 196 * @brief
<> 144:ef7eb2e8f9f7 197 * Disable an Operational Amplifier.
<> 144:ef7eb2e8f9f7 198 *
<> 144:ef7eb2e8f9f7 199 * @param[in] dac
<> 144:ef7eb2e8f9f7 200 * Pointer to DAC peripheral register block.
<> 144:ef7eb2e8f9f7 201 *
<> 144:ef7eb2e8f9f7 202 * @param[in] opa
<> 144:ef7eb2e8f9f7 203 * Selects an OPA, valid vaules are @ref OPA0, @ref OPA1 and @ref OPA2.
<> 144:ef7eb2e8f9f7 204 ******************************************************************************/
<> 144:ef7eb2e8f9f7 205 void OPAMP_Disable(DAC_TypeDef *dac, OPAMP_TypeDef opa)
<> 144:ef7eb2e8f9f7 206 {
<> 144:ef7eb2e8f9f7 207 EFM_ASSERT(DAC_REF_VALID(dac));
<> 144:ef7eb2e8f9f7 208 EFM_ASSERT(DAC_OPA_VALID(opa));
<> 144:ef7eb2e8f9f7 209
<> 144:ef7eb2e8f9f7 210 if (opa == OPA0)
<> 144:ef7eb2e8f9f7 211 {
<> 144:ef7eb2e8f9f7 212 dac->CH0CTRL &= ~DAC_CH0CTRL_EN;
<> 144:ef7eb2e8f9f7 213 dac->OPACTRL &= ~DAC_OPACTRL_OPA0EN;
<> 144:ef7eb2e8f9f7 214 }
<> 144:ef7eb2e8f9f7 215 else if (opa == OPA1)
<> 144:ef7eb2e8f9f7 216 {
<> 144:ef7eb2e8f9f7 217 dac->CH1CTRL &= ~DAC_CH1CTRL_EN;
<> 144:ef7eb2e8f9f7 218 dac->OPACTRL &= ~DAC_OPACTRL_OPA1EN;
<> 144:ef7eb2e8f9f7 219 }
<> 144:ef7eb2e8f9f7 220 else /* OPA2 */
<> 144:ef7eb2e8f9f7 221 {
<> 144:ef7eb2e8f9f7 222 dac->OPACTRL &= ~DAC_OPACTRL_OPA2EN;
<> 144:ef7eb2e8f9f7 223 }
<> 144:ef7eb2e8f9f7 224 }
<> 144:ef7eb2e8f9f7 225
<> 144:ef7eb2e8f9f7 226
<> 144:ef7eb2e8f9f7 227 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 228 * @brief
<> 144:ef7eb2e8f9f7 229 * Configure and enable an Operational Amplifier.
<> 144:ef7eb2e8f9f7 230 *
<> 144:ef7eb2e8f9f7 231 * @note
<> 144:ef7eb2e8f9f7 232 * The value of the alternate output enable bit mask in the OPAMP_Init_TypeDef
<> 144:ef7eb2e8f9f7 233 * structure should consist of one or more of the
<> 144:ef7eb2e8f9f7 234 * DAC_OPA[opa#]MUX_OUTPEN_OUT[output#] flags
<> 144:ef7eb2e8f9f7 235 * (defined in \<part_name\>_dac.h) OR'ed together. @n @n
<> 144:ef7eb2e8f9f7 236 * For OPA0:
<> 144:ef7eb2e8f9f7 237 * @li DAC_OPA0MUX_OUTPEN_OUT0
<> 144:ef7eb2e8f9f7 238 * @li DAC_OPA0MUX_OUTPEN_OUT1
<> 144:ef7eb2e8f9f7 239 * @li DAC_OPA0MUX_OUTPEN_OUT2
<> 144:ef7eb2e8f9f7 240 * @li DAC_OPA0MUX_OUTPEN_OUT3
<> 144:ef7eb2e8f9f7 241 * @li DAC_OPA0MUX_OUTPEN_OUT4
<> 144:ef7eb2e8f9f7 242 *
<> 144:ef7eb2e8f9f7 243 * For OPA1:
<> 144:ef7eb2e8f9f7 244 * @li DAC_OPA1MUX_OUTPEN_OUT0
<> 144:ef7eb2e8f9f7 245 * @li DAC_OPA1MUX_OUTPEN_OUT1
<> 144:ef7eb2e8f9f7 246 * @li DAC_OPA1MUX_OUTPEN_OUT2
<> 144:ef7eb2e8f9f7 247 * @li DAC_OPA1MUX_OUTPEN_OUT3
<> 144:ef7eb2e8f9f7 248 * @li DAC_OPA1MUX_OUTPEN_OUT4
<> 144:ef7eb2e8f9f7 249 *
<> 144:ef7eb2e8f9f7 250 * For OPA2:
<> 144:ef7eb2e8f9f7 251 * @li DAC_OPA2MUX_OUTPEN_OUT0
<> 144:ef7eb2e8f9f7 252 * @li DAC_OPA2MUX_OUTPEN_OUT1
<> 144:ef7eb2e8f9f7 253 *
<> 144:ef7eb2e8f9f7 254 * E.g: @n
<> 144:ef7eb2e8f9f7 255 * init.outPen = DAC_OPA0MUX_OUTPEN_OUT0 | DAC_OPA0MUX_OUTPEN_OUT4;
<> 144:ef7eb2e8f9f7 256 *
<> 144:ef7eb2e8f9f7 257 * @param[in] dac
<> 144:ef7eb2e8f9f7 258 * Pointer to DAC peripheral register block.
<> 144:ef7eb2e8f9f7 259 *
<> 144:ef7eb2e8f9f7 260 * @param[in] opa
<> 144:ef7eb2e8f9f7 261 * Selects an OPA, valid vaules are @ref OPA0, @ref OPA1 and @ref OPA2.
<> 144:ef7eb2e8f9f7 262 *
<> 144:ef7eb2e8f9f7 263 * @param[in] init
<> 144:ef7eb2e8f9f7 264 * Pointer to a structure containing OPAMP init information.
<> 144:ef7eb2e8f9f7 265 ******************************************************************************/
<> 144:ef7eb2e8f9f7 266 void OPAMP_Enable(DAC_TypeDef *dac, OPAMP_TypeDef opa, const OPAMP_Init_TypeDef *init)
<> 144:ef7eb2e8f9f7 267 {
<> 144:ef7eb2e8f9f7 268 uint32_t offset;
<> 144:ef7eb2e8f9f7 269
<> 144:ef7eb2e8f9f7 270 EFM_ASSERT(DAC_REF_VALID(dac));
<> 144:ef7eb2e8f9f7 271 EFM_ASSERT(DAC_OPA_VALID(opa));
<> 144:ef7eb2e8f9f7 272 EFM_ASSERT(init->bias <= (_DAC_BIASPROG_BIASPROG_MASK
<> 144:ef7eb2e8f9f7 273 >> _DAC_BIASPROG_BIASPROG_SHIFT));
<> 144:ef7eb2e8f9f7 274
<> 144:ef7eb2e8f9f7 275 if (opa == OPA0)
<> 144:ef7eb2e8f9f7 276 {
<> 144:ef7eb2e8f9f7 277 EFM_ASSERT((init->outPen & ~_DAC_OPA0MUX_OUTPEN_MASK) == 0);
<> 144:ef7eb2e8f9f7 278
<> 144:ef7eb2e8f9f7 279 dac->BIASPROG = (dac->BIASPROG
<> 144:ef7eb2e8f9f7 280 & ~(_DAC_BIASPROG_BIASPROG_MASK
<> 144:ef7eb2e8f9f7 281 | DAC_BIASPROG_HALFBIAS))
<> 144:ef7eb2e8f9f7 282 | (init->bias << _DAC_BIASPROG_BIASPROG_SHIFT)
<> 144:ef7eb2e8f9f7 283 | (init->halfBias ? DAC_BIASPROG_HALFBIAS : 0);
<> 144:ef7eb2e8f9f7 284
<> 144:ef7eb2e8f9f7 285 if (init->defaultOffset)
<> 144:ef7eb2e8f9f7 286 {
<> 144:ef7eb2e8f9f7 287 offset = SYSTEM_GetCalibrationValue(&dac->CAL);
<> 144:ef7eb2e8f9f7 288 dac->CAL = (dac->CAL & ~_DAC_CAL_CH0OFFSET_MASK)
<> 144:ef7eb2e8f9f7 289 | (offset & _DAC_CAL_CH0OFFSET_MASK);
<> 144:ef7eb2e8f9f7 290 }
<> 144:ef7eb2e8f9f7 291 else
<> 144:ef7eb2e8f9f7 292 {
<> 144:ef7eb2e8f9f7 293 EFM_ASSERT(init->offset <= (_DAC_CAL_CH0OFFSET_MASK
<> 144:ef7eb2e8f9f7 294 >> _DAC_CAL_CH0OFFSET_SHIFT));
<> 144:ef7eb2e8f9f7 295
<> 144:ef7eb2e8f9f7 296 dac->CAL = (dac->CAL & ~_DAC_CAL_CH0OFFSET_MASK)
<> 144:ef7eb2e8f9f7 297 | (init->offset << _DAC_CAL_CH0OFFSET_SHIFT);
<> 144:ef7eb2e8f9f7 298 }
<> 144:ef7eb2e8f9f7 299
<> 144:ef7eb2e8f9f7 300 dac->OPA0MUX = (uint32_t)init->resSel
<> 144:ef7eb2e8f9f7 301 | (uint32_t)init->outMode
<> 144:ef7eb2e8f9f7 302 | init->outPen
<> 144:ef7eb2e8f9f7 303 | (uint32_t)init->resInMux
<> 144:ef7eb2e8f9f7 304 | (uint32_t)init->negSel
<> 144:ef7eb2e8f9f7 305 | (uint32_t)init->posSel
<> 144:ef7eb2e8f9f7 306 | ( init->nextOut ? DAC_OPA0MUX_NEXTOUT : 0)
<> 144:ef7eb2e8f9f7 307 | ( init->npEn ? DAC_OPA0MUX_NPEN : 0)
<> 144:ef7eb2e8f9f7 308 | ( init->ppEn ? DAC_OPA0MUX_PPEN : 0);
<> 144:ef7eb2e8f9f7 309
<> 144:ef7eb2e8f9f7 310 dac->CH0CTRL |= DAC_CH0CTRL_EN;
<> 144:ef7eb2e8f9f7 311 dac->OPACTRL = (dac->OPACTRL
<> 144:ef7eb2e8f9f7 312 & ~(DAC_OPACTRL_OPA0SHORT
<> 144:ef7eb2e8f9f7 313 | _DAC_OPACTRL_OPA0LPFDIS_MASK
<> 144:ef7eb2e8f9f7 314 | DAC_OPACTRL_OPA0HCMDIS))
<> 144:ef7eb2e8f9f7 315 | (init->shortInputs ? DAC_OPACTRL_OPA0SHORT : 0)
<> 144:ef7eb2e8f9f7 316 | (init->lpfPosPadDisable
<> 144:ef7eb2e8f9f7 317 ? DAC_OPACTRL_OPA0LPFDIS_PLPFDIS : 0)
<> 144:ef7eb2e8f9f7 318 | (init->lpfNegPadDisable
<> 144:ef7eb2e8f9f7 319 ? DAC_OPACTRL_OPA0LPFDIS_NLPFDIS : 0)
<> 144:ef7eb2e8f9f7 320 | (init->hcmDisable ? DAC_OPACTRL_OPA0HCMDIS : 0)
<> 144:ef7eb2e8f9f7 321 | DAC_OPACTRL_OPA0EN;
<> 144:ef7eb2e8f9f7 322 }
<> 144:ef7eb2e8f9f7 323 else if ( opa == OPA1 )
<> 144:ef7eb2e8f9f7 324 {
<> 144:ef7eb2e8f9f7 325 EFM_ASSERT((init->outPen & ~_DAC_OPA1MUX_OUTPEN_MASK) == 0);
<> 144:ef7eb2e8f9f7 326
<> 144:ef7eb2e8f9f7 327 dac->BIASPROG = (dac->BIASPROG
<> 144:ef7eb2e8f9f7 328 & ~(_DAC_BIASPROG_BIASPROG_MASK
<> 144:ef7eb2e8f9f7 329 | DAC_BIASPROG_HALFBIAS))
<> 144:ef7eb2e8f9f7 330 | (init->bias << _DAC_BIASPROG_BIASPROG_SHIFT)
<> 144:ef7eb2e8f9f7 331 | (init->halfBias ? DAC_BIASPROG_HALFBIAS : 0 );
<> 144:ef7eb2e8f9f7 332
<> 144:ef7eb2e8f9f7 333 if (init->defaultOffset)
<> 144:ef7eb2e8f9f7 334 {
<> 144:ef7eb2e8f9f7 335 offset = SYSTEM_GetCalibrationValue(&dac->CAL);
<> 144:ef7eb2e8f9f7 336 dac->CAL = (dac->CAL & ~_DAC_CAL_CH1OFFSET_MASK)
<> 144:ef7eb2e8f9f7 337 | (offset & _DAC_CAL_CH1OFFSET_MASK);
<> 144:ef7eb2e8f9f7 338 }
<> 144:ef7eb2e8f9f7 339 else
<> 144:ef7eb2e8f9f7 340 {
<> 144:ef7eb2e8f9f7 341 EFM_ASSERT(init->offset <= (_DAC_CAL_CH1OFFSET_MASK
<> 144:ef7eb2e8f9f7 342 >> _DAC_CAL_CH1OFFSET_SHIFT));
<> 144:ef7eb2e8f9f7 343
<> 144:ef7eb2e8f9f7 344 dac->CAL = (dac->CAL & ~_DAC_CAL_CH1OFFSET_MASK)
<> 144:ef7eb2e8f9f7 345 | (init->offset << _DAC_CAL_CH1OFFSET_SHIFT);
<> 144:ef7eb2e8f9f7 346 }
<> 144:ef7eb2e8f9f7 347
<> 144:ef7eb2e8f9f7 348 dac->OPA1MUX = (uint32_t)init->resSel
<> 144:ef7eb2e8f9f7 349 | (uint32_t)init->outMode
<> 144:ef7eb2e8f9f7 350 | init->outPen
<> 144:ef7eb2e8f9f7 351 | (uint32_t)init->resInMux
<> 144:ef7eb2e8f9f7 352 | (uint32_t)init->negSel
<> 144:ef7eb2e8f9f7 353 | (uint32_t)init->posSel
<> 144:ef7eb2e8f9f7 354 | (init->nextOut ? DAC_OPA1MUX_NEXTOUT : 0)
<> 144:ef7eb2e8f9f7 355 | (init->npEn ? DAC_OPA1MUX_NPEN : 0)
<> 144:ef7eb2e8f9f7 356 | (init->ppEn ? DAC_OPA1MUX_PPEN : 0);
<> 144:ef7eb2e8f9f7 357
<> 144:ef7eb2e8f9f7 358 dac->CH1CTRL |= DAC_CH1CTRL_EN;
<> 144:ef7eb2e8f9f7 359 dac->OPACTRL = (dac->OPACTRL
<> 144:ef7eb2e8f9f7 360 & ~(DAC_OPACTRL_OPA1SHORT
<> 144:ef7eb2e8f9f7 361 | _DAC_OPACTRL_OPA1LPFDIS_MASK
<> 144:ef7eb2e8f9f7 362 | DAC_OPACTRL_OPA1HCMDIS))
<> 144:ef7eb2e8f9f7 363 | (init->shortInputs ? DAC_OPACTRL_OPA1SHORT : 0)
<> 144:ef7eb2e8f9f7 364 | (init->lpfPosPadDisable
<> 144:ef7eb2e8f9f7 365 ? DAC_OPACTRL_OPA1LPFDIS_PLPFDIS : 0)
<> 144:ef7eb2e8f9f7 366 | (init->lpfNegPadDisable
<> 144:ef7eb2e8f9f7 367 ? DAC_OPACTRL_OPA1LPFDIS_NLPFDIS : 0)
<> 144:ef7eb2e8f9f7 368 | (init->hcmDisable ? DAC_OPACTRL_OPA1HCMDIS : 0)
<> 144:ef7eb2e8f9f7 369 | DAC_OPACTRL_OPA1EN;
<> 144:ef7eb2e8f9f7 370 }
<> 144:ef7eb2e8f9f7 371 else /* OPA2 */
<> 144:ef7eb2e8f9f7 372 {
<> 144:ef7eb2e8f9f7 373 EFM_ASSERT((init->posSel == DAC_OPA2MUX_POSSEL_DISABLE)
<> 144:ef7eb2e8f9f7 374 || (init->posSel == DAC_OPA2MUX_POSSEL_POSPAD)
<> 144:ef7eb2e8f9f7 375 || (init->posSel == DAC_OPA2MUX_POSSEL_OPA1INP)
<> 144:ef7eb2e8f9f7 376 || (init->posSel == DAC_OPA2MUX_POSSEL_OPATAP));
<> 144:ef7eb2e8f9f7 377
<> 144:ef7eb2e8f9f7 378 EFM_ASSERT((init->outMode & ~DAC_OPA2MUX_OUTMODE) == 0);
<> 144:ef7eb2e8f9f7 379
<> 144:ef7eb2e8f9f7 380 EFM_ASSERT((init->outPen & ~_DAC_OPA2MUX_OUTPEN_MASK) == 0);
<> 144:ef7eb2e8f9f7 381
<> 144:ef7eb2e8f9f7 382 dac->BIASPROG = (dac->BIASPROG
<> 144:ef7eb2e8f9f7 383 & ~(_DAC_BIASPROG_OPA2BIASPROG_MASK
<> 144:ef7eb2e8f9f7 384 | DAC_BIASPROG_OPA2HALFBIAS))
<> 144:ef7eb2e8f9f7 385 | (init->bias << _DAC_BIASPROG_OPA2BIASPROG_SHIFT)
<> 144:ef7eb2e8f9f7 386 | (init->halfBias ? DAC_BIASPROG_OPA2HALFBIAS : 0);
<> 144:ef7eb2e8f9f7 387
<> 144:ef7eb2e8f9f7 388 if (init->defaultOffset)
<> 144:ef7eb2e8f9f7 389 {
<> 144:ef7eb2e8f9f7 390 offset = SYSTEM_GetCalibrationValue(&dac->OPAOFFSET);
<> 144:ef7eb2e8f9f7 391 dac->OPAOFFSET = (dac->OPAOFFSET & ~_DAC_OPAOFFSET_OPA2OFFSET_MASK)
<> 144:ef7eb2e8f9f7 392 | (offset & _DAC_OPAOFFSET_OPA2OFFSET_MASK);
<> 144:ef7eb2e8f9f7 393 }
<> 144:ef7eb2e8f9f7 394 else
<> 144:ef7eb2e8f9f7 395 {
<> 144:ef7eb2e8f9f7 396 EFM_ASSERT(init->offset <= (_DAC_OPAOFFSET_OPA2OFFSET_MASK
<> 144:ef7eb2e8f9f7 397 >> _DAC_OPAOFFSET_OPA2OFFSET_SHIFT));
<> 144:ef7eb2e8f9f7 398 dac->OPAOFFSET = (dac->OPAOFFSET & ~_DAC_OPAOFFSET_OPA2OFFSET_MASK)
<> 144:ef7eb2e8f9f7 399 | (init->offset << _DAC_OPAOFFSET_OPA2OFFSET_SHIFT);
<> 144:ef7eb2e8f9f7 400 }
<> 144:ef7eb2e8f9f7 401
<> 144:ef7eb2e8f9f7 402 dac->OPA2MUX = (uint32_t)init->resSel
<> 144:ef7eb2e8f9f7 403 | (uint32_t)init->outMode
<> 144:ef7eb2e8f9f7 404 | init->outPen
<> 144:ef7eb2e8f9f7 405 | (uint32_t)init->resInMux
<> 144:ef7eb2e8f9f7 406 | (uint32_t)init->negSel
<> 144:ef7eb2e8f9f7 407 | (uint32_t)init->posSel
<> 144:ef7eb2e8f9f7 408 | ( init->nextOut ? DAC_OPA2MUX_NEXTOUT : 0 )
<> 144:ef7eb2e8f9f7 409 | ( init->npEn ? DAC_OPA2MUX_NPEN : 0 )
<> 144:ef7eb2e8f9f7 410 | ( init->ppEn ? DAC_OPA2MUX_PPEN : 0 );
<> 144:ef7eb2e8f9f7 411
<> 144:ef7eb2e8f9f7 412 dac->OPACTRL = (dac->OPACTRL
<> 144:ef7eb2e8f9f7 413 & ~(DAC_OPACTRL_OPA2SHORT
<> 144:ef7eb2e8f9f7 414 | _DAC_OPACTRL_OPA2LPFDIS_MASK
<> 144:ef7eb2e8f9f7 415 | DAC_OPACTRL_OPA2HCMDIS))
<> 144:ef7eb2e8f9f7 416 | (init->shortInputs ? DAC_OPACTRL_OPA2SHORT : 0)
<> 144:ef7eb2e8f9f7 417 | (init->lpfPosPadDisable
<> 144:ef7eb2e8f9f7 418 ? DAC_OPACTRL_OPA2LPFDIS_PLPFDIS : 0)
<> 144:ef7eb2e8f9f7 419 | (init->lpfNegPadDisable
<> 144:ef7eb2e8f9f7 420 ? DAC_OPACTRL_OPA2LPFDIS_NLPFDIS : 0)
<> 144:ef7eb2e8f9f7 421 | (init->hcmDisable ? DAC_OPACTRL_OPA2HCMDIS : 0)
<> 144:ef7eb2e8f9f7 422 | DAC_OPACTRL_OPA2EN;
<> 144:ef7eb2e8f9f7 423 }
<> 144:ef7eb2e8f9f7 424 }
<> 144:ef7eb2e8f9f7 425
<> 144:ef7eb2e8f9f7 426 /** @} (end addtogroup OPAMP) */
<> 144:ef7eb2e8f9f7 427 /** @} (end addtogroup EM_Library) */
<> 144:ef7eb2e8f9f7 428
<> 144:ef7eb2e8f9f7 429 #endif /* defined( OPAMP_PRESENT ) && ( OPAMP_COUNT == 1 ) */