Chau Vo / mbed-dev

Fork of mbed-dev by mbed official

Committer:
olympux
Date:
Wed Sep 28 20:59:47 2016 +0000
Revision:
148:161ebc35dc3a
Parent:
144:ef7eb2e8f9f7
RTC working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /**
<> 144:ef7eb2e8f9f7 2 ******************************************************************************
<> 144:ef7eb2e8f9f7 3 * @file stm32l1xx_hal_comp.c
<> 144:ef7eb2e8f9f7 4 * @author MCD Application Team
<> 144:ef7eb2e8f9f7 5 * @version V1.1.3
<> 144:ef7eb2e8f9f7 6 * @date 04-March-2016
<> 144:ef7eb2e8f9f7 7 * @brief COMP HAL module driver.
<> 144:ef7eb2e8f9f7 8 * This file provides firmware functions to manage the following
<> 144:ef7eb2e8f9f7 9 * functionalities of the COMP peripheral:
<> 144:ef7eb2e8f9f7 10 * + Initialization and de-initialization functions
<> 144:ef7eb2e8f9f7 11 * + I/O operation functions
<> 144:ef7eb2e8f9f7 12 * + Peripheral Control functions
<> 144:ef7eb2e8f9f7 13 * + Peripheral State functions
<> 144:ef7eb2e8f9f7 14 *
<> 144:ef7eb2e8f9f7 15 @verbatim
<> 144:ef7eb2e8f9f7 16 ================================================================================
<> 144:ef7eb2e8f9f7 17 ##### COMP Peripheral features #####
<> 144:ef7eb2e8f9f7 18 ================================================================================
<> 144:ef7eb2e8f9f7 19 [..]
<> 144:ef7eb2e8f9f7 20 The STM32L1xx device family integrates 2 analog comparators COMP1 and
<> 144:ef7eb2e8f9f7 21 COMP2:
<> 144:ef7eb2e8f9f7 22 (#) The non inverting input and inverting input can be set to GPIO pins.
<> 144:ef7eb2e8f9f7 23 HAL COMP driver configures the Routing Interface (RI) to connect the
<> 144:ef7eb2e8f9f7 24 selected I/O pins to comparator input.
<> 144:ef7eb2e8f9f7 25 Caution: Comparator COMP1 and ADC cannot be used at the same time as
<> 144:ef7eb2e8f9f7 26 ADC since they share the ADC switch matrix: COMP1 non-inverting
<> 144:ef7eb2e8f9f7 27 input is routed through ADC switch matrix. Except if ADC is intended
<> 144:ef7eb2e8f9f7 28 to measure voltage on COMP1 non-inverting input: it can be performed
<> 144:ef7eb2e8f9f7 29 on ADC channel VCOMP.
<> 144:ef7eb2e8f9f7 30
<> 144:ef7eb2e8f9f7 31 (#) The COMP output is available using HAL_COMP_GetOutputLevel().
<> 144:ef7eb2e8f9f7 32
<> 144:ef7eb2e8f9f7 33 (#) The COMP output can be redirected to embedded timers (TIM2, TIM3,
<> 144:ef7eb2e8f9f7 34 TIM4, TIM10).
<> 144:ef7eb2e8f9f7 35 COMP output cannot be redirected to any I/O pin.
<> 144:ef7eb2e8f9f7 36
<> 144:ef7eb2e8f9f7 37 (#) The comparators COMP1 and COMP2 can be combined in window mode.
<> 144:ef7eb2e8f9f7 38 In this mode, COMP2 non inverting input is used as common
<> 144:ef7eb2e8f9f7 39 non-inverting input.
<> 144:ef7eb2e8f9f7 40
<> 144:ef7eb2e8f9f7 41 (#) The 2 comparators have interrupt capability with wake-up
<> 144:ef7eb2e8f9f7 42 from Sleep and Stop modes (through the EXTI controller):
<> 144:ef7eb2e8f9f7 43 (++) COMP1 is internally connected to EXTI Line 21
<> 144:ef7eb2e8f9f7 44 (++) COMP2 is internally connected to EXTI Line 22
<> 144:ef7eb2e8f9f7 45
<> 144:ef7eb2e8f9f7 46 From the corresponding IRQ handler, the right interrupt source can be retrieved with the
<> 144:ef7eb2e8f9f7 47 macros __HAL_COMP_COMP1_EXTI_GET_FLAG() and __HAL_COMP_COMP2_EXTI_GET_FLAG().
<> 144:ef7eb2e8f9f7 48
<> 144:ef7eb2e8f9f7 49 (#) The comparators also offer the possibility to output the voltage
<> 144:ef7eb2e8f9f7 50 reference (VrefInt), used on inverting inputs, on I/O pin through
<> 144:ef7eb2e8f9f7 51 a buffer. To use it, refer to macro "__HAL_SYSCFG_VREFINT_OUT_ENABLE()".
<> 144:ef7eb2e8f9f7 52
<> 144:ef7eb2e8f9f7 53 ##### How to use this driver #####
<> 144:ef7eb2e8f9f7 54 ================================================================================
<> 144:ef7eb2e8f9f7 55 [..]
<> 144:ef7eb2e8f9f7 56 This driver provides functions to configure and program the Comparators of all STM32L1xx devices.
<> 144:ef7eb2e8f9f7 57
<> 144:ef7eb2e8f9f7 58 To use the comparator, perform the following steps:
<> 144:ef7eb2e8f9f7 59
<> 144:ef7eb2e8f9f7 60 (#) Initialize the COMP low level resources by implementing the HAL_COMP_MspInit().
<> 144:ef7eb2e8f9f7 61 (++) Configure the comparator input I/O pin using HAL_GPIO_Init():
<> 144:ef7eb2e8f9f7 62 - For all inputs: I/O pin in analog mode (Schmitt trigger disabled)
<> 144:ef7eb2e8f9f7 63 - Possible alternate configuration, for non-inverting inputs of comparator 2: I/O pin in floating mode (Schmitt trigger enabled).
<> 144:ef7eb2e8f9f7 64 It is recommended to use analog configuration to avoid any overconsumption around VDD/2.
<> 144:ef7eb2e8f9f7 65 (++) Enable COMP Peripheral clock using macro __HAL_RCC_COMP_CLK_ENABLE()
<> 144:ef7eb2e8f9f7 66 (++) If required enable the COMP interrupt (EXTI line Interrupt): enable
<> 144:ef7eb2e8f9f7 67 the comparator interrupt vector using HAL_NVIC_EnableIRQ(COMP_IRQn)
<> 144:ef7eb2e8f9f7 68 and HAL_NVIC_SetPriority(COMP_IRQn, xxx, xxx) functions.
<> 144:ef7eb2e8f9f7 69
<> 144:ef7eb2e8f9f7 70 (#) Configure the comparator using HAL_COMP_Init() function:
<> 144:ef7eb2e8f9f7 71 (++) Select the inverting input (COMP2 only)
<> 144:ef7eb2e8f9f7 72 (++) Select the non-inverting input
<> 144:ef7eb2e8f9f7 73 (++) Select the output redirection to timers (COMP2 only)
<> 144:ef7eb2e8f9f7 74 (++) Select the speed mode (COMP2 only)
<> 144:ef7eb2e8f9f7 75 (++) Select the window mode (related to COMP1 and COMP2, but selected
<> 144:ef7eb2e8f9f7 76 by COMP2 only)
<> 144:ef7eb2e8f9f7 77 (++) Select the pull-up/down resistors on non-inverting input (COMP1 only)
<> 144:ef7eb2e8f9f7 78
<> 144:ef7eb2e8f9f7 79 (#) Enable the comparator using HAL_COMP_Start() or HAL_COMP_Start_IT()
<> 144:ef7eb2e8f9f7 80 function
<> 144:ef7eb2e8f9f7 81
<> 144:ef7eb2e8f9f7 82 (#) If needed, use HAL_COMP_GetOutputLevel() or HAL_COMP_TriggerCallback()
<> 144:ef7eb2e8f9f7 83 functions to manage comparator actions (output level or events)
<> 144:ef7eb2e8f9f7 84
<> 144:ef7eb2e8f9f7 85 (#) Disable the comparator using HAL_COMP_Stop() or HAL_COMP_Stop_IT()
<> 144:ef7eb2e8f9f7 86 function
<> 144:ef7eb2e8f9f7 87
<> 144:ef7eb2e8f9f7 88 (#) De-initialize the comparator using HAL_COMP_DeInit() function
<> 144:ef7eb2e8f9f7 89
<> 144:ef7eb2e8f9f7 90
<> 144:ef7eb2e8f9f7 91 @endverbatim
<> 144:ef7eb2e8f9f7 92 ******************************************************************************
<> 144:ef7eb2e8f9f7 93 * @attention
<> 144:ef7eb2e8f9f7 94 *
<> 144:ef7eb2e8f9f7 95 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
<> 144:ef7eb2e8f9f7 96 *
<> 144:ef7eb2e8f9f7 97 * Redistribution and use in source and binary forms, with or without modification,
<> 144:ef7eb2e8f9f7 98 * are permitted provided that the following conditions are met:
<> 144:ef7eb2e8f9f7 99 * 1. Redistributions of source code must retain the above copyright notice,
<> 144:ef7eb2e8f9f7 100 * this list of conditions and the following disclaimer.
<> 144:ef7eb2e8f9f7 101 * 2. Redistributions in binary form must reproduce the above copyright notice,
<> 144:ef7eb2e8f9f7 102 * this list of conditions and the following disclaimer in the documentation
<> 144:ef7eb2e8f9f7 103 * and/or other materials provided with the distribution.
<> 144:ef7eb2e8f9f7 104 * 3. Neither the name of STMicroelectronics nor the names of its contributors
<> 144:ef7eb2e8f9f7 105 * may be used to endorse or promote products derived from this software
<> 144:ef7eb2e8f9f7 106 * without specific prior written permission.
<> 144:ef7eb2e8f9f7 107 *
<> 144:ef7eb2e8f9f7 108 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
<> 144:ef7eb2e8f9f7 109 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
<> 144:ef7eb2e8f9f7 110 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
<> 144:ef7eb2e8f9f7 111 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
<> 144:ef7eb2e8f9f7 112 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
<> 144:ef7eb2e8f9f7 113 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
<> 144:ef7eb2e8f9f7 114 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
<> 144:ef7eb2e8f9f7 115 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
<> 144:ef7eb2e8f9f7 116 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
<> 144:ef7eb2e8f9f7 117 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<> 144:ef7eb2e8f9f7 118 *
<> 144:ef7eb2e8f9f7 119 ******************************************************************************
<> 144:ef7eb2e8f9f7 120 */
<> 144:ef7eb2e8f9f7 121
<> 144:ef7eb2e8f9f7 122 /*
<> 144:ef7eb2e8f9f7 123 Additionnal remark:
<> 144:ef7eb2e8f9f7 124 Table 1. COMP Inputs for the STM32L1xx devices
<> 144:ef7eb2e8f9f7 125 +----------------------------------------------------------------------+
<> 144:ef7eb2e8f9f7 126 | | | COMP1 | COMP2 |
<> 144:ef7eb2e8f9f7 127 |-----------------|--------------------------------|---------|---------|
<> 144:ef7eb2e8f9f7 128 | | 1/4 VREFINT | -- | OK |
<> 144:ef7eb2e8f9f7 129 | | 1/2 VREFINT | -- | OK |
<> 144:ef7eb2e8f9f7 130 | | 3/4 VREFINT | -- | OK |
<> 144:ef7eb2e8f9f7 131 | Inverting | VREFINT | OK | OK |
<> 144:ef7eb2e8f9f7 132 | input | DAC Ch1 OUT (PA4) | -- | OK |
<> 144:ef7eb2e8f9f7 133 | | DAC Ch2 OUT (PA5) | -- | OK |
<> 144:ef7eb2e8f9f7 134 | | IO: PB3 | -- | OK |
<> 144:ef7eb2e8f9f7 135 |-----------------|--------------------------------|---------|---------|
<> 144:ef7eb2e8f9f7 136 | | IO: | | |
<> 144:ef7eb2e8f9f7 137 | | PB4, 5, 6*, 7* | --- | OK |
<> 144:ef7eb2e8f9f7 138 | Non-inverting | PA0*, 1*, 2*, 3*, 4, 5, 6, 7 | OK | --- |
<> 144:ef7eb2e8f9f7 139 | input | PB0, 1, 12, 13, 14, 15 | OK | --- |
<> 144:ef7eb2e8f9f7 140 | | PC0, 1, 2, 3, 4, 5 | OK | --- |
<> 144:ef7eb2e8f9f7 141 | | PE7, 8, 9, 10 | OK | --- |
<> 144:ef7eb2e8f9f7 142 | | PF6, 7, 8, 9, 10 | OK | --- |
<> 144:ef7eb2e8f9f7 143 | | OPAMP1 output | OK | --- |
<> 144:ef7eb2e8f9f7 144 | | OPAMP2 output | OK | --- |
<> 144:ef7eb2e8f9f7 145 | | OPAMP3 output** | OK | --- |
<> 144:ef7eb2e8f9f7 146 +----------------------------------------------------------------------+
<> 144:ef7eb2e8f9f7 147 *: Available on devices category Cat.3, Cat.4, Cat.5 only.
<> 144:ef7eb2e8f9f7 148 **: Available on devices category Cat.4 only.
<> 144:ef7eb2e8f9f7 149
<> 144:ef7eb2e8f9f7 150 [..] Table 2. COMP Outputs redirection to embedded timers
<> 144:ef7eb2e8f9f7 151 +-----------------------------------+
<> 144:ef7eb2e8f9f7 152 | COMP1 | COMP2 |
<> 144:ef7eb2e8f9f7 153 |-----------------|-----------------|
<> 144:ef7eb2e8f9f7 154 | | TIM2 IC4 |
<> 144:ef7eb2e8f9f7 155 | | TIM2 OCREF CLR |
<> 144:ef7eb2e8f9f7 156 | (no redirection | TIM3 IC4 |
<> 144:ef7eb2e8f9f7 157 | to timers) | TIM3 OCREF CLR |
<> 144:ef7eb2e8f9f7 158 | | TIM4 IC4 |
<> 144:ef7eb2e8f9f7 159 | | TIM4 OCREF CLR |
<> 144:ef7eb2e8f9f7 160 | | TIM10 IC1 |
<> 144:ef7eb2e8f9f7 161 +-----------------------------------+
<> 144:ef7eb2e8f9f7 162 */
<> 144:ef7eb2e8f9f7 163
<> 144:ef7eb2e8f9f7 164 /* Includes ------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 165 #include "stm32l1xx_hal.h"
<> 144:ef7eb2e8f9f7 166
<> 144:ef7eb2e8f9f7 167 /** @addtogroup STM32L1xx_HAL_Driver
<> 144:ef7eb2e8f9f7 168 * @{
<> 144:ef7eb2e8f9f7 169 */
<> 144:ef7eb2e8f9f7 170
<> 144:ef7eb2e8f9f7 171 /** @defgroup COMP COMP
<> 144:ef7eb2e8f9f7 172 * @brief COMP HAL module driver
<> 144:ef7eb2e8f9f7 173 * @{
<> 144:ef7eb2e8f9f7 174 */
<> 144:ef7eb2e8f9f7 175
<> 144:ef7eb2e8f9f7 176 #ifdef HAL_COMP_MODULE_ENABLED
<> 144:ef7eb2e8f9f7 177
<> 144:ef7eb2e8f9f7 178 /* Private typedef -----------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 179 /* Private define ------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 180
<> 144:ef7eb2e8f9f7 181 /** @defgroup COMP_Private_Constants COMP Private Constants
<> 144:ef7eb2e8f9f7 182 * @{
<> 144:ef7eb2e8f9f7 183 */
<> 144:ef7eb2e8f9f7 184 /* Delay for COMP start-up time. */
<> 144:ef7eb2e8f9f7 185 /* Maximum delay is 10us for comparator 1 and 25us for comparator 2 in slow */
<> 144:ef7eb2e8f9f7 186 /* mode (refer to device datasheet, parameter tSTART). */
<> 144:ef7eb2e8f9f7 187 /* Delay in CPU cycles, fixed to worst case: maximum CPU frequency 32MHz to */
<> 144:ef7eb2e8f9f7 188 /* have the minimum number of CPU cycles to fulfill this delay. */
<> 144:ef7eb2e8f9f7 189 /* - Comparator 1: delay minimum of 320 CPU cycles. Wait loop takes 3 CPU */
<> 144:ef7eb2e8f9f7 190 /* cycles per iteration, therefore total wait iterations */
<> 144:ef7eb2e8f9f7 191 /* number must be initialized at 106 iterations. */
<> 144:ef7eb2e8f9f7 192 /* - Comparator 2: delay minimum of 800 CPU cycles. Wait loop takes 3 CPU */
<> 144:ef7eb2e8f9f7 193 /* cycles per iteration, therefore total wait iterations */
<> 144:ef7eb2e8f9f7 194 /* number must be initialized at 266 iterations. */
<> 144:ef7eb2e8f9f7 195 #define COMP1_START_DELAY_CPU_CYCLES ((uint32_t)106)
<> 144:ef7eb2e8f9f7 196 #define COMP2_START_DELAY_CPU_CYCLES ((uint32_t)266)
<> 144:ef7eb2e8f9f7 197
<> 144:ef7eb2e8f9f7 198 /* Comparator status "locked": to update COMP handle state (software lock */
<> 144:ef7eb2e8f9f7 199 /* only on COMP of STM32L1xx devices) by bitfield: */
<> 144:ef7eb2e8f9f7 200 /* states HAL_COMP_STATE_READY_LOCKED, HAL_COMP_STATE_BUSY_LOCKED. */
<> 144:ef7eb2e8f9f7 201 #define COMP_STATE_BIT_LOCK ((uint32_t) 0x00000010)
<> 144:ef7eb2e8f9f7 202
<> 144:ef7eb2e8f9f7 203 /**
<> 144:ef7eb2e8f9f7 204 * @}
<> 144:ef7eb2e8f9f7 205 */
<> 144:ef7eb2e8f9f7 206
<> 144:ef7eb2e8f9f7 207
<> 144:ef7eb2e8f9f7 208 /* Private macro -------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 209 /* Private variables ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 210 /* Private function prototypes -----------------------------------------------*/
<> 144:ef7eb2e8f9f7 211 /* Private functions ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 212
<> 144:ef7eb2e8f9f7 213 /** @defgroup COMP_Exported_Functions COMP Exported Functions
<> 144:ef7eb2e8f9f7 214 * @{
<> 144:ef7eb2e8f9f7 215 */
<> 144:ef7eb2e8f9f7 216
<> 144:ef7eb2e8f9f7 217 /** @defgroup COMP_Exported_Functions_Group1 Initialization and de-initialization functions
<> 144:ef7eb2e8f9f7 218 * @brief Initialization and Configuration functions
<> 144:ef7eb2e8f9f7 219 *
<> 144:ef7eb2e8f9f7 220 @verbatim
<> 144:ef7eb2e8f9f7 221 ===============================================================================
<> 144:ef7eb2e8f9f7 222 ##### Initialization and de-initialization functions #####
<> 144:ef7eb2e8f9f7 223 ===============================================================================
<> 144:ef7eb2e8f9f7 224 [..] This section provides functions to initialize and de-initialize comparators
<> 144:ef7eb2e8f9f7 225
<> 144:ef7eb2e8f9f7 226 @endverbatim
<> 144:ef7eb2e8f9f7 227 * @{
<> 144:ef7eb2e8f9f7 228 */
<> 144:ef7eb2e8f9f7 229
<> 144:ef7eb2e8f9f7 230 /**
<> 144:ef7eb2e8f9f7 231 * @brief Initializes the COMP according to the specified
<> 144:ef7eb2e8f9f7 232 * parameters in the COMP_InitTypeDef and create the associated handle.
<> 144:ef7eb2e8f9f7 233 * @note If the selected comparator is locked, initialization can't be performed.
<> 144:ef7eb2e8f9f7 234 * To unlock the configuration, perform a system reset.
<> 144:ef7eb2e8f9f7 235 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 236 * @retval HAL status
<> 144:ef7eb2e8f9f7 237 */
<> 144:ef7eb2e8f9f7 238 HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 239 {
<> 144:ef7eb2e8f9f7 240 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 241
<> 144:ef7eb2e8f9f7 242 /* Check the COMP handle allocation and lock status */
<> 144:ef7eb2e8f9f7 243 if((hcomp == NULL) || ((hcomp->State & COMP_STATE_BIT_LOCK) != RESET))
<> 144:ef7eb2e8f9f7 244 {
<> 144:ef7eb2e8f9f7 245 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 246 }
<> 144:ef7eb2e8f9f7 247 else
<> 144:ef7eb2e8f9f7 248 {
<> 144:ef7eb2e8f9f7 249 /* Check the parameter */
<> 144:ef7eb2e8f9f7 250 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 251
<> 144:ef7eb2e8f9f7 252 if (hcomp->Instance == COMP1)
<> 144:ef7eb2e8f9f7 253 {
<> 144:ef7eb2e8f9f7 254 assert_param(IS_COMP_NONINVERTINGINPUTPULL(hcomp->Init.NonInvertingInputPull));
<> 144:ef7eb2e8f9f7 255 }
<> 144:ef7eb2e8f9f7 256 else /* if (hcomp->Instance == COMP2) */
<> 144:ef7eb2e8f9f7 257 {
<> 144:ef7eb2e8f9f7 258 assert_param(IS_COMP_INVERTINGINPUT(hcomp->Init.InvertingInput));
<> 144:ef7eb2e8f9f7 259 assert_param(IS_COMP_OUTPUT(hcomp->Init.Output));
<> 144:ef7eb2e8f9f7 260 assert_param(IS_COMP_MODE(hcomp->Init.Mode));
<> 144:ef7eb2e8f9f7 261 assert_param(IS_COMP_WINDOWMODE(hcomp->Init.WindowMode));
<> 144:ef7eb2e8f9f7 262 }
<> 144:ef7eb2e8f9f7 263
<> 144:ef7eb2e8f9f7 264 /* In window mode, non-inverting inputs of the 2 comparators are */
<> 144:ef7eb2e8f9f7 265 /* connected together and are using inputs of COMP2 only. If COMP1 is */
<> 144:ef7eb2e8f9f7 266 /* selected, this parameter is discarded. */
<> 144:ef7eb2e8f9f7 267 if ((hcomp->Init.WindowMode == COMP_WINDOWMODE_DISABLE) ||
<> 144:ef7eb2e8f9f7 268 (hcomp->Instance == COMP2) )
<> 144:ef7eb2e8f9f7 269 {
<> 144:ef7eb2e8f9f7 270 assert_param(IS_COMP_NONINVERTINGINPUT(hcomp->Init.NonInvertingInput));
<> 144:ef7eb2e8f9f7 271 }
<> 144:ef7eb2e8f9f7 272
<> 144:ef7eb2e8f9f7 273
<> 144:ef7eb2e8f9f7 274 /* Enable SYSCFG clock and the low level hardware to access comparators */
<> 144:ef7eb2e8f9f7 275 if(hcomp->State == HAL_COMP_STATE_RESET)
<> 144:ef7eb2e8f9f7 276 {
<> 144:ef7eb2e8f9f7 277 /* Allocate lock resource and initialize it */
<> 144:ef7eb2e8f9f7 278 hcomp->Lock = HAL_UNLOCKED;
<> 144:ef7eb2e8f9f7 279
<> 144:ef7eb2e8f9f7 280 /* Enable SYSCFG clock to control the routing Interface (RI) */
<> 144:ef7eb2e8f9f7 281 __HAL_RCC_SYSCFG_CLK_ENABLE();
<> 144:ef7eb2e8f9f7 282
<> 144:ef7eb2e8f9f7 283 /* Init the low level hardware */
<> 144:ef7eb2e8f9f7 284 HAL_COMP_MspInit(hcomp);
<> 144:ef7eb2e8f9f7 285 }
<> 144:ef7eb2e8f9f7 286
<> 144:ef7eb2e8f9f7 287 /* Configuration of comparator: */
<> 144:ef7eb2e8f9f7 288 /* - Output selection */
<> 144:ef7eb2e8f9f7 289 /* - Inverting input selection */
<> 144:ef7eb2e8f9f7 290 /* - Window mode */
<> 144:ef7eb2e8f9f7 291 /* - Mode fast/slow speed */
<> 144:ef7eb2e8f9f7 292 /* - Inverting input pull-up/down resistors */
<> 144:ef7eb2e8f9f7 293
<> 144:ef7eb2e8f9f7 294 /* Configuration depending on comparator instance */
<> 144:ef7eb2e8f9f7 295 if (hcomp->Instance == COMP1)
<> 144:ef7eb2e8f9f7 296 {
<> 144:ef7eb2e8f9f7 297 MODIFY_REG(COMP->CSR, COMP_CSR_400KPD | COMP_CSR_10KPD | COMP_CSR_400KPU | COMP_CSR_10KPU,
<> 144:ef7eb2e8f9f7 298 hcomp->Init.NonInvertingInputPull );
<> 144:ef7eb2e8f9f7 299 }
<> 144:ef7eb2e8f9f7 300 else /* if (hcomp->Instance == COMP2) */
<> 144:ef7eb2e8f9f7 301 {
<> 144:ef7eb2e8f9f7 302 /* Note: If comparator 2 is not enabled, inverting input (parameter */
<> 144:ef7eb2e8f9f7 303 /* "hcomp->Init.InvertingInput") is configured into function */
<> 144:ef7eb2e8f9f7 304 /* "HAL_COMP_Start()" since inverting input selection also */
<> 144:ef7eb2e8f9f7 305 /* enables the comparator 2. */
<> 144:ef7eb2e8f9f7 306 /* If comparator 2 is already enabled, inverting input is */
<> 144:ef7eb2e8f9f7 307 /* reconfigured on the fly. */
<> 144:ef7eb2e8f9f7 308 if (__COMP_IS_ENABLED(hcomp) == RESET)
<> 144:ef7eb2e8f9f7 309 {
<> 144:ef7eb2e8f9f7 310 MODIFY_REG(COMP->CSR, COMP_CSR_OUTSEL |
<> 144:ef7eb2e8f9f7 311 COMP_CSR_WNDWE |
<> 144:ef7eb2e8f9f7 312 COMP_CSR_SPEED ,
<> 144:ef7eb2e8f9f7 313 hcomp->Init.Output |
<> 144:ef7eb2e8f9f7 314 hcomp->Init.WindowMode |
<> 144:ef7eb2e8f9f7 315 hcomp->Init.Mode );
<> 144:ef7eb2e8f9f7 316 }
<> 144:ef7eb2e8f9f7 317 else
<> 144:ef7eb2e8f9f7 318 {
<> 144:ef7eb2e8f9f7 319 MODIFY_REG(COMP->CSR, COMP_CSR_OUTSEL |
<> 144:ef7eb2e8f9f7 320 COMP_CSR_INSEL |
<> 144:ef7eb2e8f9f7 321 COMP_CSR_WNDWE |
<> 144:ef7eb2e8f9f7 322 COMP_CSR_SPEED ,
<> 144:ef7eb2e8f9f7 323 hcomp->Init.Output |
<> 144:ef7eb2e8f9f7 324 hcomp->Init.InvertingInput |
<> 144:ef7eb2e8f9f7 325 hcomp->Init.WindowMode |
<> 144:ef7eb2e8f9f7 326 hcomp->Init.Mode );
<> 144:ef7eb2e8f9f7 327 }
<> 144:ef7eb2e8f9f7 328 }
<> 144:ef7eb2e8f9f7 329
<> 144:ef7eb2e8f9f7 330 /* Configure Routing Interface (RI) switches for comparator non-inverting */
<> 144:ef7eb2e8f9f7 331 /* input. */
<> 144:ef7eb2e8f9f7 332 /* Except in 2 cases: */
<> 144:ef7eb2e8f9f7 333 /* - if non-inverting input has no selection: it can be the case for */
<> 144:ef7eb2e8f9f7 334 /* COMP1 in window mode. */
<> 144:ef7eb2e8f9f7 335 /* - particular case for PC3: if switch COMP1_SW1 is closed */
<> 144:ef7eb2e8f9f7 336 /* (by macro "__HAL_OPAMP_OPAMP3OUT_CONNECT_ADC_COMP1()" or */
<> 144:ef7eb2e8f9f7 337 /* "__HAL_RI_SWITCH_COMP1_SW1_CLOSE()"), connection between pin PC3 */
<> 144:ef7eb2e8f9f7 338 /* (or OPAMP3, if available) and COMP1 is done directly, without going */
<> 144:ef7eb2e8f9f7 339 /* through ADC switch matrix. */
<> 144:ef7eb2e8f9f7 340 if (__COMP_ROUTING_INTERFACE_TOBECONFIGURED(hcomp))
<> 144:ef7eb2e8f9f7 341 {
<> 144:ef7eb2e8f9f7 342 if (hcomp->Instance == COMP1)
<> 144:ef7eb2e8f9f7 343 {
<> 144:ef7eb2e8f9f7 344 /* Enable the switch control mode */
<> 144:ef7eb2e8f9f7 345 __HAL_RI_SWITCHCONTROLMODE_ENABLE();
<> 144:ef7eb2e8f9f7 346
<> 144:ef7eb2e8f9f7 347 /* Close the analog switch of ADC switch matrix to COMP1 (ADC */
<> 144:ef7eb2e8f9f7 348 /* channel 26: Vcomp) */
<> 144:ef7eb2e8f9f7 349 __HAL_RI_IOSWITCH_CLOSE(RI_IOSWITCH_VCOMP);
<> 144:ef7eb2e8f9f7 350 }
<> 144:ef7eb2e8f9f7 351
<> 144:ef7eb2e8f9f7 352 /* Close the I/O analog switch corresponding to comparator */
<> 144:ef7eb2e8f9f7 353 /* non-inverting input selected. */
<> 144:ef7eb2e8f9f7 354 __HAL_RI_IOSWITCH_CLOSE(hcomp->Init.NonInvertingInput);
<> 144:ef7eb2e8f9f7 355 }
<> 144:ef7eb2e8f9f7 356
<> 144:ef7eb2e8f9f7 357
<> 144:ef7eb2e8f9f7 358 /* Initialize the COMP state*/
<> 144:ef7eb2e8f9f7 359 if(hcomp->State == HAL_COMP_STATE_RESET)
<> 144:ef7eb2e8f9f7 360 {
<> 144:ef7eb2e8f9f7 361 hcomp->State = HAL_COMP_STATE_READY;
<> 144:ef7eb2e8f9f7 362 }
<> 144:ef7eb2e8f9f7 363 }
<> 144:ef7eb2e8f9f7 364
<> 144:ef7eb2e8f9f7 365 return status;
<> 144:ef7eb2e8f9f7 366 }
<> 144:ef7eb2e8f9f7 367
<> 144:ef7eb2e8f9f7 368
<> 144:ef7eb2e8f9f7 369 /**
<> 144:ef7eb2e8f9f7 370 * @brief DeInitializes the COMP peripheral
<> 144:ef7eb2e8f9f7 371 * @note Deinitialization can't be performed if the COMP configuration is locked.
<> 144:ef7eb2e8f9f7 372 * To unlock the configuration, perform a system reset.
<> 144:ef7eb2e8f9f7 373 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 374 * @retval HAL status
<> 144:ef7eb2e8f9f7 375 */
<> 144:ef7eb2e8f9f7 376 HAL_StatusTypeDef HAL_COMP_DeInit(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 377 {
<> 144:ef7eb2e8f9f7 378 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 379
<> 144:ef7eb2e8f9f7 380 /* Check the COMP handle allocation and lock status */
<> 144:ef7eb2e8f9f7 381 if((hcomp == NULL) || ((hcomp->State & COMP_STATE_BIT_LOCK) != RESET))
<> 144:ef7eb2e8f9f7 382 {
<> 144:ef7eb2e8f9f7 383 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 384 }
<> 144:ef7eb2e8f9f7 385 else
<> 144:ef7eb2e8f9f7 386 {
<> 144:ef7eb2e8f9f7 387 /* Check the parameter */
<> 144:ef7eb2e8f9f7 388 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 389
<> 144:ef7eb2e8f9f7 390 /* Reset configuration depending on comparator instance */
<> 144:ef7eb2e8f9f7 391 if (hcomp->Instance == COMP1)
<> 144:ef7eb2e8f9f7 392 {
<> 144:ef7eb2e8f9f7 393 CLEAR_BIT(COMP->CSR , COMP_CSR_400KPD | COMP_CSR_10KPD | COMP_CSR_400KPU | COMP_CSR_10KPU);
<> 144:ef7eb2e8f9f7 394 }
<> 144:ef7eb2e8f9f7 395 else /* if (hcomp->Instance == COMP2) */
<> 144:ef7eb2e8f9f7 396 {
<> 144:ef7eb2e8f9f7 397 CLEAR_BIT(COMP->CSR , COMP_CSR_OUTSEL |
<> 144:ef7eb2e8f9f7 398 COMP_CSR_WNDWE |
<> 144:ef7eb2e8f9f7 399 COMP_CSR_INSEL |
<> 144:ef7eb2e8f9f7 400 COMP_CSR_SPEED );
<> 144:ef7eb2e8f9f7 401 }
<> 144:ef7eb2e8f9f7 402
<> 144:ef7eb2e8f9f7 403
<> 144:ef7eb2e8f9f7 404 /* Restore default state of Routing Interface (RI) switches for */
<> 144:ef7eb2e8f9f7 405 /* comparator non-inverting input. */
<> 144:ef7eb2e8f9f7 406 if (hcomp->Init.NonInvertingInput != COMP_NONINVERTINGINPUT_NONE)
<> 144:ef7eb2e8f9f7 407 {
<> 144:ef7eb2e8f9f7 408 /* Open the I/O analog switch corresponding to comparator */
<> 144:ef7eb2e8f9f7 409 /* non-inverting input selected. */
<> 144:ef7eb2e8f9f7 410 __HAL_RI_IOSWITCH_OPEN(hcomp->Init.NonInvertingInput);
<> 144:ef7eb2e8f9f7 411 }
<> 144:ef7eb2e8f9f7 412 if (hcomp->Instance == COMP1)
<> 144:ef7eb2e8f9f7 413 {
<> 144:ef7eb2e8f9f7 414 /* Open the analog switch of ADC switch matrix to COMP1 (ADC */
<> 144:ef7eb2e8f9f7 415 /* channel 26: Vcomp) */
<> 144:ef7eb2e8f9f7 416 __HAL_RI_IOSWITCH_OPEN(RI_IOSWITCH_VCOMP);
<> 144:ef7eb2e8f9f7 417
<> 144:ef7eb2e8f9f7 418 /* Disable the switch control mode */
<> 144:ef7eb2e8f9f7 419 __HAL_RI_SWITCHCONTROLMODE_DISABLE();
<> 144:ef7eb2e8f9f7 420 }
<> 144:ef7eb2e8f9f7 421
<> 144:ef7eb2e8f9f7 422
<> 144:ef7eb2e8f9f7 423 /* DeInit the low level hardware: SYSCFG, GPIO, CLOCK and NVIC */
<> 144:ef7eb2e8f9f7 424 HAL_COMP_MspDeInit(hcomp);
<> 144:ef7eb2e8f9f7 425
<> 144:ef7eb2e8f9f7 426 hcomp->State = HAL_COMP_STATE_RESET;
<> 144:ef7eb2e8f9f7 427
<> 144:ef7eb2e8f9f7 428 /* Process unlocked */
<> 144:ef7eb2e8f9f7 429 __HAL_UNLOCK(hcomp);
<> 144:ef7eb2e8f9f7 430 }
<> 144:ef7eb2e8f9f7 431
<> 144:ef7eb2e8f9f7 432 return status;
<> 144:ef7eb2e8f9f7 433 }
<> 144:ef7eb2e8f9f7 434
<> 144:ef7eb2e8f9f7 435 /**
<> 144:ef7eb2e8f9f7 436 * @brief Initializes the COMP MSP.
<> 144:ef7eb2e8f9f7 437 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 438 * @retval None
<> 144:ef7eb2e8f9f7 439 */
<> 144:ef7eb2e8f9f7 440 __weak void HAL_COMP_MspInit(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 441 {
<> 144:ef7eb2e8f9f7 442 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 443 UNUSED(hcomp);
<> 144:ef7eb2e8f9f7 444
<> 144:ef7eb2e8f9f7 445 /* NOTE : This function Should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 446 the HAL_COMP_MspInit could be implenetd in the user file
<> 144:ef7eb2e8f9f7 447 */
<> 144:ef7eb2e8f9f7 448 }
<> 144:ef7eb2e8f9f7 449
<> 144:ef7eb2e8f9f7 450 /**
<> 144:ef7eb2e8f9f7 451 * @brief DeInitializes COMP MSP.
<> 144:ef7eb2e8f9f7 452 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 453 * @retval None
<> 144:ef7eb2e8f9f7 454 */
<> 144:ef7eb2e8f9f7 455 __weak void HAL_COMP_MspDeInit(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 456 {
<> 144:ef7eb2e8f9f7 457 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 458 UNUSED(hcomp);
<> 144:ef7eb2e8f9f7 459
<> 144:ef7eb2e8f9f7 460 /* NOTE : This function Should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 461 the HAL_COMP_MspDeInit could be implenetd in the user file
<> 144:ef7eb2e8f9f7 462 */
<> 144:ef7eb2e8f9f7 463 }
<> 144:ef7eb2e8f9f7 464
<> 144:ef7eb2e8f9f7 465 /**
<> 144:ef7eb2e8f9f7 466 * @}
<> 144:ef7eb2e8f9f7 467 */
<> 144:ef7eb2e8f9f7 468
<> 144:ef7eb2e8f9f7 469 /** @defgroup COMP_Exported_Functions_Group2 I/O operation functions
<> 144:ef7eb2e8f9f7 470 * @brief I/O operation functions
<> 144:ef7eb2e8f9f7 471 *
<> 144:ef7eb2e8f9f7 472 @verbatim
<> 144:ef7eb2e8f9f7 473 ===============================================================================
<> 144:ef7eb2e8f9f7 474 ##### IO operation functions #####
<> 144:ef7eb2e8f9f7 475 ===============================================================================
<> 144:ef7eb2e8f9f7 476 [..]
<> 144:ef7eb2e8f9f7 477 This subsection provides a set of functions allowing to manage the COMP
<> 144:ef7eb2e8f9f7 478 start and stop actions with or without interruption on ExtI line.
<> 144:ef7eb2e8f9f7 479
<> 144:ef7eb2e8f9f7 480 @endverbatim
<> 144:ef7eb2e8f9f7 481 * @{
<> 144:ef7eb2e8f9f7 482 */
<> 144:ef7eb2e8f9f7 483
<> 144:ef7eb2e8f9f7 484 /**
<> 144:ef7eb2e8f9f7 485 * @brief Start the comparator
<> 144:ef7eb2e8f9f7 486 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 487 * @retval HAL status
<> 144:ef7eb2e8f9f7 488 */
<> 144:ef7eb2e8f9f7 489 HAL_StatusTypeDef HAL_COMP_Start(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 490 {
<> 144:ef7eb2e8f9f7 491 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 492 uint32_t wait_loop_cycles = 0;
<> 144:ef7eb2e8f9f7 493 __IO uint32_t wait_loop_index = 0;
<> 144:ef7eb2e8f9f7 494
<> 144:ef7eb2e8f9f7 495 /* Check the COMP handle allocation and lock status */
<> 144:ef7eb2e8f9f7 496 if((hcomp == NULL) || ((hcomp->State & COMP_STATE_BIT_LOCK) != RESET))
<> 144:ef7eb2e8f9f7 497 {
<> 144:ef7eb2e8f9f7 498 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 499 }
<> 144:ef7eb2e8f9f7 500 else
<> 144:ef7eb2e8f9f7 501 {
<> 144:ef7eb2e8f9f7 502 /* Check the parameter */
<> 144:ef7eb2e8f9f7 503 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 504
<> 144:ef7eb2e8f9f7 505 if(hcomp->State == HAL_COMP_STATE_READY)
<> 144:ef7eb2e8f9f7 506 {
<> 144:ef7eb2e8f9f7 507
<> 144:ef7eb2e8f9f7 508 /* Note: For comparator 2, inverting input (parameter */
<> 144:ef7eb2e8f9f7 509 /* "hcomp->Init.InvertingInput") is configured into this */
<> 144:ef7eb2e8f9f7 510 /* function instead of function "HAL_COMP_Init()" since */
<> 144:ef7eb2e8f9f7 511 /* inverting input selection also enables the comparator 2. */
<> 144:ef7eb2e8f9f7 512 __HAL_COMP_ENABLE(hcomp);
<> 144:ef7eb2e8f9f7 513
<> 144:ef7eb2e8f9f7 514 /* Set delay for COMP start-up time */
<> 144:ef7eb2e8f9f7 515 if (hcomp->Instance == COMP1)
<> 144:ef7eb2e8f9f7 516 {
<> 144:ef7eb2e8f9f7 517 wait_loop_cycles = COMP1_START_DELAY_CPU_CYCLES;
<> 144:ef7eb2e8f9f7 518 }
<> 144:ef7eb2e8f9f7 519 else /* if (hcomp->Instance == COMP2) */
<> 144:ef7eb2e8f9f7 520 {
<> 144:ef7eb2e8f9f7 521 wait_loop_cycles = COMP2_START_DELAY_CPU_CYCLES;
<> 144:ef7eb2e8f9f7 522 }
<> 144:ef7eb2e8f9f7 523
<> 144:ef7eb2e8f9f7 524 /* Delay for COMP start-up time. */
<> 144:ef7eb2e8f9f7 525 /* Delay fixed to worst case: maximum CPU frequency */
<> 144:ef7eb2e8f9f7 526 while(wait_loop_index < wait_loop_cycles)
<> 144:ef7eb2e8f9f7 527 {
<> 144:ef7eb2e8f9f7 528 wait_loop_index++;
<> 144:ef7eb2e8f9f7 529 }
<> 144:ef7eb2e8f9f7 530
<> 144:ef7eb2e8f9f7 531 /* Update COMP state */
<> 144:ef7eb2e8f9f7 532 hcomp->State = HAL_COMP_STATE_BUSY;
<> 144:ef7eb2e8f9f7 533
<> 144:ef7eb2e8f9f7 534 }
<> 144:ef7eb2e8f9f7 535 else
<> 144:ef7eb2e8f9f7 536 {
<> 144:ef7eb2e8f9f7 537 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 538 }
<> 144:ef7eb2e8f9f7 539 }
<> 144:ef7eb2e8f9f7 540
<> 144:ef7eb2e8f9f7 541 return status;
<> 144:ef7eb2e8f9f7 542 }
<> 144:ef7eb2e8f9f7 543
<> 144:ef7eb2e8f9f7 544 /**
<> 144:ef7eb2e8f9f7 545 * @brief Stop the comparator
<> 144:ef7eb2e8f9f7 546 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 547 * @retval HAL status
<> 144:ef7eb2e8f9f7 548 */
<> 144:ef7eb2e8f9f7 549 HAL_StatusTypeDef HAL_COMP_Stop(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 550 {
<> 144:ef7eb2e8f9f7 551 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 552
<> 144:ef7eb2e8f9f7 553 /* Check the COMP handle allocation and lock status */
<> 144:ef7eb2e8f9f7 554 if((hcomp == NULL) || ((hcomp->State & COMP_STATE_BIT_LOCK) != RESET))
<> 144:ef7eb2e8f9f7 555 {
<> 144:ef7eb2e8f9f7 556 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 557 }
<> 144:ef7eb2e8f9f7 558 else
<> 144:ef7eb2e8f9f7 559 {
<> 144:ef7eb2e8f9f7 560 /* Check the parameter */
<> 144:ef7eb2e8f9f7 561 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 562
<> 144:ef7eb2e8f9f7 563 if(hcomp->State == HAL_COMP_STATE_BUSY)
<> 144:ef7eb2e8f9f7 564 {
<> 144:ef7eb2e8f9f7 565 /* Disable the selected comparator */
<> 144:ef7eb2e8f9f7 566 __HAL_COMP_DISABLE(hcomp);
<> 144:ef7eb2e8f9f7 567
<> 144:ef7eb2e8f9f7 568 /* Update COMP state */
<> 144:ef7eb2e8f9f7 569 hcomp->State = HAL_COMP_STATE_READY;
<> 144:ef7eb2e8f9f7 570 }
<> 144:ef7eb2e8f9f7 571 else
<> 144:ef7eb2e8f9f7 572 {
<> 144:ef7eb2e8f9f7 573 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 574 }
<> 144:ef7eb2e8f9f7 575 }
<> 144:ef7eb2e8f9f7 576
<> 144:ef7eb2e8f9f7 577 return status;
<> 144:ef7eb2e8f9f7 578 }
<> 144:ef7eb2e8f9f7 579
<> 144:ef7eb2e8f9f7 580 /**
<> 144:ef7eb2e8f9f7 581 * @brief Enables the interrupt and starts the comparator
<> 144:ef7eb2e8f9f7 582 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 583 * @retval HAL status.
<> 144:ef7eb2e8f9f7 584 */
<> 144:ef7eb2e8f9f7 585 HAL_StatusTypeDef HAL_COMP_Start_IT(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 586 {
<> 144:ef7eb2e8f9f7 587 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 588 uint32_t extiline = 0;
<> 144:ef7eb2e8f9f7 589
<> 144:ef7eb2e8f9f7 590 status = HAL_COMP_Start(hcomp);
<> 144:ef7eb2e8f9f7 591 if(status == HAL_OK)
<> 144:ef7eb2e8f9f7 592 {
<> 144:ef7eb2e8f9f7 593 /* Check the parameter */
<> 144:ef7eb2e8f9f7 594 assert_param(IS_COMP_TRIGGERMODE(hcomp->Init.TriggerMode));
<> 144:ef7eb2e8f9f7 595
<> 144:ef7eb2e8f9f7 596 /* Get the Exti Line output configuration */
<> 144:ef7eb2e8f9f7 597 extiline = COMP_GET_EXTI_LINE(hcomp->Instance);
<> 144:ef7eb2e8f9f7 598
<> 144:ef7eb2e8f9f7 599 /* Configure the trigger rising edge */
<> 144:ef7eb2e8f9f7 600 if((hcomp->Init.TriggerMode & COMP_TRIGGERMODE_IT_RISING) != RESET)
<> 144:ef7eb2e8f9f7 601 {
<> 144:ef7eb2e8f9f7 602 SET_BIT(EXTI->RTSR, extiline);
<> 144:ef7eb2e8f9f7 603 }
<> 144:ef7eb2e8f9f7 604 else
<> 144:ef7eb2e8f9f7 605 {
<> 144:ef7eb2e8f9f7 606 CLEAR_BIT(EXTI->RTSR, extiline);
<> 144:ef7eb2e8f9f7 607 }
<> 144:ef7eb2e8f9f7 608
<> 144:ef7eb2e8f9f7 609 /* Configure the trigger falling edge */
<> 144:ef7eb2e8f9f7 610 if((hcomp->Init.TriggerMode & COMP_TRIGGERMODE_IT_FALLING) != RESET)
<> 144:ef7eb2e8f9f7 611 {
<> 144:ef7eb2e8f9f7 612 SET_BIT(EXTI->FTSR, extiline);
<> 144:ef7eb2e8f9f7 613 }
<> 144:ef7eb2e8f9f7 614 else
<> 144:ef7eb2e8f9f7 615 {
<> 144:ef7eb2e8f9f7 616 CLEAR_BIT(EXTI->FTSR, extiline);
<> 144:ef7eb2e8f9f7 617 }
<> 144:ef7eb2e8f9f7 618
<> 144:ef7eb2e8f9f7 619 /* Clear COMP EXTI pending bit */
<> 144:ef7eb2e8f9f7 620 WRITE_REG(EXTI->PR, extiline);
<> 144:ef7eb2e8f9f7 621
<> 144:ef7eb2e8f9f7 622 /* Enable EXTI interrupt mode */
<> 144:ef7eb2e8f9f7 623 SET_BIT(EXTI->IMR, extiline);
<> 144:ef7eb2e8f9f7 624
<> 144:ef7eb2e8f9f7 625 }
<> 144:ef7eb2e8f9f7 626
<> 144:ef7eb2e8f9f7 627 return status;
<> 144:ef7eb2e8f9f7 628 }
<> 144:ef7eb2e8f9f7 629
<> 144:ef7eb2e8f9f7 630 /**
<> 144:ef7eb2e8f9f7 631 * @brief Disable the interrupt and Stop the comparator
<> 144:ef7eb2e8f9f7 632 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 633 * @retval HAL status
<> 144:ef7eb2e8f9f7 634 */
<> 144:ef7eb2e8f9f7 635 HAL_StatusTypeDef HAL_COMP_Stop_IT(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 636 {
<> 144:ef7eb2e8f9f7 637 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 638
<> 144:ef7eb2e8f9f7 639 /* Disable the EXTI Line interrupt mode */
<> 144:ef7eb2e8f9f7 640 CLEAR_BIT(EXTI->IMR, COMP_GET_EXTI_LINE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 641
<> 144:ef7eb2e8f9f7 642 status = HAL_COMP_Stop(hcomp);
<> 144:ef7eb2e8f9f7 643
<> 144:ef7eb2e8f9f7 644 return status;
<> 144:ef7eb2e8f9f7 645 }
<> 144:ef7eb2e8f9f7 646
<> 144:ef7eb2e8f9f7 647 /**
<> 144:ef7eb2e8f9f7 648 * @brief Comparator IRQ Handler
<> 144:ef7eb2e8f9f7 649 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 650 * @retval HAL status
<> 144:ef7eb2e8f9f7 651 */
<> 144:ef7eb2e8f9f7 652 void HAL_COMP_IRQHandler(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 653 {
<> 144:ef7eb2e8f9f7 654 uint32_t extiline = COMP_GET_EXTI_LINE(hcomp->Instance);
<> 144:ef7eb2e8f9f7 655
<> 144:ef7eb2e8f9f7 656 /* Check COMP Exti flag */
<> 144:ef7eb2e8f9f7 657 if(READ_BIT(EXTI->PR, extiline) != RESET)
<> 144:ef7eb2e8f9f7 658 {
<> 144:ef7eb2e8f9f7 659 /* Clear COMP EXTI pending bit */
<> 144:ef7eb2e8f9f7 660 WRITE_REG(EXTI->PR, extiline);
<> 144:ef7eb2e8f9f7 661
<> 144:ef7eb2e8f9f7 662 /* COMP trigger user callback */
<> 144:ef7eb2e8f9f7 663 HAL_COMP_TriggerCallback(hcomp);
<> 144:ef7eb2e8f9f7 664 }
<> 144:ef7eb2e8f9f7 665 }
<> 144:ef7eb2e8f9f7 666
<> 144:ef7eb2e8f9f7 667 /**
<> 144:ef7eb2e8f9f7 668 * @}
<> 144:ef7eb2e8f9f7 669 */
<> 144:ef7eb2e8f9f7 670
<> 144:ef7eb2e8f9f7 671 /** @defgroup COMP_Exported_Functions_Group3 Peripheral Control functions
<> 144:ef7eb2e8f9f7 672 * @brief Peripheral Control functions
<> 144:ef7eb2e8f9f7 673 *
<> 144:ef7eb2e8f9f7 674 @verbatim
<> 144:ef7eb2e8f9f7 675 ===============================================================================
<> 144:ef7eb2e8f9f7 676 ##### Peripheral Control functions #####
<> 144:ef7eb2e8f9f7 677 ===============================================================================
<> 144:ef7eb2e8f9f7 678 [..]
<> 144:ef7eb2e8f9f7 679 This subsection provides a set of functions allowing to control the COMP
<> 144:ef7eb2e8f9f7 680 management functions: Lock status, comparator output level check, IRQ
<> 144:ef7eb2e8f9f7 681 callback (in case of usage of comparator with interruption on ExtI line).
<> 144:ef7eb2e8f9f7 682
<> 144:ef7eb2e8f9f7 683 @endverbatim
<> 144:ef7eb2e8f9f7 684 * @{
<> 144:ef7eb2e8f9f7 685 */
<> 144:ef7eb2e8f9f7 686
<> 144:ef7eb2e8f9f7 687 /**
<> 144:ef7eb2e8f9f7 688 * @brief Lock the selected comparator configuration.
<> 144:ef7eb2e8f9f7 689 * Caution: On STM32L1, HAL COMP lock is software lock only (not
<> 144:ef7eb2e8f9f7 690 * hardware lock as on some other STM32 devices)
<> 144:ef7eb2e8f9f7 691 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 692 * @retval HAL status
<> 144:ef7eb2e8f9f7 693 */
<> 144:ef7eb2e8f9f7 694 HAL_StatusTypeDef HAL_COMP_Lock(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 695 {
<> 144:ef7eb2e8f9f7 696 HAL_StatusTypeDef status = HAL_OK;
<> 144:ef7eb2e8f9f7 697
<> 144:ef7eb2e8f9f7 698 /* Check the COMP handle allocation and lock status */
<> 144:ef7eb2e8f9f7 699 if((hcomp == NULL) || ((hcomp->State & COMP_STATE_BIT_LOCK) != RESET))
<> 144:ef7eb2e8f9f7 700 {
<> 144:ef7eb2e8f9f7 701 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 702 }
<> 144:ef7eb2e8f9f7 703 else
<> 144:ef7eb2e8f9f7 704 {
<> 144:ef7eb2e8f9f7 705 /* Check the parameter */
<> 144:ef7eb2e8f9f7 706 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 707
<> 144:ef7eb2e8f9f7 708 /* Set lock flag on state */
<> 144:ef7eb2e8f9f7 709 switch(hcomp->State)
<> 144:ef7eb2e8f9f7 710 {
<> 144:ef7eb2e8f9f7 711 case HAL_COMP_STATE_BUSY:
<> 144:ef7eb2e8f9f7 712 hcomp->State = HAL_COMP_STATE_BUSY_LOCKED;
<> 144:ef7eb2e8f9f7 713 break;
<> 144:ef7eb2e8f9f7 714 case HAL_COMP_STATE_READY:
<> 144:ef7eb2e8f9f7 715 hcomp->State = HAL_COMP_STATE_READY_LOCKED;
<> 144:ef7eb2e8f9f7 716 break;
<> 144:ef7eb2e8f9f7 717 default:
<> 144:ef7eb2e8f9f7 718 /* unexpected state */
<> 144:ef7eb2e8f9f7 719 status = HAL_ERROR;
<> 144:ef7eb2e8f9f7 720 break;
<> 144:ef7eb2e8f9f7 721 }
<> 144:ef7eb2e8f9f7 722 }
<> 144:ef7eb2e8f9f7 723
<> 144:ef7eb2e8f9f7 724 return status;
<> 144:ef7eb2e8f9f7 725 }
<> 144:ef7eb2e8f9f7 726
<> 144:ef7eb2e8f9f7 727 /**
<> 144:ef7eb2e8f9f7 728 * @brief Return the output level (high or low) of the selected comparator.
<> 144:ef7eb2e8f9f7 729 * The output level depends on the selected polarity.
<> 144:ef7eb2e8f9f7 730 * - Comparator output is low when the non-inverting input is at a lower
<> 144:ef7eb2e8f9f7 731 * voltage than the inverting input
<> 144:ef7eb2e8f9f7 732 * - Comparator output is high when the non-inverting input is at a higher
<> 144:ef7eb2e8f9f7 733 * voltage than the inverting input
<> 144:ef7eb2e8f9f7 734 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 735 * @retval Returns the selected comparator output level: COMP_OUTPUTLEVEL_LOW or COMP_OUTPUTLEVEL_HIGH.
<> 144:ef7eb2e8f9f7 736 *
<> 144:ef7eb2e8f9f7 737 */
<> 144:ef7eb2e8f9f7 738 uint32_t HAL_COMP_GetOutputLevel(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 739 {
<> 144:ef7eb2e8f9f7 740 uint32_t level = 0;
<> 144:ef7eb2e8f9f7 741
<> 144:ef7eb2e8f9f7 742 /* Check the parameter */
<> 144:ef7eb2e8f9f7 743 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 744
<> 144:ef7eb2e8f9f7 745 /* Read output level of the selected comparator */
<> 144:ef7eb2e8f9f7 746 if(READ_BIT(COMP->CSR, __COMP_CSR_CMPXOUT(hcomp)) == RESET)
<> 144:ef7eb2e8f9f7 747 {
<> 144:ef7eb2e8f9f7 748 level = COMP_OUTPUTLEVEL_LOW;
<> 144:ef7eb2e8f9f7 749 }
<> 144:ef7eb2e8f9f7 750 else
<> 144:ef7eb2e8f9f7 751 {
<> 144:ef7eb2e8f9f7 752 level = COMP_OUTPUTLEVEL_HIGH;
<> 144:ef7eb2e8f9f7 753 }
<> 144:ef7eb2e8f9f7 754
<> 144:ef7eb2e8f9f7 755 return(level);
<> 144:ef7eb2e8f9f7 756 }
<> 144:ef7eb2e8f9f7 757
<> 144:ef7eb2e8f9f7 758 /**
<> 144:ef7eb2e8f9f7 759 * @brief Comparator callback.
<> 144:ef7eb2e8f9f7 760 * @param hcomp: COMP handle
<> 144:ef7eb2e8f9f7 761 * @retval None
<> 144:ef7eb2e8f9f7 762 */
<> 144:ef7eb2e8f9f7 763 __weak void HAL_COMP_TriggerCallback(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 764 {
<> 144:ef7eb2e8f9f7 765 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 766 UNUSED(hcomp);
<> 144:ef7eb2e8f9f7 767
<> 144:ef7eb2e8f9f7 768 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 769 the HAL_COMP_TriggerCallback should be implemented in the user file
<> 144:ef7eb2e8f9f7 770 */
<> 144:ef7eb2e8f9f7 771 }
<> 144:ef7eb2e8f9f7 772
<> 144:ef7eb2e8f9f7 773
<> 144:ef7eb2e8f9f7 774 /**
<> 144:ef7eb2e8f9f7 775 * @}
<> 144:ef7eb2e8f9f7 776 */
<> 144:ef7eb2e8f9f7 777
<> 144:ef7eb2e8f9f7 778 /** @defgroup COMP_Exported_Functions_Group4 Peripheral State functions
<> 144:ef7eb2e8f9f7 779 * @brief Peripheral State functions
<> 144:ef7eb2e8f9f7 780 *
<> 144:ef7eb2e8f9f7 781 @verbatim
<> 144:ef7eb2e8f9f7 782 ===============================================================================
<> 144:ef7eb2e8f9f7 783 ##### Peripheral State functions #####
<> 144:ef7eb2e8f9f7 784 ===============================================================================
<> 144:ef7eb2e8f9f7 785 [..]
<> 144:ef7eb2e8f9f7 786 This subsection permit to get in run-time the status of the peripheral.
<> 144:ef7eb2e8f9f7 787
<> 144:ef7eb2e8f9f7 788 @endverbatim
<> 144:ef7eb2e8f9f7 789 * @{
<> 144:ef7eb2e8f9f7 790 */
<> 144:ef7eb2e8f9f7 791
<> 144:ef7eb2e8f9f7 792 /**
<> 144:ef7eb2e8f9f7 793 * @brief Return the COMP state
<> 144:ef7eb2e8f9f7 794 * @param hcomp : COMP handle
<> 144:ef7eb2e8f9f7 795 * @retval HAL state
<> 144:ef7eb2e8f9f7 796 */
<> 144:ef7eb2e8f9f7 797 HAL_COMP_StateTypeDef HAL_COMP_GetState(COMP_HandleTypeDef *hcomp)
<> 144:ef7eb2e8f9f7 798 {
<> 144:ef7eb2e8f9f7 799 /* Check the COMP handle allocation */
<> 144:ef7eb2e8f9f7 800 if(hcomp == NULL)
<> 144:ef7eb2e8f9f7 801 {
<> 144:ef7eb2e8f9f7 802 return HAL_COMP_STATE_RESET;
<> 144:ef7eb2e8f9f7 803 }
<> 144:ef7eb2e8f9f7 804
<> 144:ef7eb2e8f9f7 805 /* Check the parameter */
<> 144:ef7eb2e8f9f7 806 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
<> 144:ef7eb2e8f9f7 807
<> 144:ef7eb2e8f9f7 808 return hcomp->State;
<> 144:ef7eb2e8f9f7 809 }
<> 144:ef7eb2e8f9f7 810 /**
<> 144:ef7eb2e8f9f7 811 * @}
<> 144:ef7eb2e8f9f7 812 */
<> 144:ef7eb2e8f9f7 813
<> 144:ef7eb2e8f9f7 814 /**
<> 144:ef7eb2e8f9f7 815 * @}
<> 144:ef7eb2e8f9f7 816 */
<> 144:ef7eb2e8f9f7 817
<> 144:ef7eb2e8f9f7 818 #endif /* HAL_COMP_MODULE_ENABLED */
<> 144:ef7eb2e8f9f7 819 /**
<> 144:ef7eb2e8f9f7 820 * @}
<> 144:ef7eb2e8f9f7 821 */
<> 144:ef7eb2e8f9f7 822
<> 144:ef7eb2e8f9f7 823 /**
<> 144:ef7eb2e8f9f7 824 * @}
<> 144:ef7eb2e8f9f7 825 */
<> 144:ef7eb2e8f9f7 826
<> 144:ef7eb2e8f9f7 827 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/