Julien Cassette / mbed-dev

Fork of mbed-dev by mbed official

Committer:
bogdanm
Date:
Thu Oct 01 15:25:22 2015 +0300
Revision:
0:9b334a45a8ff
Initial commit on mbed-dev

Replaces mbed-src (now inactive)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 /**
bogdanm 0:9b334a45a8ff 2 ******************************************************************************
bogdanm 0:9b334a45a8ff 3 * @file stm32f30x_opamp.c
bogdanm 0:9b334a45a8ff 4 * @author MCD Application Team
bogdanm 0:9b334a45a8ff 5 * @version V1.1.0
bogdanm 0:9b334a45a8ff 6 * @date 27-February-2014
bogdanm 0:9b334a45a8ff 7 * @brief This file provides firmware functions to manage the following
bogdanm 0:9b334a45a8ff 8 * functionalities of the operational amplifiers (OPAMP1,...OPAMP4) peripheral:
bogdanm 0:9b334a45a8ff 9 * + OPAMP Configuration
bogdanm 0:9b334a45a8ff 10 * + OPAMP calibration
bogdanm 0:9b334a45a8ff 11 *
bogdanm 0:9b334a45a8ff 12 @verbatim
bogdanm 0:9b334a45a8ff 13
bogdanm 0:9b334a45a8ff 14 ==============================================================================
bogdanm 0:9b334a45a8ff 15 ##### OPAMP Peripheral Features #####
bogdanm 0:9b334a45a8ff 16 ==============================================================================
bogdanm 0:9b334a45a8ff 17
bogdanm 0:9b334a45a8ff 18 [..]
bogdanm 0:9b334a45a8ff 19 The device integrates 4 operational amplifiers OPAMP1, OPAMP2, OPAMP3 and OPAMP4:
bogdanm 0:9b334a45a8ff 20
bogdanm 0:9b334a45a8ff 21 (+) The OPAMPs non inverting input can be selected among the list shown by
bogdanm 0:9b334a45a8ff 22 table below.
bogdanm 0:9b334a45a8ff 23
bogdanm 0:9b334a45a8ff 24 (+) The OPAMPs inverting input can be selected among the list shown by
bogdanm 0:9b334a45a8ff 25 table below.
bogdanm 0:9b334a45a8ff 26
bogdanm 0:9b334a45a8ff 27 (+) The OPAMPs outputs can be internally connected to the inverting input
bogdanm 0:9b334a45a8ff 28 (follower mode)
bogdanm 0:9b334a45a8ff 29 (+) The OPAMPs outputs can be internally connected to resistor feedback
bogdanm 0:9b334a45a8ff 30 output (Programmable Gain Amplifier mode)
bogdanm 0:9b334a45a8ff 31
bogdanm 0:9b334a45a8ff 32 (+) The OPAMPs outputs can be internally connected to ADC
bogdanm 0:9b334a45a8ff 33
bogdanm 0:9b334a45a8ff 34 (+) The OPAMPs can be calibrated to compensate the offset compensation
bogdanm 0:9b334a45a8ff 35
bogdanm 0:9b334a45a8ff 36 (+) Timer-controlled Mux for automatic switch of inverting and
bogdanm 0:9b334a45a8ff 37 non-inverting input
bogdanm 0:9b334a45a8ff 38
bogdanm 0:9b334a45a8ff 39 OPAMPs inverting/non-inverting inputs:
bogdanm 0:9b334a45a8ff 40 +--------------------------------------------------------------+
bogdanm 0:9b334a45a8ff 41 | | | OPAMP1 | OPAMP2 | OPAMP3 | OPAMP4 |
bogdanm 0:9b334a45a8ff 42 |-----------------|--------|--------|--------|--------|--------|
bogdanm 0:9b334a45a8ff 43 | | PGA | OK | OK | OK | OK |
bogdanm 0:9b334a45a8ff 44 | Inverting Input | Vout | OK | OK | OK | OK |
bogdanm 0:9b334a45a8ff 45 | | IO1 | PC5 | PC5 | PB10 | PB10 |
bogdanm 0:9b334a45a8ff 46 | | IO2 | PA3 | PA5 | PB2 | PD8 |
bogdanm 0:9b334a45a8ff 47 |-----------------|--------|--------|--------|--------|--------|
bogdanm 0:9b334a45a8ff 48 | | IO1 | PA7 | PD14 | PB13 | PD11 |
bogdanm 0:9b334a45a8ff 49 | Non Inverting | IO2 | PA5 | PB14 | PA5 | PB11 |
bogdanm 0:9b334a45a8ff 50 | Input | IO3 | PA3 | PB0 | PA1 | PA4 |
bogdanm 0:9b334a45a8ff 51 | | IO4 | PA1 | PA7 | PB0 | PB13 |
bogdanm 0:9b334a45a8ff 52 +--------------------------------------------------------------+
bogdanm 0:9b334a45a8ff 53
bogdanm 0:9b334a45a8ff 54 ##### How to use this driver #####
bogdanm 0:9b334a45a8ff 55 ==============================================================================
bogdanm 0:9b334a45a8ff 56 [..]
bogdanm 0:9b334a45a8ff 57 This driver provides functions to configure and program the OPAMP
bogdanm 0:9b334a45a8ff 58 of all STM32F30x devices.
bogdanm 0:9b334a45a8ff 59
bogdanm 0:9b334a45a8ff 60 To use the OPAMP, perform the following steps:
bogdanm 0:9b334a45a8ff 61
bogdanm 0:9b334a45a8ff 62 (#) Enable the SYSCFG APB clock to get write access to OPAMP
bogdanm 0:9b334a45a8ff 63 register using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
bogdanm 0:9b334a45a8ff 64
bogdanm 0:9b334a45a8ff 65 (#) Configure the OPAMP input in analog mode using GPIO_Init()
bogdanm 0:9b334a45a8ff 66
bogdanm 0:9b334a45a8ff 67 (#) Configure the OPAMP using OPAMP_Init() function:
bogdanm 0:9b334a45a8ff 68 (++) Select the inverting input
bogdanm 0:9b334a45a8ff 69 (++) Select the non-inverting inverting input
bogdanm 0:9b334a45a8ff 70
bogdanm 0:9b334a45a8ff 71 (#) Enable the OPAMP using OPAMP_Cmd() function
bogdanm 0:9b334a45a8ff 72
bogdanm 0:9b334a45a8ff 73 @endverbatim
bogdanm 0:9b334a45a8ff 74
bogdanm 0:9b334a45a8ff 75 ******************************************************************************
bogdanm 0:9b334a45a8ff 76 * @attention
bogdanm 0:9b334a45a8ff 77 *
bogdanm 0:9b334a45a8ff 78 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
bogdanm 0:9b334a45a8ff 79 *
bogdanm 0:9b334a45a8ff 80 * Redistribution and use in source and binary forms, with or without modification,
bogdanm 0:9b334a45a8ff 81 * are permitted provided that the following conditions are met:
bogdanm 0:9b334a45a8ff 82 * 1. Redistributions of source code must retain the above copyright notice,
bogdanm 0:9b334a45a8ff 83 * this list of conditions and the following disclaimer.
bogdanm 0:9b334a45a8ff 84 * 2. Redistributions in binary form must reproduce the above copyright notice,
bogdanm 0:9b334a45a8ff 85 * this list of conditions and the following disclaimer in the documentation
bogdanm 0:9b334a45a8ff 86 * and/or other materials provided with the distribution.
bogdanm 0:9b334a45a8ff 87 * 3. Neither the name of STMicroelectronics nor the names of its contributors
bogdanm 0:9b334a45a8ff 88 * may be used to endorse or promote products derived from this software
bogdanm 0:9b334a45a8ff 89 * without specific prior written permission.
bogdanm 0:9b334a45a8ff 90 *
bogdanm 0:9b334a45a8ff 91 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
bogdanm 0:9b334a45a8ff 92 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
bogdanm 0:9b334a45a8ff 93 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
bogdanm 0:9b334a45a8ff 94 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
bogdanm 0:9b334a45a8ff 95 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
bogdanm 0:9b334a45a8ff 96 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
bogdanm 0:9b334a45a8ff 97 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
bogdanm 0:9b334a45a8ff 98 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
bogdanm 0:9b334a45a8ff 99 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
bogdanm 0:9b334a45a8ff 100 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
bogdanm 0:9b334a45a8ff 101 *
bogdanm 0:9b334a45a8ff 102 ******************************************************************************
bogdanm 0:9b334a45a8ff 103 */
bogdanm 0:9b334a45a8ff 104
bogdanm 0:9b334a45a8ff 105 /* Includes ------------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 106 #include "stm32f30x_opamp.h"
bogdanm 0:9b334a45a8ff 107
bogdanm 0:9b334a45a8ff 108 /** @addtogroup STM32F30x_StdPeriph_Driver
bogdanm 0:9b334a45a8ff 109 * @{
bogdanm 0:9b334a45a8ff 110 */
bogdanm 0:9b334a45a8ff 111
bogdanm 0:9b334a45a8ff 112 /** @defgroup OPAMP
bogdanm 0:9b334a45a8ff 113 * @brief OPAMP driver modules
bogdanm 0:9b334a45a8ff 114 * @{
bogdanm 0:9b334a45a8ff 115 */
bogdanm 0:9b334a45a8ff 116
bogdanm 0:9b334a45a8ff 117 /* Private typedef -----------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 118 /* Private define ------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 119 #define OPAMP_CSR_DEFAULT_MASK ((uint32_t)0xFFFFFF93)
bogdanm 0:9b334a45a8ff 120 #define OPAMP_CSR_TIMERMUX_MASK ((uint32_t)0xFFFFF8FF)
bogdanm 0:9b334a45a8ff 121 #define OPAMP_CSR_TRIMMING_MASK ((uint32_t)0x0000001F)
bogdanm 0:9b334a45a8ff 122
bogdanm 0:9b334a45a8ff 123 /* Private macro -------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 124 /* Private variables ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 125 /* Private function prototypes -----------------------------------------------*/
bogdanm 0:9b334a45a8ff 126 /* Private functions ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 127
bogdanm 0:9b334a45a8ff 128 /** @defgroup OPAMP_Private_Functions
bogdanm 0:9b334a45a8ff 129 * @{
bogdanm 0:9b334a45a8ff 130 */
bogdanm 0:9b334a45a8ff 131
bogdanm 0:9b334a45a8ff 132 /** @defgroup OPAMP_Group1 Initialization and Configuration functions
bogdanm 0:9b334a45a8ff 133 * @brief Initialization and Configuration functions
bogdanm 0:9b334a45a8ff 134 *
bogdanm 0:9b334a45a8ff 135 @verbatim
bogdanm 0:9b334a45a8ff 136 ===============================================================================
bogdanm 0:9b334a45a8ff 137 ##### Initialization and Configuration functions #####
bogdanm 0:9b334a45a8ff 138 ===============================================================================
bogdanm 0:9b334a45a8ff 139
bogdanm 0:9b334a45a8ff 140 @endverbatim
bogdanm 0:9b334a45a8ff 141 * @{
bogdanm 0:9b334a45a8ff 142 */
bogdanm 0:9b334a45a8ff 143
bogdanm 0:9b334a45a8ff 144 /**
bogdanm 0:9b334a45a8ff 145 * @brief Deinitializes OPAMP peripheral registers to their default reset values.
bogdanm 0:9b334a45a8ff 146 * @note Deinitialization can't be performed if the OPAMP configuration is locked.
bogdanm 0:9b334a45a8ff 147 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 148 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 149 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 150 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 151 * @param None
bogdanm 0:9b334a45a8ff 152 * @retval None
bogdanm 0:9b334a45a8ff 153 */
bogdanm 0:9b334a45a8ff 154 void OPAMP_DeInit(uint32_t OPAMP_Selection)
bogdanm 0:9b334a45a8ff 155 {
bogdanm 0:9b334a45a8ff 156 /*!< Set OPAMP_CSR register to reset value */
bogdanm 0:9b334a45a8ff 157 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) = ((uint32_t)0x00000000);
bogdanm 0:9b334a45a8ff 158 }
bogdanm 0:9b334a45a8ff 159
bogdanm 0:9b334a45a8ff 160 /**
bogdanm 0:9b334a45a8ff 161 * @brief Initializes the OPAMP peripheral according to the specified parameters
bogdanm 0:9b334a45a8ff 162 * in OPAMP_InitStruct
bogdanm 0:9b334a45a8ff 163 * @note If the selected OPAMP is locked, initialization can't be performed.
bogdanm 0:9b334a45a8ff 164 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 165 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 166 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 167 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 168 * @param OPAMP_InitStruct: pointer to an OPAMP_InitTypeDef structure that contains
bogdanm 0:9b334a45a8ff 169 * the configuration information for the specified OPAMP peripheral.
bogdanm 0:9b334a45a8ff 170 * - OPAMP_InvertingInput specifies the inverting input of OPAMP
bogdanm 0:9b334a45a8ff 171 * - OPAMP_NonInvertingInput specifies the non inverting input of OPAMP
bogdanm 0:9b334a45a8ff 172 * @retval None
bogdanm 0:9b334a45a8ff 173 */
bogdanm 0:9b334a45a8ff 174 void OPAMP_Init(uint32_t OPAMP_Selection, OPAMP_InitTypeDef* OPAMP_InitStruct)
bogdanm 0:9b334a45a8ff 175 {
bogdanm 0:9b334a45a8ff 176 uint32_t tmpreg = 0;
bogdanm 0:9b334a45a8ff 177
bogdanm 0:9b334a45a8ff 178 /* Check the parameters */
bogdanm 0:9b334a45a8ff 179 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 180 assert_param(IS_OPAMP_INVERTING_INPUT(OPAMP_InitStruct->OPAMP_InvertingInput));
bogdanm 0:9b334a45a8ff 181 assert_param(IS_OPAMP_NONINVERTING_INPUT(OPAMP_InitStruct->OPAMP_NonInvertingInput));
bogdanm 0:9b334a45a8ff 182
bogdanm 0:9b334a45a8ff 183 /*!< Get the OPAMPx_CSR register value */
bogdanm 0:9b334a45a8ff 184 tmpreg = *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection);
bogdanm 0:9b334a45a8ff 185
bogdanm 0:9b334a45a8ff 186 /*!< Clear the inverting and non inverting bits selection bits */
bogdanm 0:9b334a45a8ff 187 tmpreg &= (uint32_t) (OPAMP_CSR_DEFAULT_MASK);
bogdanm 0:9b334a45a8ff 188
bogdanm 0:9b334a45a8ff 189 /*!< Configure OPAMP: inverting and non inverting inputs */
bogdanm 0:9b334a45a8ff 190 tmpreg |= (uint32_t)(OPAMP_InitStruct->OPAMP_InvertingInput | OPAMP_InitStruct->OPAMP_NonInvertingInput);
bogdanm 0:9b334a45a8ff 191
bogdanm 0:9b334a45a8ff 192 /*!< Write to OPAMPx_CSR register */
bogdanm 0:9b334a45a8ff 193 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) = tmpreg;
bogdanm 0:9b334a45a8ff 194 }
bogdanm 0:9b334a45a8ff 195
bogdanm 0:9b334a45a8ff 196 /**
bogdanm 0:9b334a45a8ff 197 * @brief Fills each OPAMP_InitStruct member with its default value.
bogdanm 0:9b334a45a8ff 198 * @param OPAMP_InitStruct: pointer to an OPAMP_InitTypeDef structure which will
bogdanm 0:9b334a45a8ff 199 * be initialized.
bogdanm 0:9b334a45a8ff 200 * @retval None
bogdanm 0:9b334a45a8ff 201 */
bogdanm 0:9b334a45a8ff 202 void OPAMP_StructInit(OPAMP_InitTypeDef* OPAMP_InitStruct)
bogdanm 0:9b334a45a8ff 203 {
bogdanm 0:9b334a45a8ff 204 OPAMP_InitStruct->OPAMP_NonInvertingInput = OPAMP_NonInvertingInput_IO1;
bogdanm 0:9b334a45a8ff 205 OPAMP_InitStruct->OPAMP_InvertingInput = OPAMP_InvertingInput_IO1;
bogdanm 0:9b334a45a8ff 206 }
bogdanm 0:9b334a45a8ff 207
bogdanm 0:9b334a45a8ff 208 /**
bogdanm 0:9b334a45a8ff 209 * @brief Configure the feedback resistor gain.
bogdanm 0:9b334a45a8ff 210 * @note If the selected OPAMP is locked, gain configuration can't be performed.
bogdanm 0:9b334a45a8ff 211 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 212 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 213 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 214 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 215 * @param NewState: new state of the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 216 * This parameter can be: ENABLE or DISABLE.
bogdanm 0:9b334a45a8ff 217 * @retval None
bogdanm 0:9b334a45a8ff 218 */
bogdanm 0:9b334a45a8ff 219 void OPAMP_PGAConfig(uint32_t OPAMP_Selection, uint32_t OPAMP_PGAGain, uint32_t OPAMP_PGAConnect)
bogdanm 0:9b334a45a8ff 220 {
bogdanm 0:9b334a45a8ff 221 /* Check the parameters */
bogdanm 0:9b334a45a8ff 222 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 223 assert_param(IS_OPAMP_PGAGAIN(OPAMP_PGAGain));
bogdanm 0:9b334a45a8ff 224 assert_param(IS_OPAMP_PGACONNECT(OPAMP_PGAConnect));
bogdanm 0:9b334a45a8ff 225
bogdanm 0:9b334a45a8ff 226 /* Reset the configuration bits */
bogdanm 0:9b334a45a8ff 227 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) &= (uint32_t)(~OPAMP_CSR_PGGAIN);
bogdanm 0:9b334a45a8ff 228
bogdanm 0:9b334a45a8ff 229 /* Set the new configuration */
bogdanm 0:9b334a45a8ff 230 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) |= (uint32_t) (OPAMP_PGAGain | OPAMP_PGAConnect);
bogdanm 0:9b334a45a8ff 231 }
bogdanm 0:9b334a45a8ff 232
bogdanm 0:9b334a45a8ff 233 /**
bogdanm 0:9b334a45a8ff 234 * @brief Configure the OPAMP's internal reference.
bogdanm 0:9b334a45a8ff 235 * @note This feature is used when calibration enabled or OPAMP's reference
bogdanm 0:9b334a45a8ff 236 * connected to the non inverting input.
bogdanm 0:9b334a45a8ff 237 * @note If the selected OPAMP is locked, Vref configuration can't be performed.
bogdanm 0:9b334a45a8ff 238 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 239 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 240 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 241 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 242 * @param OPAMP_Vref: This parameter can be:
bogdanm 0:9b334a45a8ff 243 * OPAMP_Vref_3VDDA: OPMAP Vref = 3.3% VDDA
bogdanm 0:9b334a45a8ff 244 * OPAMP_Vref_10VDDA: OPMAP Vref = 10% VDDA
bogdanm 0:9b334a45a8ff 245 * OPAMP_Vref_50VDDA: OPMAP Vref = 50% VDDA
bogdanm 0:9b334a45a8ff 246 * OPAMP_Vref_90VDDA: OPMAP Vref = 90% VDDA
bogdanm 0:9b334a45a8ff 247 * @retval None
bogdanm 0:9b334a45a8ff 248 */
bogdanm 0:9b334a45a8ff 249 void OPAMP_VrefConfig(uint32_t OPAMP_Selection, uint32_t OPAMP_Vref)
bogdanm 0:9b334a45a8ff 250 {
bogdanm 0:9b334a45a8ff 251 uint32_t tmpreg = 0;
bogdanm 0:9b334a45a8ff 252
bogdanm 0:9b334a45a8ff 253 /* Check the parameters */
bogdanm 0:9b334a45a8ff 254 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 255 assert_param(IS_OPAMP_VREF(OPAMP_Vref));
bogdanm 0:9b334a45a8ff 256
bogdanm 0:9b334a45a8ff 257 /*!< Get the OPAMPx_CSR register value */
bogdanm 0:9b334a45a8ff 258 tmpreg = *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection);
bogdanm 0:9b334a45a8ff 259
bogdanm 0:9b334a45a8ff 260 /*!< Clear the CALSEL bits */
bogdanm 0:9b334a45a8ff 261 tmpreg &= (uint32_t) (~OPAMP_CSR_CALSEL);
bogdanm 0:9b334a45a8ff 262
bogdanm 0:9b334a45a8ff 263 /*!< Configure OPAMP reference */
bogdanm 0:9b334a45a8ff 264 tmpreg |= (uint32_t)(OPAMP_Vref);
bogdanm 0:9b334a45a8ff 265
bogdanm 0:9b334a45a8ff 266 /*!< Write to OPAMPx_CSR register */
bogdanm 0:9b334a45a8ff 267 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) = tmpreg;
bogdanm 0:9b334a45a8ff 268 }
bogdanm 0:9b334a45a8ff 269
bogdanm 0:9b334a45a8ff 270 /**
bogdanm 0:9b334a45a8ff 271 * @brief Connnect the internal reference to the OPAMP's non inverting input.
bogdanm 0:9b334a45a8ff 272 * @note If the selected OPAMP is locked, Vref configuration can't be performed.
bogdanm 0:9b334a45a8ff 273 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 274 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 275 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 276 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 277 * @param NewState: new state of the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 278 * This parameter can be: ENABLE or DISABLE.
bogdanm 0:9b334a45a8ff 279 * @retval None
bogdanm 0:9b334a45a8ff 280 */
bogdanm 0:9b334a45a8ff 281 void OPAMP_VrefConnectNonInvertingInput(uint32_t OPAMP_Selection, FunctionalState NewState)
bogdanm 0:9b334a45a8ff 282 {
bogdanm 0:9b334a45a8ff 283 /* Check the parameters */
bogdanm 0:9b334a45a8ff 284 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 285 assert_param(IS_FUNCTIONAL_STATE(NewState));
bogdanm 0:9b334a45a8ff 286
bogdanm 0:9b334a45a8ff 287 if (NewState != DISABLE)
bogdanm 0:9b334a45a8ff 288 {
bogdanm 0:9b334a45a8ff 289 /* Connnect the internal reference to the OPAMP's non inverting input */
bogdanm 0:9b334a45a8ff 290 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) |= (uint32_t) (OPAMP_CSR_FORCEVP);
bogdanm 0:9b334a45a8ff 291 }
bogdanm 0:9b334a45a8ff 292 else
bogdanm 0:9b334a45a8ff 293 {
bogdanm 0:9b334a45a8ff 294 /* Disconnnect the internal reference to the OPAMP's non inverting input */
bogdanm 0:9b334a45a8ff 295 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) &= (uint32_t)(~OPAMP_CSR_FORCEVP);
bogdanm 0:9b334a45a8ff 296 }
bogdanm 0:9b334a45a8ff 297 }
bogdanm 0:9b334a45a8ff 298
bogdanm 0:9b334a45a8ff 299 /**
bogdanm 0:9b334a45a8ff 300 * @brief Enables or disables connecting the OPAMP's internal reference to ADC.
bogdanm 0:9b334a45a8ff 301 * @note If the selected OPAMP is locked, Vref connection can't be performed.
bogdanm 0:9b334a45a8ff 302 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 303 * @param NewState: new state of the Vrefint output.
bogdanm 0:9b334a45a8ff 304 * This parameter can be: ENABLE or DISABLE.
bogdanm 0:9b334a45a8ff 305 * @retval None
bogdanm 0:9b334a45a8ff 306 */
bogdanm 0:9b334a45a8ff 307 void OPAMP_VrefConnectADCCmd(uint32_t OPAMP_Selection, FunctionalState NewState)
bogdanm 0:9b334a45a8ff 308 {
bogdanm 0:9b334a45a8ff 309 /* Check the parameters */
bogdanm 0:9b334a45a8ff 310 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 311 assert_param(IS_FUNCTIONAL_STATE(NewState));
bogdanm 0:9b334a45a8ff 312
bogdanm 0:9b334a45a8ff 313 if (NewState != DISABLE)
bogdanm 0:9b334a45a8ff 314 {
bogdanm 0:9b334a45a8ff 315 /* Enable output internal reference */
bogdanm 0:9b334a45a8ff 316 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) |= (uint32_t) (OPAMP_CSR_TSTREF);
bogdanm 0:9b334a45a8ff 317 }
bogdanm 0:9b334a45a8ff 318 else
bogdanm 0:9b334a45a8ff 319 {
bogdanm 0:9b334a45a8ff 320 /* Disable output internal reference */
bogdanm 0:9b334a45a8ff 321 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) &= (uint32_t)(~OPAMP_CSR_TSTREF);
bogdanm 0:9b334a45a8ff 322 }
bogdanm 0:9b334a45a8ff 323 }
bogdanm 0:9b334a45a8ff 324
bogdanm 0:9b334a45a8ff 325 /**
bogdanm 0:9b334a45a8ff 326 * @brief Configure the OPAMP peripheral (secondary inputs) for timer-controlled
bogdanm 0:9b334a45a8ff 327 * mux mode according to the specified parameters in OPAMP_InitStruct.
bogdanm 0:9b334a45a8ff 328 * @note If the selected OPAMP is locked, timer-controlled mux configuration
bogdanm 0:9b334a45a8ff 329 * can't be performed.
bogdanm 0:9b334a45a8ff 330 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 331 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 332 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 333 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 334 * @param OPAMP_InitStruct: pointer to an OPAMP_InitTypeDef structure that contains
bogdanm 0:9b334a45a8ff 335 * the configuration information for the specified OPAMP peripheral.
bogdanm 0:9b334a45a8ff 336 * - OPAMP_InvertingInput specifies the inverting input of OPAMP
bogdanm 0:9b334a45a8ff 337 * - OPAMP_NonInvertingInput specifies the non inverting input of OPAMP
bogdanm 0:9b334a45a8ff 338 * @note PGA and Vout can't be selected as seconadry inverting input.
bogdanm 0:9b334a45a8ff 339 * @retval None
bogdanm 0:9b334a45a8ff 340 */
bogdanm 0:9b334a45a8ff 341 void OPAMP_TimerControlledMuxConfig(uint32_t OPAMP_Selection, OPAMP_InitTypeDef* OPAMP_InitStruct)
bogdanm 0:9b334a45a8ff 342 {
bogdanm 0:9b334a45a8ff 343 uint32_t tmpreg = 0;
bogdanm 0:9b334a45a8ff 344
bogdanm 0:9b334a45a8ff 345 /* Check the parameters */
bogdanm 0:9b334a45a8ff 346 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 347 assert_param(IS_OPAMP_SECONDARY_INVINPUT(OPAMP_InitStruct->OPAMP_InvertingInput));
bogdanm 0:9b334a45a8ff 348 assert_param(IS_OPAMP_NONINVERTING_INPUT(OPAMP_InitStruct->OPAMP_NonInvertingInput));
bogdanm 0:9b334a45a8ff 349
bogdanm 0:9b334a45a8ff 350 /*!< Get the OPAMPx_CSR register value */
bogdanm 0:9b334a45a8ff 351 tmpreg = *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection);
bogdanm 0:9b334a45a8ff 352
bogdanm 0:9b334a45a8ff 353 /*!< Clear the secondary inverting bit, secondary non inverting bit and TCMEN bits */
bogdanm 0:9b334a45a8ff 354 tmpreg &= (uint32_t) (OPAMP_CSR_TIMERMUX_MASK);
bogdanm 0:9b334a45a8ff 355
bogdanm 0:9b334a45a8ff 356 /*!< Configure OPAMP: secondary inverting and non inverting inputs */
bogdanm 0:9b334a45a8ff 357 tmpreg |= (uint32_t)((uint32_t)(OPAMP_InitStruct->OPAMP_InvertingInput<<3) | (uint32_t)(OPAMP_InitStruct->OPAMP_NonInvertingInput<<7));
bogdanm 0:9b334a45a8ff 358
bogdanm 0:9b334a45a8ff 359 /*!< Write to OPAMPx_CSR register */
bogdanm 0:9b334a45a8ff 360 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) = tmpreg;
bogdanm 0:9b334a45a8ff 361 }
bogdanm 0:9b334a45a8ff 362
bogdanm 0:9b334a45a8ff 363 /**
bogdanm 0:9b334a45a8ff 364 * @brief Enable or disable the timer-controlled mux mode.
bogdanm 0:9b334a45a8ff 365 * @note If the selected OPAMP is locked, enable/disable can't be performed.
bogdanm 0:9b334a45a8ff 366 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 367 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 368 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 369 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 370 * @param NewState: new state of the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 371 * This parameter can be: ENABLE or DISABLE.
bogdanm 0:9b334a45a8ff 372 * @retval None
bogdanm 0:9b334a45a8ff 373 */
bogdanm 0:9b334a45a8ff 374 void OPAMP_TimerControlledMuxCmd(uint32_t OPAMP_Selection, FunctionalState NewState)
bogdanm 0:9b334a45a8ff 375 {
bogdanm 0:9b334a45a8ff 376 /* Check the parameters */
bogdanm 0:9b334a45a8ff 377 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 378 assert_param(IS_FUNCTIONAL_STATE(NewState));
bogdanm 0:9b334a45a8ff 379
bogdanm 0:9b334a45a8ff 380 if (NewState != DISABLE)
bogdanm 0:9b334a45a8ff 381 {
bogdanm 0:9b334a45a8ff 382 /* Enable the timer-controlled Mux mode */
bogdanm 0:9b334a45a8ff 383 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) |= (uint32_t) (OPAMP_CSR_TCMEN);
bogdanm 0:9b334a45a8ff 384 }
bogdanm 0:9b334a45a8ff 385 else
bogdanm 0:9b334a45a8ff 386 {
bogdanm 0:9b334a45a8ff 387 /* Disable the timer-controlled Mux mode */
bogdanm 0:9b334a45a8ff 388 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) &= (uint32_t)(~OPAMP_CSR_TCMEN);
bogdanm 0:9b334a45a8ff 389 }
bogdanm 0:9b334a45a8ff 390 }
bogdanm 0:9b334a45a8ff 391
bogdanm 0:9b334a45a8ff 392 /**
bogdanm 0:9b334a45a8ff 393 * @brief Enable or disable the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 394 * @note If the selected OPAMP is locked, enable/disable can't be performed.
bogdanm 0:9b334a45a8ff 395 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 396 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 397 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 398 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 399 * @param NewState: new state of the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 400 * This parameter can be: ENABLE or DISABLE.
bogdanm 0:9b334a45a8ff 401 * @retval None
bogdanm 0:9b334a45a8ff 402 */
bogdanm 0:9b334a45a8ff 403 void OPAMP_Cmd(uint32_t OPAMP_Selection, FunctionalState NewState)
bogdanm 0:9b334a45a8ff 404 {
bogdanm 0:9b334a45a8ff 405 /* Check the parameters */
bogdanm 0:9b334a45a8ff 406 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 407 assert_param(IS_FUNCTIONAL_STATE(NewState));
bogdanm 0:9b334a45a8ff 408
bogdanm 0:9b334a45a8ff 409 if (NewState != DISABLE)
bogdanm 0:9b334a45a8ff 410 {
bogdanm 0:9b334a45a8ff 411 /* Enable the selected OPAMPx peripheral */
bogdanm 0:9b334a45a8ff 412 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) |= (uint32_t) (OPAMP_CSR_OPAMPxEN);
bogdanm 0:9b334a45a8ff 413 }
bogdanm 0:9b334a45a8ff 414 else
bogdanm 0:9b334a45a8ff 415 {
bogdanm 0:9b334a45a8ff 416 /* Disable the selected OPAMPx peripheral */
bogdanm 0:9b334a45a8ff 417 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) &= (uint32_t)(~OPAMP_CSR_OPAMPxEN);
bogdanm 0:9b334a45a8ff 418 }
bogdanm 0:9b334a45a8ff 419 }
bogdanm 0:9b334a45a8ff 420
bogdanm 0:9b334a45a8ff 421 /**
bogdanm 0:9b334a45a8ff 422 * @brief Return the output level (high or low) during calibration of the selected OPAMP.
bogdanm 0:9b334a45a8ff 423 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 424 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 425 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 426 * - OPAMP output is low when the non-inverting input is at a lower
bogdanm 0:9b334a45a8ff 427 * voltage than the inverting input
bogdanm 0:9b334a45a8ff 428 * - OPAMP output is high when the non-inverting input is at a higher
bogdanm 0:9b334a45a8ff 429 * voltage than the inverting input
bogdanm 0:9b334a45a8ff 430 * @note OPAMP ouput level is provided only during calibration phase.
bogdanm 0:9b334a45a8ff 431 * @retval Returns the selected OPAMP output level: low or high.
bogdanm 0:9b334a45a8ff 432 *
bogdanm 0:9b334a45a8ff 433 */
bogdanm 0:9b334a45a8ff 434 uint32_t OPAMP_GetOutputLevel(uint32_t OPAMP_Selection)
bogdanm 0:9b334a45a8ff 435 {
bogdanm 0:9b334a45a8ff 436 uint32_t opampout = 0x0;
bogdanm 0:9b334a45a8ff 437
bogdanm 0:9b334a45a8ff 438 /* Check the parameters */
bogdanm 0:9b334a45a8ff 439 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 440
bogdanm 0:9b334a45a8ff 441 /* Check if selected OPAMP output is high */
bogdanm 0:9b334a45a8ff 442 if ((*(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) & (OPAMP_CSR_OUTCAL)) != 0)
bogdanm 0:9b334a45a8ff 443 {
bogdanm 0:9b334a45a8ff 444 opampout = OPAMP_OutputLevel_High;
bogdanm 0:9b334a45a8ff 445 }
bogdanm 0:9b334a45a8ff 446 else
bogdanm 0:9b334a45a8ff 447 {
bogdanm 0:9b334a45a8ff 448 opampout = OPAMP_OutputLevel_Low;
bogdanm 0:9b334a45a8ff 449 }
bogdanm 0:9b334a45a8ff 450
bogdanm 0:9b334a45a8ff 451 /* Return the OPAMP output level */
bogdanm 0:9b334a45a8ff 452 return (uint32_t)(opampout);
bogdanm 0:9b334a45a8ff 453 }
bogdanm 0:9b334a45a8ff 454
bogdanm 0:9b334a45a8ff 455 /**
bogdanm 0:9b334a45a8ff 456 * @brief Select the trimming mode.
bogdanm 0:9b334a45a8ff 457 * @param OffsetTrimming: the selected offset trimming mode.
bogdanm 0:9b334a45a8ff 458 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 459 * @arg OPAMP_Trimming_Factory: factory trimming values are used for offset
bogdanm 0:9b334a45a8ff 460 * calibration
bogdanm 0:9b334a45a8ff 461 * @arg OPAMP_Trimming_User: user trimming values are used for offset
bogdanm 0:9b334a45a8ff 462 * calibration
bogdanm 0:9b334a45a8ff 463 * @note When OffsetTrimming_User is selected, use OPAMP_OffsetTrimConfig()
bogdanm 0:9b334a45a8ff 464 * function or OPAMP_OffsetTrimLowPowerConfig() function to adjust
bogdanm 0:9b334a45a8ff 465 * trimming value.
bogdanm 0:9b334a45a8ff 466 * @retval None
bogdanm 0:9b334a45a8ff 467 */
bogdanm 0:9b334a45a8ff 468 void OPAMP_OffsetTrimModeSelect(uint32_t OPAMP_Selection, uint32_t OPAMP_Trimming)
bogdanm 0:9b334a45a8ff 469 {
bogdanm 0:9b334a45a8ff 470 /* Check the parameters */
bogdanm 0:9b334a45a8ff 471 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 472 assert_param(IS_OPAMP_TRIMMING(OPAMP_Trimming));
bogdanm 0:9b334a45a8ff 473
bogdanm 0:9b334a45a8ff 474 /* Reset USERTRIM bit */
bogdanm 0:9b334a45a8ff 475 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) &= (~(uint32_t) (OPAMP_CSR_USERTRIM));
bogdanm 0:9b334a45a8ff 476
bogdanm 0:9b334a45a8ff 477 /* Select trimming mode */
bogdanm 0:9b334a45a8ff 478 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) |= OPAMP_Trimming;
bogdanm 0:9b334a45a8ff 479 }
bogdanm 0:9b334a45a8ff 480
bogdanm 0:9b334a45a8ff 481 /**
bogdanm 0:9b334a45a8ff 482 * @brief Configure the trimming value of the OPAMP.
bogdanm 0:9b334a45a8ff 483 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 484 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 485 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 486 * @param OPAMP_Input: the selected OPAMP input.
bogdanm 0:9b334a45a8ff 487 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 488 * @arg OPAMP_Input_Inverting: Inverting input is selected to configure the trimming value
bogdanm 0:9b334a45a8ff 489 * @arg OPAMP_Input_NonInverting: Non inverting input is selected to configure the trimming value
bogdanm 0:9b334a45a8ff 490 * @param OPAMP_TrimValue: the trimming value. This parameter can be any value lower
bogdanm 0:9b334a45a8ff 491 * or equal to 0x0000001F.
bogdanm 0:9b334a45a8ff 492 * @retval None
bogdanm 0:9b334a45a8ff 493 */
bogdanm 0:9b334a45a8ff 494 void OPAMP_OffsetTrimConfig(uint32_t OPAMP_Selection, uint32_t OPAMP_Input, uint32_t OPAMP_TrimValue)
bogdanm 0:9b334a45a8ff 495 {
bogdanm 0:9b334a45a8ff 496 uint32_t tmpreg = 0;
bogdanm 0:9b334a45a8ff 497
bogdanm 0:9b334a45a8ff 498 /* Check the parameters */
bogdanm 0:9b334a45a8ff 499 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 500 assert_param(IS_OPAMP_INPUT(OPAMP_Input));
bogdanm 0:9b334a45a8ff 501 assert_param(IS_OPAMP_TRIMMINGVALUE(OPAMP_TrimValue));
bogdanm 0:9b334a45a8ff 502
bogdanm 0:9b334a45a8ff 503 /*!< Get the OPAMPx_CSR register value */
bogdanm 0:9b334a45a8ff 504 tmpreg = *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection);
bogdanm 0:9b334a45a8ff 505
bogdanm 0:9b334a45a8ff 506 /*!< Clear the trimming bits */
bogdanm 0:9b334a45a8ff 507 tmpreg &= ((uint32_t)~(OPAMP_CSR_TRIMMING_MASK<<OPAMP_Input));
bogdanm 0:9b334a45a8ff 508
bogdanm 0:9b334a45a8ff 509 /*!< Configure the new trimming value */
bogdanm 0:9b334a45a8ff 510 tmpreg |= (uint32_t)(OPAMP_TrimValue<<OPAMP_Input);
bogdanm 0:9b334a45a8ff 511
bogdanm 0:9b334a45a8ff 512 /*!< Write to OPAMPx_CSR register */
bogdanm 0:9b334a45a8ff 513 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) = tmpreg;
bogdanm 0:9b334a45a8ff 514 }
bogdanm 0:9b334a45a8ff 515
bogdanm 0:9b334a45a8ff 516 /**
bogdanm 0:9b334a45a8ff 517 * @brief Start or stop the calibration of selected OPAMP peripheral.
bogdanm 0:9b334a45a8ff 518 * @note If the selected OPAMP is locked, start/stop can't be performed.
bogdanm 0:9b334a45a8ff 519 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 520 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 521 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 522 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 523 * @param NewState: new state of the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 524 * This parameter can be: ENABLE or DISABLE.
bogdanm 0:9b334a45a8ff 525 * @retval None
bogdanm 0:9b334a45a8ff 526 */
bogdanm 0:9b334a45a8ff 527 void OPAMP_StartCalibration(uint32_t OPAMP_Selection, FunctionalState NewState)
bogdanm 0:9b334a45a8ff 528 {
bogdanm 0:9b334a45a8ff 529 /* Check the parameters */
bogdanm 0:9b334a45a8ff 530 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 531 assert_param(IS_FUNCTIONAL_STATE(NewState));
bogdanm 0:9b334a45a8ff 532
bogdanm 0:9b334a45a8ff 533 if (NewState != DISABLE)
bogdanm 0:9b334a45a8ff 534 {
bogdanm 0:9b334a45a8ff 535 /* Start the OPAMPx calibration */
bogdanm 0:9b334a45a8ff 536 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) |= (uint32_t) (OPAMP_CSR_CALON);
bogdanm 0:9b334a45a8ff 537 }
bogdanm 0:9b334a45a8ff 538 else
bogdanm 0:9b334a45a8ff 539 {
bogdanm 0:9b334a45a8ff 540 /* Stop the OPAMPx calibration */
bogdanm 0:9b334a45a8ff 541 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) &= (uint32_t)(~OPAMP_CSR_CALON);
bogdanm 0:9b334a45a8ff 542 }
bogdanm 0:9b334a45a8ff 543 }
bogdanm 0:9b334a45a8ff 544
bogdanm 0:9b334a45a8ff 545 /**
bogdanm 0:9b334a45a8ff 546 * @}
bogdanm 0:9b334a45a8ff 547 */
bogdanm 0:9b334a45a8ff 548
bogdanm 0:9b334a45a8ff 549 /** @defgroup OPAMP_Group2 OPAMP configuration locking function
bogdanm 0:9b334a45a8ff 550 * @brief OPAMP1,...OPAMP4 configuration locking function
bogdanm 0:9b334a45a8ff 551 * OPAMP1,...OPAMP4 configuration can be locked each separately.
bogdanm 0:9b334a45a8ff 552 * Unlocking is performed by system reset.
bogdanm 0:9b334a45a8ff 553 *
bogdanm 0:9b334a45a8ff 554 @verbatim
bogdanm 0:9b334a45a8ff 555 ===============================================================================
bogdanm 0:9b334a45a8ff 556 ##### Configuration Lock function #####
bogdanm 0:9b334a45a8ff 557 ===============================================================================
bogdanm 0:9b334a45a8ff 558
bogdanm 0:9b334a45a8ff 559 @endverbatim
bogdanm 0:9b334a45a8ff 560 * @{
bogdanm 0:9b334a45a8ff 561 */
bogdanm 0:9b334a45a8ff 562
bogdanm 0:9b334a45a8ff 563 /**
bogdanm 0:9b334a45a8ff 564 * @brief Lock the selected OPAMP configuration.
bogdanm 0:9b334a45a8ff 565 * @note Locking the configuration means that all control bits are read-only.
bogdanm 0:9b334a45a8ff 566 * To unlock the OPAMP configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 567 * @param OPAMP_Selection: the selected OPAMP.
bogdanm 0:9b334a45a8ff 568 * This parameter can be OPAMP_Selection_OPAMPx where x can be 1 to 4
bogdanm 0:9b334a45a8ff 569 * to select the OPAMP peripheral.
bogdanm 0:9b334a45a8ff 570 * @retval None
bogdanm 0:9b334a45a8ff 571 */
bogdanm 0:9b334a45a8ff 572 void OPAMP_LockConfig(uint32_t OPAMP_Selection)
bogdanm 0:9b334a45a8ff 573 {
bogdanm 0:9b334a45a8ff 574 /* Check the parameter */
bogdanm 0:9b334a45a8ff 575 assert_param(IS_OPAMP_ALL_PERIPH(OPAMP_Selection));
bogdanm 0:9b334a45a8ff 576
bogdanm 0:9b334a45a8ff 577 /* Set the lock bit corresponding to selected OPAMP */
bogdanm 0:9b334a45a8ff 578 *(__IO uint32_t *) (OPAMP_BASE + OPAMP_Selection) |= (uint32_t) (OPAMP_CSR_LOCK);
bogdanm 0:9b334a45a8ff 579 }
bogdanm 0:9b334a45a8ff 580
bogdanm 0:9b334a45a8ff 581 /**
bogdanm 0:9b334a45a8ff 582 * @}
bogdanm 0:9b334a45a8ff 583 */
bogdanm 0:9b334a45a8ff 584
bogdanm 0:9b334a45a8ff 585 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/