| /** |
| ****************************************************************************** |
| * @file stm32l4xx_ll_opamp.c |
| * @author MCD Application Team |
| * @brief OPAMP LL module driver |
| ****************************************************************************** |
| * @attention |
| * |
| * <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2> |
| * |
| * Redistribution and use in source and binary forms, with or without modification, |
| * are permitted provided that the following conditions are met: |
| * 1. Redistributions of source code must retain the above copyright notice, |
| * this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright notice, |
| * this list of conditions and the following disclaimer in the documentation |
| * and/or other materials provided with the distribution. |
| * 3. Neither the name of STMicroelectronics nor the names of its contributors |
| * may be used to endorse or promote products derived from this software |
| * without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| ****************************************************************************** |
| */ |
| #if defined(USE_FULL_LL_DRIVER) |
| |
| /* Includes ------------------------------------------------------------------*/ |
| #include "stm32l4xx_ll_opamp.h" |
| |
| #ifdef USE_FULL_ASSERT |
| #include "stm32_assert.h" |
| #else |
| #define assert_param(expr) ((void)0U) |
| #endif |
| |
| /** @addtogroup STM32L4xx_LL_Driver |
| * @{ |
| */ |
| |
| #if defined (OPAMP1) || defined (OPAMP2) |
| |
| /** @addtogroup OPAMP_LL OPAMP |
| * @{ |
| */ |
| |
| /* Private types -------------------------------------------------------------*/ |
| /* Private variables ---------------------------------------------------------*/ |
| /* Private constants ---------------------------------------------------------*/ |
| /* Private macros ------------------------------------------------------------*/ |
| |
| /** @addtogroup OPAMP_LL_Private_Macros |
| * @{ |
| */ |
| |
| /* Check of parameters for configuration of OPAMP hierarchical scope: */ |
| /* OPAMP instance. */ |
| |
| #define IS_LL_OPAMP_POWER_MODE(__POWER_MODE__) \ |
| ( ((__POWER_MODE__) == LL_OPAMP_POWERMODE_NORMAL) \ |
| || ((__POWER_MODE__) == LL_OPAMP_POWERMODE_LOWPOWER)) |
| |
| #define IS_LL_OPAMP_FUNCTIONAL_MODE(__FUNCTIONAL_MODE__) \ |
| ( ((__FUNCTIONAL_MODE__) == LL_OPAMP_MODE_STANDALONE) \ |
| || ((__FUNCTIONAL_MODE__) == LL_OPAMP_MODE_FOLLOWER) \ |
| || ((__FUNCTIONAL_MODE__) == LL_OPAMP_MODE_PGA) \ |
| ) |
| |
| /* Note: Comparator non-inverting inputs parameters are the same on all */ |
| /* OPAMP instances. */ |
| /* However, comparator instance kept as macro parameter for */ |
| /* compatibility with other STM32 families. */ |
| #define IS_LL_OPAMP_INPUT_NONINVERTING(__OPAMPX__, __INPUT_NONINVERTING__) \ |
| ( ((__INPUT_NONINVERTING__) == LL_OPAMP_INPUT_NONINVERT_IO0) \ |
| || ((__INPUT_NONINVERTING__) == LL_OPAMP_INPUT_NONINV_DAC1_CH1) \ |
| ) |
| |
| /* Note: Comparator non-inverting inputs parameters are the same on all */ |
| /* OPAMP instances. */ |
| /* However, comparator instance kept as macro parameter for */ |
| /* compatibility with other STM32 families. */ |
| #define IS_LL_OPAMP_INPUT_INVERTING(__OPAMPX__, __INPUT_INVERTING__) \ |
| ( ((__INPUT_INVERTING__) == LL_OPAMP_INPUT_INVERT_IO0) \ |
| || ((__INPUT_INVERTING__) == LL_OPAMP_INPUT_INVERT_IO1) \ |
| || ((__INPUT_INVERTING__) == LL_OPAMP_INPUT_INVERT_CONNECT_NO) \ |
| ) |
| |
| /** |
| * @} |
| */ |
| |
| |
| /* Private function prototypes -----------------------------------------------*/ |
| |
| /* Exported functions --------------------------------------------------------*/ |
| /** @addtogroup OPAMP_LL_Exported_Functions |
| * @{ |
| */ |
| |
| /** @addtogroup OPAMP_LL_EF_Init |
| * @{ |
| */ |
| |
| /** |
| * @brief De-initialize registers of the selected OPAMP instance |
| * to their default reset values. |
| * @param OPAMPx OPAMP instance |
| * @retval An ErrorStatus enumeration value: |
| * - SUCCESS: OPAMP registers are de-initialized |
| * - ERROR: OPAMP registers are not de-initialized |
| */ |
| ErrorStatus LL_OPAMP_DeInit(OPAMP_TypeDef* OPAMPx) |
| { |
| ErrorStatus status = SUCCESS; |
| |
| /* Check the parameters */ |
| assert_param(IS_OPAMP_ALL_INSTANCE(OPAMPx)); |
| |
| LL_OPAMP_WriteReg(OPAMPx, CSR, 0x00000000U); |
| |
| return status; |
| } |
| |
| /** |
| * @brief Initialize some features of OPAMP instance. |
| * @note This function reset bit of calibration mode to ensure |
| * to be in functional mode, in order to have OPAMP parameters |
| * (inputs selection, ...) set with the corresponding OPAMP mode |
| * to be effective. |
| * @note This function configures features of the selected OPAMP instance. |
| * Some features are also available at scope OPAMP common instance |
| * (common to several OPAMP instances). |
| * Refer to functions having argument "OPAMPxy_COMMON" as parameter. |
| * @param OPAMPx OPAMP instance |
| * @param OPAMP_InitStruct Pointer to a @ref LL_OPAMP_InitTypeDef structure |
| * @retval An ErrorStatus enumeration value: |
| * - SUCCESS: OPAMP registers are initialized |
| * - ERROR: OPAMP registers are not initialized |
| */ |
| ErrorStatus LL_OPAMP_Init(OPAMP_TypeDef *OPAMPx, LL_OPAMP_InitTypeDef *OPAMP_InitStruct) |
| { |
| /* Check the parameters */ |
| assert_param(IS_OPAMP_ALL_INSTANCE(OPAMPx)); |
| assert_param(IS_LL_OPAMP_POWER_MODE(OPAMP_InitStruct->PowerMode)); |
| assert_param(IS_LL_OPAMP_FUNCTIONAL_MODE(OPAMP_InitStruct->FunctionalMode)); |
| assert_param(IS_LL_OPAMP_INPUT_NONINVERTING(OPAMPx, OPAMP_InitStruct->InputNonInverting)); |
| |
| /* Note: OPAMP inverting input can be used with OPAMP in mode standalone */ |
| /* or PGA with external capacitors for filtering circuit. */ |
| /* Otherwise (OPAMP in mode follower), OPAMP inverting input is */ |
| /* not used (not connected to GPIO pin). */ |
| if(OPAMP_InitStruct->FunctionalMode != LL_OPAMP_MODE_FOLLOWER) |
| { |
| assert_param(IS_LL_OPAMP_INPUT_INVERTING(OPAMPx, OPAMP_InitStruct->InputInverting)); |
| } |
| |
| /* Configuration of OPAMP instance : */ |
| /* - PowerMode */ |
| /* - Functional mode */ |
| /* - Input non-inverting */ |
| /* - Input inverting */ |
| /* Note: Bit OPAMP_CSR_CALON reset to ensure to be in functional mode. */ |
| if(OPAMP_InitStruct->FunctionalMode != LL_OPAMP_MODE_FOLLOWER) |
| { |
| MODIFY_REG(OPAMPx->CSR, |
| OPAMP_CSR_OPALPM |
| | OPAMP_CSR_OPAMODE |
| | OPAMP_CSR_CALON |
| | OPAMP_CSR_VMSEL |
| | OPAMP_CSR_VPSEL |
| , |
| (OPAMP_InitStruct->PowerMode & OPAMP_POWERMODE_CSR_BIT_MASK) |
| | OPAMP_InitStruct->FunctionalMode |
| | OPAMP_InitStruct->InputNonInverting |
| | OPAMP_InitStruct->InputInverting |
| ); |
| } |
| else |
| { |
| MODIFY_REG(OPAMPx->CSR, |
| OPAMP_CSR_OPALPM |
| | OPAMP_CSR_OPAMODE |
| | OPAMP_CSR_CALON |
| | OPAMP_CSR_VMSEL |
| | OPAMP_CSR_VPSEL |
| , |
| (OPAMP_InitStruct->PowerMode & OPAMP_POWERMODE_CSR_BIT_MASK) |
| | LL_OPAMP_MODE_FOLLOWER |
| | OPAMP_InitStruct->InputNonInverting |
| | LL_OPAMP_INPUT_INVERT_CONNECT_NO |
| ); |
| } |
| |
| return SUCCESS; |
| } |
| |
| /** |
| * @brief Set each @ref LL_OPAMP_InitTypeDef field to default value. |
| * @param OPAMP_InitStruct pointer to a @ref LL_OPAMP_InitTypeDef structure |
| * whose fields will be set to default values. |
| * @retval None |
| */ |
| void LL_OPAMP_StructInit(LL_OPAMP_InitTypeDef *OPAMP_InitStruct) |
| { |
| /* Set OPAMP_InitStruct fields to default values */ |
| OPAMP_InitStruct->PowerMode = LL_OPAMP_POWERMODE_NORMAL; |
| OPAMP_InitStruct->FunctionalMode = LL_OPAMP_MODE_FOLLOWER; |
| OPAMP_InitStruct->InputNonInverting = LL_OPAMP_INPUT_NONINVERT_IO0; |
| /* Note: Parameter discarded if OPAMP in functional mode follower, */ |
| /* set anyway to its default value. */ |
| OPAMP_InitStruct->InputInverting = LL_OPAMP_INPUT_INVERT_CONNECT_NO; |
| } |
| |
| /** |
| * @} |
| */ |
| |
| /** |
| * @} |
| */ |
| |
| /** |
| * @} |
| */ |
| |
| #endif /* OPAMP1 || OPAMP2 */ |
| |
| /** |
| * @} |
| */ |
| |
| #endif /* USE_FULL_LL_DRIVER */ |
| |
| /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |