added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
mbed_official
Date:
Fri Jan 15 07:45:16 2016 +0000
Revision:
50:a417edff4437
Parent:
0:9b334a45a8ff
Child:
144:ef7eb2e8f9f7
Synchronized with git revision 6010f32619bfcbb01cc73747d4ff9040863482d9

Full URL: https://github.com/mbedmicro/mbed/commit/6010f32619bfcbb01cc73747d4ff9040863482d9/

Remove doubling of buffer size in realiseEndpoint()

Who changed what in which revision?

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