mbed official / mbed-dev

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Fri Feb 16 16:09:33 2018 +0000
Revision:
181:57724642e740
Parent:
167:e84263d55307
mbed-dev library. Release version 159.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /**
<> 144:ef7eb2e8f9f7 2 ******************************************************************************
<> 144:ef7eb2e8f9f7 3 * @file stm32l4xx_hal_comp.c
<> 144:ef7eb2e8f9f7 4 * @author MCD Application Team
<> 144:ef7eb2e8f9f7 5 * @brief COMP HAL module driver.
<> 144:ef7eb2e8f9f7 6 * This file provides firmware functions to manage the following
<> 144:ef7eb2e8f9f7 7 * functionalities of the COMP peripheral:
<> 144:ef7eb2e8f9f7 8 * + Initialization and de-initialization functions
<> 144:ef7eb2e8f9f7 9 * + Start/Stop operation functions in polling mode
<> 144:ef7eb2e8f9f7 10 * + Start/Stop operation functions in interrupt mode (through EXTI interrupt)
<> 144:ef7eb2e8f9f7 11 * + Peripheral control functions
<> 144:ef7eb2e8f9f7 12 * + Peripheral state functions
<> 144:ef7eb2e8f9f7 13 *
<> 144:ef7eb2e8f9f7 14 @verbatim
<> 144:ef7eb2e8f9f7 15 ================================================================================
<> 144:ef7eb2e8f9f7 16 ##### COMP Peripheral features #####
<> 144:ef7eb2e8f9f7 17 ================================================================================
AnnaBridge 181:57724642e740 18
AnnaBridge 181:57724642e740 19 [..]
AnnaBridge 181:57724642e740 20 The STM32L4xx device family integrates two analog comparators instances:
AnnaBridge 181:57724642e740 21 COMP1, COMP2.
AnnaBridge 181:57724642e740 22 (#) Comparators input minus (inverting input) and input plus (non inverting input)
<> 144:ef7eb2e8f9f7 23 can be set to internal references or to GPIO pins
<> 144:ef7eb2e8f9f7 24 (refer to GPIO list in reference manual).
AnnaBridge 181:57724642e740 25
AnnaBridge 181:57724642e740 26 (#) Comparators output level is available using HAL_COMP_GetOutputLevel()
<> 144:ef7eb2e8f9f7 27 and can be redirected to other peripherals: GPIO pins (in mode
<> 144:ef7eb2e8f9f7 28 alternate functions for comparator), timers.
<> 144:ef7eb2e8f9f7 29 (refer to GPIO list in reference manual).
AnnaBridge 181:57724642e740 30
AnnaBridge 181:57724642e740 31 (#) The comparators have interrupt capability through the EXTI controller
AnnaBridge 181:57724642e740 32 with wake-up from sleep and stop modes.
AnnaBridge 181:57724642e740 33
<> 144:ef7eb2e8f9f7 34 (#) Pairs of comparators instances can be combined in window mode
<> 144:ef7eb2e8f9f7 35 (2 consecutive instances odd and even COMP<x> and COMP<x+1>).
AnnaBridge 181:57724642e740 36
<> 144:ef7eb2e8f9f7 37 From the corresponding IRQ handler, the right interrupt source can be retrieved
AnnaBridge 181:57724642e740 38 using macro __HAL_COMP_COMPx_EXTI_GET_FLAG().
<> 144:ef7eb2e8f9f7 39
<> 144:ef7eb2e8f9f7 40 ##### How to use this driver #####
<> 144:ef7eb2e8f9f7 41 ================================================================================
<> 144:ef7eb2e8f9f7 42 [..]
<> 144:ef7eb2e8f9f7 43 This driver provides functions to configure and program the comparator instances
<> 144:ef7eb2e8f9f7 44 of STM32L4xx devices.
AnnaBridge 181:57724642e740 45
<> 144:ef7eb2e8f9f7 46 To use the comparator, perform the following steps:
<> 144:ef7eb2e8f9f7 47
<> 144:ef7eb2e8f9f7 48 (#) Initialize the COMP low level resources by implementing the HAL_COMP_MspInit():
<> 144:ef7eb2e8f9f7 49 (++) Configure the GPIO connected to comparator inputs plus and minus in analog mode
<> 144:ef7eb2e8f9f7 50 using HAL_GPIO_Init().
<> 144:ef7eb2e8f9f7 51 (++) If needed, configure the GPIO connected to comparator output in alternate function mode
<> 144:ef7eb2e8f9f7 52 using HAL_GPIO_Init().
<> 144:ef7eb2e8f9f7 53 (++) If required enable the COMP interrupt by configuring and enabling EXTI line in Interrupt mode and
<> 144:ef7eb2e8f9f7 54 selecting the desired sensitivity level using HAL_GPIO_Init() function. After that enable the comparator
<> 144:ef7eb2e8f9f7 55 interrupt vector using HAL_NVIC_EnableIRQ() function.
<> 144:ef7eb2e8f9f7 56
<> 144:ef7eb2e8f9f7 57 (#) Configure the comparator using HAL_COMP_Init() function:
<> 144:ef7eb2e8f9f7 58 (++) Select the input minus (inverting input)
<> 144:ef7eb2e8f9f7 59 (++) Select the input plus (non-inverting input)
<> 144:ef7eb2e8f9f7 60 (++) Select the hysteresis
<> 144:ef7eb2e8f9f7 61 (++) Select the blanking source
AnnaBridge 181:57724642e740 62 (++) Select the output polarity
<> 144:ef7eb2e8f9f7 63 (++) Select the power mode
<> 144:ef7eb2e8f9f7 64 (++) Select the window mode
<> 144:ef7eb2e8f9f7 65
<> 144:ef7eb2e8f9f7 66 -@@- HAL_COMP_Init() calls internally __HAL_RCC_SYSCFG_CLK_ENABLE()
<> 144:ef7eb2e8f9f7 67 to enable internal control clock of the comparators.
<> 144:ef7eb2e8f9f7 68 However, this is a legacy strategy. In future STM32 families,
<> 144:ef7eb2e8f9f7 69 COMP clock enable must be implemented by user in "HAL_COMP_MspInit()".
<> 144:ef7eb2e8f9f7 70 Therefore, for compatibility anticipation, it is recommended to
<> 144:ef7eb2e8f9f7 71 implement __HAL_RCC_SYSCFG_CLK_ENABLE() in "HAL_COMP_MspInit()".
<> 144:ef7eb2e8f9f7 72
<> 144:ef7eb2e8f9f7 73 (#) Reconfiguration on-the-fly of comparator can be done by calling again
<> 144:ef7eb2e8f9f7 74 function HAL_COMP_Init() with new input structure parameters values.
<> 144:ef7eb2e8f9f7 75
<> 144:ef7eb2e8f9f7 76 (#) Enable the comparator using HAL_COMP_Start() function.
<> 144:ef7eb2e8f9f7 77
<> 144:ef7eb2e8f9f7 78 (#) Use HAL_COMP_TriggerCallback() or HAL_COMP_GetOutputLevel() functions
<> 144:ef7eb2e8f9f7 79 to manage comparator outputs (events and output level).
<> 144:ef7eb2e8f9f7 80
<> 144:ef7eb2e8f9f7 81 (#) Disable the comparator using HAL_COMP_Stop() function.
<> 144:ef7eb2e8f9f7 82
<> 144:ef7eb2e8f9f7 83 (#) De-initialize the comparator using HAL_COMP_DeInit() function.
<> 144:ef7eb2e8f9f7 84
<> 144:ef7eb2e8f9f7 85 (#) For safety purpose, comparator configuration can be locked using HAL_COMP_Lock() function.
<> 144:ef7eb2e8f9f7 86 The only way to unlock the comparator is a device hardware reset.
<> 144:ef7eb2e8f9f7 87
<> 144:ef7eb2e8f9f7 88 @endverbatim
<> 144:ef7eb2e8f9f7 89 ******************************************************************************
<> 144:ef7eb2e8f9f7 90
<> 144:ef7eb2e8f9f7 91 Table 1. COMP inputs and output for STM32L4xx devices
<> 144:ef7eb2e8f9f7 92 +---------------------------------------------------------+
<> 144:ef7eb2e8f9f7 93 | | | COMP1 | COMP2 |
<> 144:ef7eb2e8f9f7 94 |----------------|----------------|-----------|-----------|
<> 144:ef7eb2e8f9f7 95 | | IO1 | PC5 | PB4 |
<> 144:ef7eb2e8f9f7 96 | Input plus | IO2 | PB2 | PB6 |
<> 144:ef7eb2e8f9f7 97 | | IO3 (3) | PA1 | PA3 |
<> 144:ef7eb2e8f9f7 98 |----------------|----------------|-----------------------|
<> 144:ef7eb2e8f9f7 99 | | 1/4 VrefInt | Available | Available |
<> 144:ef7eb2e8f9f7 100 | | 1/2 VrefInt | Available | Available |
<> 144:ef7eb2e8f9f7 101 | | 3/4 VrefInt | Available | Available |
<> 144:ef7eb2e8f9f7 102 | Input minus | VrefInt | Available | Available |
<> 144:ef7eb2e8f9f7 103 | | DAC1 channel 1 | Available | Available |
<> 144:ef7eb2e8f9f7 104 | | DAC1 channel 2 | Available | Available |
<> 144:ef7eb2e8f9f7 105 | | IO1 | PB1 | PB3 |
<> 144:ef7eb2e8f9f7 106 | | IO2 | PC4 | PB7 |
<> 144:ef7eb2e8f9f7 107 | | IO3 (3) | PA0 | PA2 |
<> 144:ef7eb2e8f9f7 108 | | IO4 (3) | PA4 | PA4 |
<> 144:ef7eb2e8f9f7 109 | | IO5 (3) | PA5 | PA5 |
<> 144:ef7eb2e8f9f7 110 +---------------------------------------------------------+
<> 144:ef7eb2e8f9f7 111 | Output | | PB0 (1) | PB5 (1) |
<> 144:ef7eb2e8f9f7 112 | | | PB10 (1) | PB11 (1) |
<> 144:ef7eb2e8f9f7 113 | | | TIM (2) | TIM (2) |
<> 144:ef7eb2e8f9f7 114 +---------------------------------------------------------+
<> 144:ef7eb2e8f9f7 115 (1) GPIO must be set to alternate function for comparator
<> 144:ef7eb2e8f9f7 116 (2) Comparators output to timers is set in timers instances.
<> 144:ef7eb2e8f9f7 117 (3) Only STM32L43x/L44x
<> 144:ef7eb2e8f9f7 118
<> 144:ef7eb2e8f9f7 119 ******************************************************************************
<> 144:ef7eb2e8f9f7 120 * @attention
<> 144:ef7eb2e8f9f7 121 *
AnnaBridge 167:e84263d55307 122 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
<> 144:ef7eb2e8f9f7 123 *
<> 144:ef7eb2e8f9f7 124 * Redistribution and use in source and binary forms, with or without modification,
<> 144:ef7eb2e8f9f7 125 * are permitted provided that the following conditions are met:
<> 144:ef7eb2e8f9f7 126 * 1. Redistributions of source code must retain the above copyright notice,
<> 144:ef7eb2e8f9f7 127 * this list of conditions and the following disclaimer.
<> 144:ef7eb2e8f9f7 128 * 2. Redistributions in binary form must reproduce the above copyright notice,
<> 144:ef7eb2e8f9f7 129 * this list of conditions and the following disclaimer in the documentation
<> 144:ef7eb2e8f9f7 130 * and/or other materials provided with the distribution.
<> 144:ef7eb2e8f9f7 131 * 3. Neither the name of STMicroelectronics nor the names of its contributors
<> 144:ef7eb2e8f9f7 132 * may be used to endorse or promote products derived from this software
<> 144:ef7eb2e8f9f7 133 * without specific prior written permission.
<> 144:ef7eb2e8f9f7 134 *
<> 144:ef7eb2e8f9f7 135 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
<> 144:ef7eb2e8f9f7 136 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
<> 144:ef7eb2e8f9f7 137 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
<> 144:ef7eb2e8f9f7 138 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
<> 144:ef7eb2e8f9f7 139 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
<> 144:ef7eb2e8f9f7 140 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
<> 144:ef7eb2e8f9f7 141 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
<> 144:ef7eb2e8f9f7 142 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
<> 144:ef7eb2e8f9f7 143 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
<> 144:ef7eb2e8f9f7 144 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<> 144:ef7eb2e8f9f7 145 *
<> 144:ef7eb2e8f9f7 146 ******************************************************************************
<> 144:ef7eb2e8f9f7 147 */
<> 144:ef7eb2e8f9f7 148
<> 144:ef7eb2e8f9f7 149 /* Includes ------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 150 #include "stm32l4xx_hal.h"
<> 144:ef7eb2e8f9f7 151
AnnaBridge 181:57724642e740 152 #ifdef HAL_COMP_MODULE_ENABLED
AnnaBridge 181:57724642e740 153
AnnaBridge 181:57724642e740 154 #if defined (COMP1) || defined (COMP2)
AnnaBridge 181:57724642e740 155
<> 144:ef7eb2e8f9f7 156 /** @addtogroup STM32L4xx_HAL_Driver
<> 144:ef7eb2e8f9f7 157 * @{
<> 144:ef7eb2e8f9f7 158 */
<> 144:ef7eb2e8f9f7 159
<> 144:ef7eb2e8f9f7 160 /** @defgroup COMP COMP
<> 144:ef7eb2e8f9f7 161 * @brief COMP HAL module driver
<> 144:ef7eb2e8f9f7 162 * @{
<> 144:ef7eb2e8f9f7 163 */
<> 144:ef7eb2e8f9f7 164
<> 144:ef7eb2e8f9f7 165 /* Private typedef -----------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 166 /* Private define ------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 167 /** @addtogroup COMP_Private_Constants
<> 144:ef7eb2e8f9f7 168 * @{
<> 144:ef7eb2e8f9f7 169 */
<> 144:ef7eb2e8f9f7 170
<> 144:ef7eb2e8f9f7 171 /* Delay for COMP startup time. */
<> 144:ef7eb2e8f9f7 172 /* Note: Delay required to reach propagation delay specification. */
<> 144:ef7eb2e8f9f7 173 /* Literal set to maximum value (refer to device datasheet, */
<> 144:ef7eb2e8f9f7 174 /* parameter "tSTART"). */
<> 144:ef7eb2e8f9f7 175 /* Unit: us */
AnnaBridge 181:57724642e740 176 #define COMP_DELAY_STARTUP_US (80U) /*!< Delay for COMP startup time */
<> 144:ef7eb2e8f9f7 177
<> 144:ef7eb2e8f9f7 178 /* Delay for COMP voltage scaler stabilization time. */
<> 144:ef7eb2e8f9f7 179 /* Literal set to maximum value (refer to device datasheet, */
<> 144:ef7eb2e8f9f7 180 /* parameter "tSTART_SCALER"). */
<> 144:ef7eb2e8f9f7 181 /* Unit: us */
AnnaBridge 181:57724642e740 182 #define COMP_DELAY_VOLTAGE_SCALER_STAB_US (200U) /*!< Delay for COMP voltage scaler stabilization time */
<> 144:ef7eb2e8f9f7 183
AnnaBridge 181:57724642e740 184 #define COMP_OUTPUT_LEVEL_BITOFFSET_POS (30U)
<> 144:ef7eb2e8f9f7 185
<> 144:ef7eb2e8f9f7 186 /**
<> 144:ef7eb2e8f9f7 187 * @}
<> 144:ef7eb2e8f9f7 188 */
<> 144:ef7eb2e8f9f7 189
<> 144:ef7eb2e8f9f7 190 /* Private macro -------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 191 /* Private variables ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 192 /* Private function prototypes -----------------------------------------------*/
<> 144:ef7eb2e8f9f7 193 /* Exported functions --------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 194
<> 144:ef7eb2e8f9f7 195 /** @defgroup COMP_Exported_Functions COMP Exported Functions
<> 144:ef7eb2e8f9f7 196 * @{
<> 144:ef7eb2e8f9f7 197 */
<> 144:ef7eb2e8f9f7 198
<> 144:ef7eb2e8f9f7 199 /** @defgroup COMP_Exported_Functions_Group1 Initialization/de-initialization functions
<> 144:ef7eb2e8f9f7 200 * @brief Initialization and de-initialization functions.
<> 144:ef7eb2e8f9f7 201 *
<> 144:ef7eb2e8f9f7 202 @verbatim
<> 144:ef7eb2e8f9f7 203 ===============================================================================
<> 144:ef7eb2e8f9f7 204 ##### Initialization and de-initialization functions #####
<> 144:ef7eb2e8f9f7 205 ===============================================================================
<> 144:ef7eb2e8f9f7 206 [..] This section provides functions to initialize and de-initialize comparators
<> 144:ef7eb2e8f9f7 207
<> 144:ef7eb2e8f9f7 208 @endverbatim
<> 144:ef7eb2e8f9f7 209 * @{
<> 144:ef7eb2e8f9f7 210 */
<> 144:ef7eb2e8f9f7 211
<> 144:ef7eb2e8f9f7 212 /**
<> 144:ef7eb2e8f9f7 213 * @brief Initialize the COMP according to the specified
<> 144:ef7eb2e8f9f7 214 * parameters in the COMP_InitTypeDef and initialize the associated handle.
<> 144:ef7eb2e8f9f7 215 * @note If the selected comparator is locked, initialization can't be performed.
<> 144:ef7eb2e8f9f7 216 * To unlock the configuration, perform a system reset.
<> 144:ef7eb2e8f9f7 217 * @param hcomp COMP handle
<> 144:ef7eb2e8f9f7 218 * @retval HAL status
<> 144:ef7eb2e8f9f7 219 */
<> 144:ef7eb2e8f9f7 220 HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 221 {
AnnaBridge 181:57724642e740 222 uint32_t tmp_csr = 0U;
AnnaBridge 181:57724642e740 223 uint32_t exti_line = 0U;
AnnaBridge 181:57724642e740 224 uint32_t comp_voltage_scaler_not_initialized = 0U;
AnnaBridge 181:57724642e740 225 __IO uint32_t wait_loop_index = 0U;
<> 144:ef7eb2e8f9f7 226 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 227
<> 144:ef7eb2e8f9f7 228 /* Check the COMP handle allocation and lock status */
<> 144:ef7eb2e8f9f7 229 if((hcomp == NULL) || (__HAL_COMP_IS_LOCKED(hcomp)))
<> 144:ef7eb2e8f9f7 230 {
<> 144:ef7eb2e8f9f7 231 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 232 }
<> 144:ef7eb2e8f9f7 233 else
<> 144:ef7eb2e8f9f7 234 {
<> 144:ef7eb2e8f9f7 235 /* Check the parameters */
<> 144:ef7eb2e8f9f7 236 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 237 assert_param(IS_COMP_INPUT_PLUS(hcomp->Instance, hcomp->Init.NonInvertingInput));
<> 144:ef7eb2e8f9f7 238 assert_param(IS_COMP_INPUT_MINUS(hcomp->Instance, hcomp->Init.InvertingInput));
<> 144:ef7eb2e8f9f7 239 assert_param(IS_COMP_OUTPUTPOL(hcomp->Init.OutputPol));
<> 144:ef7eb2e8f9f7 240 assert_param(IS_COMP_POWERMODE(hcomp->Init.Mode));
<> 144:ef7eb2e8f9f7 241 assert_param(IS_COMP_HYSTERESIS(hcomp->Init.Hysteresis));
<> 144:ef7eb2e8f9f7 242 assert_param(IS_COMP_BLANKINGSRC_INSTANCE(hcomp->Instance, hcomp->Init.BlankingSrce));
<> 144:ef7eb2e8f9f7 243 assert_param(IS_COMP_TRIGGERMODE(hcomp->Init.TriggerMode));
<> 144:ef7eb2e8f9f7 244 assert_param(IS_COMP_WINDOWMODE(hcomp->Init.WindowMode));
<> 144:ef7eb2e8f9f7 245
<> 144:ef7eb2e8f9f7 246 if(hcomp->State == HAL_COMP_STATE_RESET)
<> 144:ef7eb2e8f9f7 247 {
<> 144:ef7eb2e8f9f7 248 /* Allocate lock resource and initialize it */
<> 144:ef7eb2e8f9f7 249 hcomp->Lock = HAL_UNLOCKED;
<> 144:ef7eb2e8f9f7 250
<> 144:ef7eb2e8f9f7 251 /* Init SYSCFG and the low level hardware to access comparators */
<> 144:ef7eb2e8f9f7 252 /* Note: HAL_COMP_Init() calls __HAL_RCC_SYSCFG_CLK_ENABLE() */
<> 144:ef7eb2e8f9f7 253 /* to enable internal control clock of the comparators. */
<> 144:ef7eb2e8f9f7 254 /* However, this is a legacy strategy. In future STM32 families, */
<> 144:ef7eb2e8f9f7 255 /* COMP clock enable must be implemented by user */
<> 144:ef7eb2e8f9f7 256 /* in "HAL_COMP_MspInit()". */
<> 144:ef7eb2e8f9f7 257 /* Therefore, for compatibility anticipation, it is recommended */
<> 144:ef7eb2e8f9f7 258 /* to implement __HAL_RCC_SYSCFG_CLK_ENABLE() */
<> 144:ef7eb2e8f9f7 259 /* in "HAL_COMP_MspInit()". */
<> 144:ef7eb2e8f9f7 260 __HAL_RCC_SYSCFG_CLK_ENABLE();
<> 144:ef7eb2e8f9f7 261
<> 144:ef7eb2e8f9f7 262 /* Init the low level hardware */
<> 144:ef7eb2e8f9f7 263 HAL_COMP_MspInit(hcomp);
<> 144:ef7eb2e8f9f7 264 }
<> 144:ef7eb2e8f9f7 265
<> 144:ef7eb2e8f9f7 266 /* Memorize voltage scaler state before initialization */
<> 144:ef7eb2e8f9f7 267 comp_voltage_scaler_not_initialized = (READ_BIT(hcomp->Instance->CSR, COMP_CSR_SCALEN) == 0);
<> 144:ef7eb2e8f9f7 268
<> 144:ef7eb2e8f9f7 269 /* Set COMP parameters */
AnnaBridge 181:57724642e740 270 tmp_csr = ( hcomp->Init.NonInvertingInput
AnnaBridge 181:57724642e740 271 | hcomp->Init.InvertingInput
AnnaBridge 181:57724642e740 272 | hcomp->Init.BlankingSrce
AnnaBridge 181:57724642e740 273 | hcomp->Init.Hysteresis
AnnaBridge 181:57724642e740 274 | hcomp->Init.OutputPol
AnnaBridge 181:57724642e740 275 | hcomp->Init.Mode
AnnaBridge 181:57724642e740 276 );
<> 144:ef7eb2e8f9f7 277
<> 144:ef7eb2e8f9f7 278 /* Set parameters in COMP register */
AnnaBridge 181:57724642e740 279 /* Note: Update all bits except read-only, lock and enable bits */
<> 144:ef7eb2e8f9f7 280 #if defined (COMP_CSR_INMESEL)
<> 144:ef7eb2e8f9f7 281 MODIFY_REG(hcomp->Instance->CSR,
<> 144:ef7eb2e8f9f7 282 COMP_CSR_PWRMODE | COMP_CSR_INMSEL | COMP_CSR_INPSEL |
<> 144:ef7eb2e8f9f7 283 COMP_CSR_WINMODE | COMP_CSR_POLARITY | COMP_CSR_HYST |
<> 144:ef7eb2e8f9f7 284 COMP_CSR_BLANKING | COMP_CSR_BRGEN | COMP_CSR_SCALEN | COMP_CSR_INMESEL,
<> 144:ef7eb2e8f9f7 285 tmp_csr
<> 144:ef7eb2e8f9f7 286 );
<> 144:ef7eb2e8f9f7 287 #else
<> 144:ef7eb2e8f9f7 288 MODIFY_REG(hcomp->Instance->CSR,
<> 144:ef7eb2e8f9f7 289 COMP_CSR_PWRMODE | COMP_CSR_INMSEL | COMP_CSR_INPSEL |
<> 144:ef7eb2e8f9f7 290 COMP_CSR_WINMODE | COMP_CSR_POLARITY | COMP_CSR_HYST |
<> 144:ef7eb2e8f9f7 291 COMP_CSR_BLANKING | COMP_CSR_BRGEN | COMP_CSR_SCALEN,
<> 144:ef7eb2e8f9f7 292 tmp_csr
<> 144:ef7eb2e8f9f7 293 );
<> 144:ef7eb2e8f9f7 294 #endif
<> 144:ef7eb2e8f9f7 295
<> 144:ef7eb2e8f9f7 296 /* Set window mode */
<> 144:ef7eb2e8f9f7 297 /* Note: Window mode bit is located into 1 out of the 2 pairs of COMP */
<> 144:ef7eb2e8f9f7 298 /* instances. Therefore, this function can update another COMP */
<> 144:ef7eb2e8f9f7 299 /* instance that the one currently selected. */
<> 144:ef7eb2e8f9f7 300 if(hcomp->Init.WindowMode == COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON)
<> 144:ef7eb2e8f9f7 301 {
<> 144:ef7eb2e8f9f7 302 SET_BIT(COMP12_COMMON->CSR, COMP_CSR_WINMODE);
<> 144:ef7eb2e8f9f7 303 }
<> 144:ef7eb2e8f9f7 304 else
<> 144:ef7eb2e8f9f7 305 {
<> 144:ef7eb2e8f9f7 306 CLEAR_BIT(COMP12_COMMON->CSR, COMP_CSR_WINMODE);
<> 144:ef7eb2e8f9f7 307 }
<> 144:ef7eb2e8f9f7 308
<> 144:ef7eb2e8f9f7 309 /* Delay for COMP scaler bridge voltage stabilization */
<> 144:ef7eb2e8f9f7 310 /* Apply the delay if voltage scaler bridge is enabled for the first time */
AnnaBridge 181:57724642e740 311 if ((READ_BIT(hcomp->Instance->CSR, COMP_CSR_SCALEN) != 0U) &&
AnnaBridge 181:57724642e740 312 (comp_voltage_scaler_not_initialized != 0U) )
<> 144:ef7eb2e8f9f7 313 {
<> 144:ef7eb2e8f9f7 314 /* Wait loop initialization and execution */
<> 144:ef7eb2e8f9f7 315 /* Note: Variable divided by 2 to compensate partially */
<> 144:ef7eb2e8f9f7 316 /* CPU processing cycles. */
AnnaBridge 181:57724642e740 317 wait_loop_index = (COMP_DELAY_VOLTAGE_SCALER_STAB_US * (SystemCoreClock / (1000000 * 2U)));
AnnaBridge 181:57724642e740 318 while(wait_loop_index != 0U)
<> 144:ef7eb2e8f9f7 319 {
<> 144:ef7eb2e8f9f7 320 wait_loop_index--;
<> 144:ef7eb2e8f9f7 321 }
<> 144:ef7eb2e8f9f7 322 }
<> 144:ef7eb2e8f9f7 323
<> 144:ef7eb2e8f9f7 324 /* Get the EXTI line corresponding to the selected COMP instance */
<> 144:ef7eb2e8f9f7 325 exti_line = COMP_GET_EXTI_LINE(hcomp->Instance);
<> 144:ef7eb2e8f9f7 326
<> 144:ef7eb2e8f9f7 327 /* Manage EXTI settings */
<> 144:ef7eb2e8f9f7 328 if((hcomp->Init.TriggerMode & (COMP_EXTI_IT | COMP_EXTI_EVENT)) != RESET)
<> 144:ef7eb2e8f9f7 329 {
<> 144:ef7eb2e8f9f7 330 /* Configure EXTI rising edge */
<> 144:ef7eb2e8f9f7 331 if((hcomp->Init.TriggerMode & COMP_EXTI_RISING) != RESET)
<> 144:ef7eb2e8f9f7 332 {
AnnaBridge 181:57724642e740 333 LL_EXTI_EnableRisingTrig_0_31(exti_line);
<> 144:ef7eb2e8f9f7 334 }
<> 144:ef7eb2e8f9f7 335 else
<> 144:ef7eb2e8f9f7 336 {
AnnaBridge 181:57724642e740 337 LL_EXTI_DisableRisingTrig_0_31(exti_line);
<> 144:ef7eb2e8f9f7 338 }
<> 144:ef7eb2e8f9f7 339
<> 144:ef7eb2e8f9f7 340 /* Configure EXTI falling edge */
<> 144:ef7eb2e8f9f7 341 if((hcomp->Init.TriggerMode & COMP_EXTI_FALLING) != RESET)
<> 144:ef7eb2e8f9f7 342 {
AnnaBridge 181:57724642e740 343 LL_EXTI_EnableFallingTrig_0_31(exti_line);
<> 144:ef7eb2e8f9f7 344 }
<> 144:ef7eb2e8f9f7 345 else
<> 144:ef7eb2e8f9f7 346 {
AnnaBridge 181:57724642e740 347 LL_EXTI_DisableFallingTrig_0_31(exti_line);
<> 144:ef7eb2e8f9f7 348 }
<> 144:ef7eb2e8f9f7 349
<> 144:ef7eb2e8f9f7 350 /* Clear COMP EXTI pending bit (if any) */
AnnaBridge 181:57724642e740 351 LL_EXTI_ClearFlag_0_31(exti_line);
<> 144:ef7eb2e8f9f7 352
<> 144:ef7eb2e8f9f7 353 /* Configure EXTI event mode */
<> 144:ef7eb2e8f9f7 354 if((hcomp->Init.TriggerMode & COMP_EXTI_EVENT) != RESET)
<> 144:ef7eb2e8f9f7 355 {
AnnaBridge 181:57724642e740 356 LL_EXTI_EnableEvent_0_31(exti_line);
<> 144:ef7eb2e8f9f7 357 }
<> 144:ef7eb2e8f9f7 358 else
<> 144:ef7eb2e8f9f7 359 {
AnnaBridge 181:57724642e740 360 LL_EXTI_DisableEvent_0_31(exti_line);
<> 144:ef7eb2e8f9f7 361 }
<> 144:ef7eb2e8f9f7 362
<> 144:ef7eb2e8f9f7 363 /* Configure EXTI interrupt mode */
<> 144:ef7eb2e8f9f7 364 if((hcomp->Init.TriggerMode & COMP_EXTI_IT) != RESET)
<> 144:ef7eb2e8f9f7 365 {
AnnaBridge 181:57724642e740 366 LL_EXTI_EnableIT_0_31(exti_line);
<> 144:ef7eb2e8f9f7 367 }
<> 144:ef7eb2e8f9f7 368 else
<> 144:ef7eb2e8f9f7 369 {
AnnaBridge 181:57724642e740 370 LL_EXTI_DisableIT_0_31(exti_line);
<> 144:ef7eb2e8f9f7 371 }
<> 144:ef7eb2e8f9f7 372 }
<> 144:ef7eb2e8f9f7 373 else
<> 144:ef7eb2e8f9f7 374 {
<> 144:ef7eb2e8f9f7 375 /* Disable EXTI event mode */
AnnaBridge 181:57724642e740 376 LL_EXTI_DisableEvent_0_31(exti_line);
<> 144:ef7eb2e8f9f7 377
<> 144:ef7eb2e8f9f7 378 /* Disable EXTI interrupt mode */
AnnaBridge 181:57724642e740 379 LL_EXTI_DisableIT_0_31(exti_line);
<> 144:ef7eb2e8f9f7 380 }
<> 144:ef7eb2e8f9f7 381
<> 144:ef7eb2e8f9f7 382 /* Set HAL COMP handle state */
<> 144:ef7eb2e8f9f7 383 /* Note: Transition from state reset to state ready, */
<> 144:ef7eb2e8f9f7 384 /* otherwise (coming from state ready or busy) no state update. */
<> 144:ef7eb2e8f9f7 385 if (hcomp->State == HAL_COMP_STATE_RESET)
<> 144:ef7eb2e8f9f7 386 {
<> 144:ef7eb2e8f9f7 387 hcomp->State = HAL_COMP_STATE_READY;
<> 144:ef7eb2e8f9f7 388 }
<> 144:ef7eb2e8f9f7 389 }
<> 144:ef7eb2e8f9f7 390
<> 144:ef7eb2e8f9f7 391 return status;
<> 144:ef7eb2e8f9f7 392 }
<> 144:ef7eb2e8f9f7 393
<> 144:ef7eb2e8f9f7 394 /**
<> 144:ef7eb2e8f9f7 395 * @brief DeInitialize the COMP peripheral.
<> 144:ef7eb2e8f9f7 396 * @note Deinitialization cannot be performed if the COMP configuration is locked.
<> 144:ef7eb2e8f9f7 397 * To unlock the configuration, perform a system reset.
<> 144:ef7eb2e8f9f7 398 * @param hcomp COMP handle
<> 144:ef7eb2e8f9f7 399 * @retval HAL status
<> 144:ef7eb2e8f9f7 400 */
<> 144:ef7eb2e8f9f7 401 HAL_StatusTypeDef HAL_COMP_DeInit(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 402 {
<> 144:ef7eb2e8f9f7 403 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 404
<> 144:ef7eb2e8f9f7 405 /* Check the COMP handle allocation and lock status */
<> 144:ef7eb2e8f9f7 406 if((hcomp == NULL) || (__HAL_COMP_IS_LOCKED(hcomp)))
<> 144:ef7eb2e8f9f7 407 {
<> 144:ef7eb2e8f9f7 408 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 409 }
<> 144:ef7eb2e8f9f7 410 else
<> 144:ef7eb2e8f9f7 411 {
<> 144:ef7eb2e8f9f7 412 /* Check the parameter */
<> 144:ef7eb2e8f9f7 413 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 414
<> 144:ef7eb2e8f9f7 415 /* Set COMP_CSR register to reset value */
AnnaBridge 181:57724642e740 416 WRITE_REG(hcomp->Instance->CSR, 0x00000000U);
<> 144:ef7eb2e8f9f7 417
<> 144:ef7eb2e8f9f7 418 /* DeInit the low level hardware: SYSCFG, GPIO, CLOCK and NVIC */
<> 144:ef7eb2e8f9f7 419 HAL_COMP_MspDeInit(hcomp);
<> 144:ef7eb2e8f9f7 420
<> 144:ef7eb2e8f9f7 421 /* Set HAL COMP handle state */
<> 144:ef7eb2e8f9f7 422 hcomp->State = HAL_COMP_STATE_RESET;
<> 144:ef7eb2e8f9f7 423
<> 144:ef7eb2e8f9f7 424 /* Release Lock */
<> 144:ef7eb2e8f9f7 425 __HAL_UNLOCK(hcomp);
<> 144:ef7eb2e8f9f7 426 }
<> 144:ef7eb2e8f9f7 427
<> 144:ef7eb2e8f9f7 428 return status;
<> 144:ef7eb2e8f9f7 429 }
<> 144:ef7eb2e8f9f7 430
<> 144:ef7eb2e8f9f7 431 /**
<> 144:ef7eb2e8f9f7 432 * @brief Initialize the COMP MSP.
<> 144:ef7eb2e8f9f7 433 * @param hcomp COMP handle
<> 144:ef7eb2e8f9f7 434 * @retval None
<> 144:ef7eb2e8f9f7 435 */
<> 144:ef7eb2e8f9f7 436 __weak void HAL_COMP_MspInit(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 437 {
<> 144:ef7eb2e8f9f7 438 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 439 UNUSED(hcomp);
<> 144:ef7eb2e8f9f7 440
<> 144:ef7eb2e8f9f7 441 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 442 the HAL_COMP_MspInit could be implemented in the user file
<> 144:ef7eb2e8f9f7 443 */
<> 144:ef7eb2e8f9f7 444 }
<> 144:ef7eb2e8f9f7 445
<> 144:ef7eb2e8f9f7 446 /**
<> 144:ef7eb2e8f9f7 447 * @brief DeInitialize the COMP MSP.
<> 144:ef7eb2e8f9f7 448 * @param hcomp COMP handle
<> 144:ef7eb2e8f9f7 449 * @retval None
<> 144:ef7eb2e8f9f7 450 */
<> 144:ef7eb2e8f9f7 451 __weak void HAL_COMP_MspDeInit(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 452 {
<> 144:ef7eb2e8f9f7 453 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 454 UNUSED(hcomp);
<> 144:ef7eb2e8f9f7 455
<> 144:ef7eb2e8f9f7 456 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 457 the HAL_COMP_MspDeInit could be implemented in the user file
<> 144:ef7eb2e8f9f7 458 */
<> 144:ef7eb2e8f9f7 459 }
<> 144:ef7eb2e8f9f7 460
<> 144:ef7eb2e8f9f7 461 /**
<> 144:ef7eb2e8f9f7 462 * @}
<> 144:ef7eb2e8f9f7 463 */
<> 144:ef7eb2e8f9f7 464
<> 144:ef7eb2e8f9f7 465 /** @defgroup COMP_Exported_Functions_Group2 Start-Stop operation functions
<> 144:ef7eb2e8f9f7 466 * @brief Start-Stop operation functions.
<> 144:ef7eb2e8f9f7 467 *
<> 144:ef7eb2e8f9f7 468 @verbatim
<> 144:ef7eb2e8f9f7 469 ===============================================================================
<> 144:ef7eb2e8f9f7 470 ##### IO operation functions #####
<> 144:ef7eb2e8f9f7 471 ===============================================================================
<> 144:ef7eb2e8f9f7 472 [..] This section provides functions allowing to:
<> 144:ef7eb2e8f9f7 473 (+) Start a comparator instance.
<> 144:ef7eb2e8f9f7 474 (+) Stop a comparator instance.
<> 144:ef7eb2e8f9f7 475
<> 144:ef7eb2e8f9f7 476 @endverbatim
<> 144:ef7eb2e8f9f7 477 * @{
<> 144:ef7eb2e8f9f7 478 */
<> 144:ef7eb2e8f9f7 479
<> 144:ef7eb2e8f9f7 480 /**
<> 144:ef7eb2e8f9f7 481 * @brief Start the comparator.
<> 144:ef7eb2e8f9f7 482 * @param hcomp COMP handle
<> 144:ef7eb2e8f9f7 483 * @retval HAL status
<> 144:ef7eb2e8f9f7 484 */
<> 144:ef7eb2e8f9f7 485 HAL_StatusTypeDef HAL_COMP_Start(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 486 {
AnnaBridge 181:57724642e740 487 __IO uint32_t wait_loop_index = 0U;
<> 144:ef7eb2e8f9f7 488 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 489
<> 144:ef7eb2e8f9f7 490 /* Check the COMP handle allocation and lock status */
<> 144:ef7eb2e8f9f7 491 if((hcomp == NULL) || (__HAL_COMP_IS_LOCKED(hcomp)))
<> 144:ef7eb2e8f9f7 492 {
<> 144:ef7eb2e8f9f7 493 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 494 }
<> 144:ef7eb2e8f9f7 495 else
<> 144:ef7eb2e8f9f7 496 {
<> 144:ef7eb2e8f9f7 497 /* Check the parameter */
<> 144:ef7eb2e8f9f7 498 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 499
<> 144:ef7eb2e8f9f7 500 if(hcomp->State == HAL_COMP_STATE_READY)
<> 144:ef7eb2e8f9f7 501 {
<> 144:ef7eb2e8f9f7 502 /* Enable the selected comparator */
<> 144:ef7eb2e8f9f7 503 SET_BIT(hcomp->Instance->CSR, COMP_CSR_EN);
<> 144:ef7eb2e8f9f7 504
<> 144:ef7eb2e8f9f7 505 /* Set HAL COMP handle state */
<> 144:ef7eb2e8f9f7 506 hcomp->State = HAL_COMP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 507
<> 144:ef7eb2e8f9f7 508 /* Delay for COMP startup time */
<> 144:ef7eb2e8f9f7 509 /* Wait loop initialization and execution */
<> 144:ef7eb2e8f9f7 510 /* Note: Variable divided by 2 to compensate partially */
<> 144:ef7eb2e8f9f7 511 /* CPU processing cycles. */
AnnaBridge 181:57724642e740 512 wait_loop_index = (COMP_DELAY_STARTUP_US * (SystemCoreClock / (1000000U * 2U)));
AnnaBridge 181:57724642e740 513 while(wait_loop_index != 0U)
<> 144:ef7eb2e8f9f7 514 {
<> 144:ef7eb2e8f9f7 515 wait_loop_index--;
<> 144:ef7eb2e8f9f7 516 }
<> 144:ef7eb2e8f9f7 517 }
<> 144:ef7eb2e8f9f7 518 else
<> 144:ef7eb2e8f9f7 519 {
<> 144:ef7eb2e8f9f7 520 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 521 }
<> 144:ef7eb2e8f9f7 522 }
<> 144:ef7eb2e8f9f7 523
<> 144:ef7eb2e8f9f7 524 return status;
<> 144:ef7eb2e8f9f7 525 }
<> 144:ef7eb2e8f9f7 526
<> 144:ef7eb2e8f9f7 527 /**
<> 144:ef7eb2e8f9f7 528 * @brief Stop the comparator.
<> 144:ef7eb2e8f9f7 529 * @param hcomp COMP handle
<> 144:ef7eb2e8f9f7 530 * @retval HAL status
<> 144:ef7eb2e8f9f7 531 */
<> 144:ef7eb2e8f9f7 532 HAL_StatusTypeDef HAL_COMP_Stop(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 533 {
<> 144:ef7eb2e8f9f7 534 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 535
<> 144:ef7eb2e8f9f7 536 /* Check the COMP handle allocation and lock status */
<> 144:ef7eb2e8f9f7 537 if((hcomp == NULL) || (__HAL_COMP_IS_LOCKED(hcomp)))
<> 144:ef7eb2e8f9f7 538 {
<> 144:ef7eb2e8f9f7 539 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 540 }
<> 144:ef7eb2e8f9f7 541 else
<> 144:ef7eb2e8f9f7 542 {
<> 144:ef7eb2e8f9f7 543 /* Check the parameter */
<> 144:ef7eb2e8f9f7 544 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 545
<> 144:ef7eb2e8f9f7 546 if((hcomp->State == HAL_COMP_STATE_BUSY) ||
<> 144:ef7eb2e8f9f7 547 (hcomp->State == HAL_COMP_STATE_READY) )
<> 144:ef7eb2e8f9f7 548 {
<> 144:ef7eb2e8f9f7 549 /* Disable the selected comparator */
<> 144:ef7eb2e8f9f7 550 CLEAR_BIT(hcomp->Instance->CSR, COMP_CSR_EN);
<> 144:ef7eb2e8f9f7 551
<> 144:ef7eb2e8f9f7 552 /* Set HAL COMP handle state */
<> 144:ef7eb2e8f9f7 553 hcomp->State = HAL_COMP_STATE_READY;
<> 144:ef7eb2e8f9f7 554 }
<> 144:ef7eb2e8f9f7 555 else
<> 144:ef7eb2e8f9f7 556 {
<> 144:ef7eb2e8f9f7 557 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 558 }
<> 144:ef7eb2e8f9f7 559 }
<> 144:ef7eb2e8f9f7 560
<> 144:ef7eb2e8f9f7 561 return status;
<> 144:ef7eb2e8f9f7 562 }
<> 144:ef7eb2e8f9f7 563
<> 144:ef7eb2e8f9f7 564 /**
<> 144:ef7eb2e8f9f7 565 * @brief Comparator IRQ handler.
<> 144:ef7eb2e8f9f7 566 * @param hcomp COMP handle
<> 144:ef7eb2e8f9f7 567 * @retval None
<> 144:ef7eb2e8f9f7 568 */
<> 144:ef7eb2e8f9f7 569 void HAL_COMP_IRQHandler(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 570 {
<> 144:ef7eb2e8f9f7 571 /* Get the EXTI line corresponding to the selected COMP instance */
<> 144:ef7eb2e8f9f7 572 uint32_t exti_line = COMP_GET_EXTI_LINE(hcomp->Instance);
<> 144:ef7eb2e8f9f7 573
<> 144:ef7eb2e8f9f7 574 /* Check COMP EXTI flag */
AnnaBridge 181:57724642e740 575 if(LL_EXTI_IsActiveFlag_0_31(exti_line) != RESET)
<> 144:ef7eb2e8f9f7 576 {
<> 144:ef7eb2e8f9f7 577 /* Check whether comparator is in independent or window mode */
<> 144:ef7eb2e8f9f7 578 if(READ_BIT(COMP12_COMMON->CSR, COMP_CSR_WINMODE) != RESET)
<> 144:ef7eb2e8f9f7 579 {
<> 144:ef7eb2e8f9f7 580 /* Clear COMP EXTI line pending bit of the pair of comparators */
<> 144:ef7eb2e8f9f7 581 /* in window mode. */
<> 144:ef7eb2e8f9f7 582 /* Note: Pair of comparators in window mode can both trig IRQ when */
<> 144:ef7eb2e8f9f7 583 /* input voltage is changing from "out of window" area */
<> 144:ef7eb2e8f9f7 584 /* (low or high ) to the other "out of window" area (high or low).*/
<> 144:ef7eb2e8f9f7 585 /* Both flags must be cleared to call comparator trigger */
<> 144:ef7eb2e8f9f7 586 /* callback is called once. */
AnnaBridge 181:57724642e740 587 LL_EXTI_ClearFlag_0_31((COMP_EXTI_LINE_COMP1 | COMP_EXTI_LINE_COMP2));
<> 144:ef7eb2e8f9f7 588 }
<> 144:ef7eb2e8f9f7 589 else
<> 144:ef7eb2e8f9f7 590 {
<> 144:ef7eb2e8f9f7 591 /* Clear COMP EXTI line pending bit */
AnnaBridge 181:57724642e740 592 LL_EXTI_ClearFlag_0_31(exti_line);
<> 144:ef7eb2e8f9f7 593 }
<> 144:ef7eb2e8f9f7 594
<> 144:ef7eb2e8f9f7 595 /* COMP trigger user callback */
<> 144:ef7eb2e8f9f7 596 HAL_COMP_TriggerCallback(hcomp);
<> 144:ef7eb2e8f9f7 597 }
<> 144:ef7eb2e8f9f7 598 }
<> 144:ef7eb2e8f9f7 599
<> 144:ef7eb2e8f9f7 600 /**
<> 144:ef7eb2e8f9f7 601 * @}
<> 144:ef7eb2e8f9f7 602 */
<> 144:ef7eb2e8f9f7 603
<> 144:ef7eb2e8f9f7 604 /** @defgroup COMP_Exported_Functions_Group3 Peripheral Control functions
<> 144:ef7eb2e8f9f7 605 * @brief Management functions.
<> 144:ef7eb2e8f9f7 606 *
<> 144:ef7eb2e8f9f7 607 @verbatim
<> 144:ef7eb2e8f9f7 608 ===============================================================================
<> 144:ef7eb2e8f9f7 609 ##### Peripheral Control functions #####
<> 144:ef7eb2e8f9f7 610 ===============================================================================
<> 144:ef7eb2e8f9f7 611 [..]
<> 144:ef7eb2e8f9f7 612 This subsection provides a set of functions allowing to control the comparators.
<> 144:ef7eb2e8f9f7 613
<> 144:ef7eb2e8f9f7 614 @endverbatim
<> 144:ef7eb2e8f9f7 615 * @{
<> 144:ef7eb2e8f9f7 616 */
<> 144:ef7eb2e8f9f7 617
<> 144:ef7eb2e8f9f7 618 /**
<> 144:ef7eb2e8f9f7 619 * @brief Lock the selected comparator configuration.
<> 144:ef7eb2e8f9f7 620 * @note A system reset is required to unlock the comparator configuration.
<> 144:ef7eb2e8f9f7 621 * @note Locking the comparator from reset state is possible
<> 144:ef7eb2e8f9f7 622 * if __HAL_RCC_SYSCFG_CLK_ENABLE() is being called before.
<> 144:ef7eb2e8f9f7 623 * @param hcomp COMP handle
<> 144:ef7eb2e8f9f7 624 * @retval HAL status
<> 144:ef7eb2e8f9f7 625 */
<> 144:ef7eb2e8f9f7 626 HAL_StatusTypeDef HAL_COMP_Lock(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 627 {
<> 144:ef7eb2e8f9f7 628 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 629
<> 144:ef7eb2e8f9f7 630 /* Check the COMP handle allocation and lock status */
<> 144:ef7eb2e8f9f7 631 if((hcomp == NULL) || (__HAL_COMP_IS_LOCKED(hcomp)))
<> 144:ef7eb2e8f9f7 632 {
<> 144:ef7eb2e8f9f7 633 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 634 }
<> 144:ef7eb2e8f9f7 635 else
<> 144:ef7eb2e8f9f7 636 {
<> 144:ef7eb2e8f9f7 637 /* Check the parameter */
<> 144:ef7eb2e8f9f7 638 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 639
<> 144:ef7eb2e8f9f7 640 /* Set HAL COMP handle state */
<> 144:ef7eb2e8f9f7 641 hcomp->State = ((HAL_COMP_StateTypeDef)(hcomp->State | COMP_STATE_BITFIELD_LOCK));
<> 144:ef7eb2e8f9f7 642 }
<> 144:ef7eb2e8f9f7 643
<> 144:ef7eb2e8f9f7 644 if(status == HAL_OK)
<> 144:ef7eb2e8f9f7 645 {
<> 144:ef7eb2e8f9f7 646 /* Set the lock bit corresponding to selected comparator */
<> 144:ef7eb2e8f9f7 647 __HAL_COMP_LOCK(hcomp);
<> 144:ef7eb2e8f9f7 648 }
<> 144:ef7eb2e8f9f7 649
<> 144:ef7eb2e8f9f7 650 return status;
<> 144:ef7eb2e8f9f7 651 }
<> 144:ef7eb2e8f9f7 652
<> 144:ef7eb2e8f9f7 653 /**
<> 144:ef7eb2e8f9f7 654 * @brief Return the output level (high or low) of the selected comparator.
<> 144:ef7eb2e8f9f7 655 * The output level depends on the selected polarity.
<> 144:ef7eb2e8f9f7 656 * If the polarity is not inverted:
<> 144:ef7eb2e8f9f7 657 * - Comparator output is low when the input plus is at a lower
<> 144:ef7eb2e8f9f7 658 * voltage than the input minus
<> 144:ef7eb2e8f9f7 659 * - Comparator output is high when the input plus is at a higher
<> 144:ef7eb2e8f9f7 660 * voltage than the input minus
<> 144:ef7eb2e8f9f7 661 * If the polarity is inverted:
<> 144:ef7eb2e8f9f7 662 * - Comparator output is high when the input plus is at a lower
<> 144:ef7eb2e8f9f7 663 * voltage than the input minus
<> 144:ef7eb2e8f9f7 664 * - Comparator output is low when the input plus is at a higher
<> 144:ef7eb2e8f9f7 665 * voltage than the input minus
<> 144:ef7eb2e8f9f7 666 * @param hcomp COMP handle
<> 144:ef7eb2e8f9f7 667 * @retval Returns the selected comparator output level:
AnnaBridge 181:57724642e740 668 * @arg COMP_OUTPUT_LEVEL_LOW
AnnaBridge 181:57724642e740 669 * @arg COMP_OUTPUT_LEVEL_HIGH
<> 144:ef7eb2e8f9f7 670 *
<> 144:ef7eb2e8f9f7 671 */
<> 144:ef7eb2e8f9f7 672 uint32_t HAL_COMP_GetOutputLevel(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 673 {
<> 144:ef7eb2e8f9f7 674 /* Check the parameter */
<> 144:ef7eb2e8f9f7 675 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 676
<> 144:ef7eb2e8f9f7 677 return (uint32_t)(READ_BIT(hcomp->Instance->CSR, COMP_CSR_VALUE)
<> 144:ef7eb2e8f9f7 678 >> COMP_OUTPUT_LEVEL_BITOFFSET_POS);
<> 144:ef7eb2e8f9f7 679 }
<> 144:ef7eb2e8f9f7 680
<> 144:ef7eb2e8f9f7 681 /**
<> 144:ef7eb2e8f9f7 682 * @brief Comparator callback.
<> 144:ef7eb2e8f9f7 683 * @param hcomp COMP handle
<> 144:ef7eb2e8f9f7 684 * @retval None
<> 144:ef7eb2e8f9f7 685 */
<> 144:ef7eb2e8f9f7 686 __weak void HAL_COMP_TriggerCallback(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 687 {
<> 144:ef7eb2e8f9f7 688 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 689 UNUSED(hcomp);
<> 144:ef7eb2e8f9f7 690
<> 144:ef7eb2e8f9f7 691 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 692 the HAL_COMP_TriggerCallback should be implemented in the user file
<> 144:ef7eb2e8f9f7 693 */
<> 144:ef7eb2e8f9f7 694 }
<> 144:ef7eb2e8f9f7 695
<> 144:ef7eb2e8f9f7 696
<> 144:ef7eb2e8f9f7 697 /**
<> 144:ef7eb2e8f9f7 698 * @}
<> 144:ef7eb2e8f9f7 699 */
<> 144:ef7eb2e8f9f7 700
<> 144:ef7eb2e8f9f7 701 /** @defgroup COMP_Exported_Functions_Group4 Peripheral State functions
<> 144:ef7eb2e8f9f7 702 * @brief Peripheral State functions.
<> 144:ef7eb2e8f9f7 703 *
<> 144:ef7eb2e8f9f7 704 @verbatim
<> 144:ef7eb2e8f9f7 705 ===============================================================================
<> 144:ef7eb2e8f9f7 706 ##### Peripheral State functions #####
<> 144:ef7eb2e8f9f7 707 ===============================================================================
<> 144:ef7eb2e8f9f7 708 [..]
<> 144:ef7eb2e8f9f7 709 This subsection permit to get in run-time the status of the peripheral.
<> 144:ef7eb2e8f9f7 710
<> 144:ef7eb2e8f9f7 711 @endverbatim
<> 144:ef7eb2e8f9f7 712 * @{
<> 144:ef7eb2e8f9f7 713 */
<> 144:ef7eb2e8f9f7 714
<> 144:ef7eb2e8f9f7 715 /**
<> 144:ef7eb2e8f9f7 716 * @brief Return the COMP handle state.
<> 144:ef7eb2e8f9f7 717 * @param hcomp COMP handle
<> 144:ef7eb2e8f9f7 718 * @retval HAL state
<> 144:ef7eb2e8f9f7 719 */
<> 144:ef7eb2e8f9f7 720 HAL_COMP_StateTypeDef HAL_COMP_GetState(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 721 {
<> 144:ef7eb2e8f9f7 722 /* Check the COMP handle allocation */
<> 144:ef7eb2e8f9f7 723 if(hcomp == NULL)
<> 144:ef7eb2e8f9f7 724 {
<> 144:ef7eb2e8f9f7 725 return HAL_COMP_STATE_RESET;
<> 144:ef7eb2e8f9f7 726 }
<> 144:ef7eb2e8f9f7 727
<> 144:ef7eb2e8f9f7 728 /* Check the parameter */
<> 144:ef7eb2e8f9f7 729 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 730
<> 144:ef7eb2e8f9f7 731 /* Return HAL COMP handle state */
<> 144:ef7eb2e8f9f7 732 return hcomp->State;
<> 144:ef7eb2e8f9f7 733 }
<> 144:ef7eb2e8f9f7 734
<> 144:ef7eb2e8f9f7 735 /**
<> 144:ef7eb2e8f9f7 736 * @}
<> 144:ef7eb2e8f9f7 737 */
<> 144:ef7eb2e8f9f7 738
<> 144:ef7eb2e8f9f7 739 /**
<> 144:ef7eb2e8f9f7 740 * @}
<> 144:ef7eb2e8f9f7 741 */
<> 144:ef7eb2e8f9f7 742
<> 144:ef7eb2e8f9f7 743 /**
<> 144:ef7eb2e8f9f7 744 * @}
<> 144:ef7eb2e8f9f7 745 */
<> 144:ef7eb2e8f9f7 746
<> 144:ef7eb2e8f9f7 747 /**
<> 144:ef7eb2e8f9f7 748 * @}
<> 144:ef7eb2e8f9f7 749 */
<> 144:ef7eb2e8f9f7 750
AnnaBridge 181:57724642e740 751 #endif /* COMP1 || COMP2 */
AnnaBridge 181:57724642e740 752
AnnaBridge 181:57724642e740 753 #endif /* HAL_COMP_MODULE_ENABLED */
AnnaBridge 181:57724642e740 754
<> 144:ef7eb2e8f9f7 755 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/