1 /**
2   ******************************************************************************
3   * @file    stm32l1xx_hal_comp.h
4   * @author  MCD Application Team
5   * @brief   Header file of COMP HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                        opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18   */
19 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef __STM32L1xx_HAL_COMP_H
22 #define __STM32L1xx_HAL_COMP_H
23 
24 #ifdef __cplusplus
25  extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32l1xx_hal_def.h"
30 
31 /** @addtogroup STM32L1xx_HAL_Driver
32   * @{
33   */
34 
35 /** @addtogroup COMP
36   * @{
37   */
38 
39 /* Exported types ------------------------------------------------------------*/
40 /** @defgroup COMP_Exported_Types COMP Exported Types
41   * @{
42   */
43 
44 /**
45   * @brief  COMP Init structure definition
46   */
47 typedef struct
48 {
49 
50   uint32_t InvertingInput;        /*!< Selects the inverting input of the comparator.
51                                        This parameter can be a value of @ref COMP_InvertingInput
52                                        Note: Inverting input can be changed on the fly, while comparator is running.
53                                        Note: This feature is available on COMP2 only. If COMP1 is selected, this parameter is discarded (On COMP1, inverting input is fixed to Vrefint). */
54 
55   uint32_t NonInvertingInput;     /*!< Selects the non inverting input of the comparator.
56                                        This parameter can be a value of @ref COMPEx_NonInvertingInput */
57 
58   uint32_t Output;                /*!< Selects the output redirection of the comparator.
59                                        This parameter can be a value of @ref COMP_Output
60                                        Note: This feature is available on COMP2 only. If COMP1 is selected, this parameter is discarded. */
61 
62   uint32_t Mode;                  /*!< Selects the operating consumption mode of the comparator
63                                        to adjust the speed/consumption.
64                                        This parameter can be a value of @ref COMP_Mode
65                                        Note: This feature is available on COMP2 only. If COMP1 is selected, this parameter is discarded. */
66 
67   uint32_t WindowMode;            /*!< Selects the window mode of the 2 comparators.
68                                        If enabled, non-inverting inputs of the 2 comparators are connected together and are using inputs of COMP2 only (COMP1 non-inverting input is no more accessible, even from ADC channel VCOMP).
69                                        This parameter can be a value of @ref COMP_WindowMode
70                                        Note: This feature must be enabled from COMP2 instance. If COMP1 is selected, this parameter is discarded. */
71 
72   uint32_t TriggerMode;           /*!< Selects the trigger mode of the comparator when using interruption on EXTI line (interrupt mode).
73                                        This parameter can be a value of @ref COMP_TriggerMode
74                                        Note: This feature is used with function "HAL_COMP_Start_IT()". In all other functions, this parameter is discarded. */
75 
76   uint32_t NonInvertingInputPull; /*!< Selects the internal pulling resistor connected on non inverting input.
77                                        This parameter can be a value of @ref COMP_NonInvertingInputPull
78                                        Note: To avoid extra power consumption, only one resistor should be enabled at a time.
79                                        Note: This feature is available on COMP1 only. If COMP2 is selected, this parameter is discarded. */
80 
81 }COMP_InitTypeDef;
82 
83 /**
84   * @brief  HAL State structures definition
85   */
86 typedef enum
87 {
88   HAL_COMP_STATE_RESET             = 0x00,    /*!< COMP not yet initialized or disabled             */
89   HAL_COMP_STATE_READY             = 0x01,    /*!< COMP initialized and ready for use               */
90   HAL_COMP_STATE_READY_LOCKED      = 0x11,    /*!< COMP initialized but the configuration is locked */
91   HAL_COMP_STATE_BUSY              = 0x02,    /*!< COMP is running                                  */
92   HAL_COMP_STATE_BUSY_LOCKED       = 0x12     /*!< COMP is running and the configuration is locked  */
93 }HAL_COMP_StateTypeDef;
94 
95 /**
96   * @brief  COMP Handle Structure definition
97   */
98 typedef struct __COMP_HandleTypeDef
99 {
100   COMP_TypeDef       *Instance;       /*!< Register base address    */
101   COMP_InitTypeDef   Init;            /*!< COMP required parameters */
102   HAL_LockTypeDef    Lock;            /*!< Locking object           */
103   __IO HAL_COMP_StateTypeDef  State;  /*!< COMP communication state */
104   __IO uint32_t      ErrorCode;       /*!< COMP Error code */
105 #if (USE_HAL_COMP_REGISTER_CALLBACKS == 1)
106   void (* TriggerCallback)(struct __COMP_HandleTypeDef *hcomp);   /*!< COMP trigger callback */
107   void (* MspInitCallback)(struct __COMP_HandleTypeDef *hcomp);   /*!< COMP Msp Init callback */
108   void (* MspDeInitCallback)(struct __COMP_HandleTypeDef *hcomp); /*!< COMP Msp DeInit callback */
109 #endif /* USE_HAL_COMP_REGISTER_CALLBACKS */
110 } COMP_HandleTypeDef;
111 
112 #if (USE_HAL_COMP_REGISTER_CALLBACKS == 1)
113 /**
114   * @brief  HAL COMP Callback ID enumeration definition
115   */
116 typedef enum
117 {
118   HAL_COMP_TRIGGER_CB_ID                = 0x00U,  /*!< COMP trigger callback ID */
119   HAL_COMP_MSPINIT_CB_ID                = 0x01U,  /*!< COMP Msp Init callback ID */
120   HAL_COMP_MSPDEINIT_CB_ID              = 0x02U   /*!< COMP Msp DeInit callback ID */
121 } HAL_COMP_CallbackIDTypeDef;
122 
123 /**
124   * @brief  HAL COMP Callback pointer definition
125   */
126 typedef  void (*pCOMP_CallbackTypeDef)(COMP_HandleTypeDef *hcomp); /*!< pointer to a COMP callback function */
127 
128 #endif /* USE_HAL_COMP_REGISTER_CALLBACKS */
129 
130 /**
131   * @}
132   */
133 
134 /* Exported constants --------------------------------------------------------*/
135 /** @defgroup COMP_Exported_Constants COMP Exported Constants
136   * @{
137   */
138 
139 /** @defgroup COMP_Error_Code COMP Error Code
140   * @{
141   */
142 #define HAL_COMP_ERROR_NONE             (0x00U)   /*!< No error */
143 #if (USE_HAL_COMP_REGISTER_CALLBACKS == 1)
144 #define HAL_COMP_ERROR_INVALID_CALLBACK (0x01U)   /*!< Invalid Callback error */
145 #endif /* USE_HAL_COMP_REGISTER_CALLBACKS */
146 /**
147   * @}
148   */
149 
150 /** @defgroup COMP_Output COMP Output
151   * @{
152   */
153 #define COMP_OUTPUT_TIM2IC4                     (0x00000000U)                                               /*!< COMP2 output connected to TIM2 Input Capture 4 */
154 #define COMP_OUTPUT_TIM2OCREFCLR                (                                        COMP_CSR_OUTSEL_0) /*!< COMP2 output connected to TIM2 OCREF Clear */
155 #define COMP_OUTPUT_TIM3IC4                     (                    COMP_CSR_OUTSEL_1                    ) /*!< COMP2 output connected to TIM3 Input Capture 4 */
156 #define COMP_OUTPUT_TIM3OCREFCLR                (                    COMP_CSR_OUTSEL_1 | COMP_CSR_OUTSEL_0) /*!< COMP2 output connected to TIM3 OCREF Clear */
157 #define COMP_OUTPUT_TIM4IC4                     (COMP_CSR_OUTSEL_2                                        ) /*!< COMP2 output connected to TIM4 Input Capture 4 */
158 #define COMP_OUTPUT_TIM4OCREFCLR                (COMP_CSR_OUTSEL_2                     | COMP_CSR_OUTSEL_0) /*!< COMP2 output connected to TIM4 OCREF Clear */
159 #define COMP_OUTPUT_TIM10IC1                    (COMP_CSR_OUTSEL_2 | COMP_CSR_OUTSEL_1                    ) /*!< COMP2 output connected to TIM10 Input Capture 1 */
160 #define COMP_OUTPUT_NONE                        (COMP_CSR_OUTSEL_2 | COMP_CSR_OUTSEL_1 | COMP_CSR_OUTSEL_0) /*!< COMP2 output is not connected to other peripherals */
161 
162 #define IS_COMP_OUTPUT(OUTPUT) (((OUTPUT) == COMP_OUTPUT_TIM2IC4)      || \
163                                 ((OUTPUT) == COMP_OUTPUT_TIM2OCREFCLR) || \
164                                 ((OUTPUT) == COMP_OUTPUT_TIM3IC4)      || \
165                                 ((OUTPUT) == COMP_OUTPUT_TIM3OCREFCLR) || \
166                                 ((OUTPUT) == COMP_OUTPUT_TIM4IC4)      || \
167                                 ((OUTPUT) == COMP_OUTPUT_TIM4OCREFCLR) || \
168                                 ((OUTPUT) == COMP_OUTPUT_TIM10IC1)     || \
169                                 ((OUTPUT) == COMP_OUTPUT_NONE)           )
170 /**
171   * @}
172   */
173 
174 /** @defgroup COMP_InvertingInput COMP InvertingInput
175   * @{
176   */
177 /* Inverting Input specific to COMP2 */
178 #define COMP_INVERTINGINPUT_IO                  (                                      COMP_CSR_INSEL_0) /*!< External I/O (COMP2_INM connected to pin PB3) connected to comparator 2 inverting input */
179 #define COMP_INVERTINGINPUT_VREFINT             (                   COMP_CSR_INSEL_1                   ) /*!< VREFINT connected to comparator 2 inverting input */
180 #define COMP_INVERTINGINPUT_3_4VREFINT          (                   COMP_CSR_INSEL_1 | COMP_CSR_INSEL_0) /*!< 3/4 VREFINT connected to comparator 2 inverting input */
181 #define COMP_INVERTINGINPUT_1_2VREFINT          (COMP_CSR_INSEL_2                                      ) /*!< 1/2 VREFINT connected to comparator 2 inverting input */
182 #define COMP_INVERTINGINPUT_1_4VREFINT          (COMP_CSR_INSEL_2                    | COMP_CSR_INSEL_0) /*!< 1/4 VREFINT connected to comparator 2 inverting input */
183 #define COMP_INVERTINGINPUT_DAC1                (COMP_CSR_INSEL_2 | COMP_CSR_INSEL_1                   ) /*!< DAC_OUT1 (PA4) connected to comparator 2 inverting input */
184 #define COMP_INVERTINGINPUT_DAC2                (COMP_CSR_INSEL_2 | COMP_CSR_INSEL_1 | COMP_CSR_INSEL_0) /*!< DAC2_OUT (PA5) connected to comparator 2 inverting input */
185 
186 #define IS_COMP_INVERTINGINPUT(INPUT) (((INPUT) == COMP_INVERTINGINPUT_IO)         || \
187                                        ((INPUT) == COMP_INVERTINGINPUT_VREFINT)    || \
188                                        ((INPUT) == COMP_INVERTINGINPUT_3_4VREFINT) || \
189                                        ((INPUT) == COMP_INVERTINGINPUT_1_2VREFINT) || \
190                                        ((INPUT) == COMP_INVERTINGINPUT_1_4VREFINT) || \
191                                        ((INPUT) == COMP_INVERTINGINPUT_DAC1)       || \
192                                        ((INPUT) == COMP_INVERTINGINPUT_DAC2)         )
193 /**
194   * @}
195   */
196 
197 /** @defgroup COMP_Mode COMP Mode
198   * @{
199   */
200 /* Please refer to the electrical characteristics in the device datasheet for
201    the power consumption values */
202 #define COMP_MODE_LOWSPEED          (0x00000000U)           /*!< Low Speed */
203 #define COMP_MODE_HIGHSPEED         COMP_CSR_SPEED          /*!< High Speed */
204 
205 #define IS_COMP_MODE(SPEED)    (((SPEED) == COMP_MODE_LOWSPEED) || \
206                                 ((SPEED) == COMP_MODE_HIGHSPEED))
207 /**
208   * @}
209   */
210 
211 /** @defgroup COMP_WindowMode COMP WindowMode
212   * @{
213   */
214 #define COMP_WINDOWMODE_DISABLE               (0x00000000U)  /*!< Window mode disabled: COMP1 non-inverting input is independant */
215 #define COMP_WINDOWMODE_ENABLE                COMP_CSR_WNDWE          /*!< Window mode enabled: COMP1 non-inverting input is no more accessible, even from ADC channel VCOMP) (connected to COMP2 non-inverting input) */
216 
217 #define IS_COMP_WINDOWMODE(WINDOWMODE) (((WINDOWMODE) == COMP_WINDOWMODE_DISABLE) || \
218                                         ((WINDOWMODE) == COMP_WINDOWMODE_ENABLE))
219 /**
220   * @}
221   */
222 
223 /** @defgroup COMP_OutputLevel COMP OutputLevel
224   * @{
225   */
226 /* Comparator output is low when the non-inverting input is at a lower        */
227 /* voltage than the inverting input.                                          */
228 #define COMP_OUTPUTLEVEL_LOW                   (0x00000000U)
229 
230 /* Comparator output is high when the non-inverting input is at a higher      */
231 /* voltage than the inverting input.                                          */
232 #define COMP_OUTPUTLEVEL_HIGH                  (0x00000001U)
233 /**
234   * @}
235   */
236 
237 /** @defgroup COMP_TriggerMode COMP TriggerMode
238   * @{
239   */
240 #define COMP_TRIGGERMODE_NONE                  (0x00000000U)   /*!< No External Interrupt trigger detection */
241 #define COMP_TRIGGERMODE_IT_RISING             (0x00000001U)   /*!< External Interrupt Mode with Rising edge trigger detection */
242 #define COMP_TRIGGERMODE_IT_FALLING            (0x00000002U)   /*!< External Interrupt Mode with Falling edge trigger detection */
243 #define COMP_TRIGGERMODE_IT_RISING_FALLING     (0x00000003U)   /*!< External Interrupt Mode with Rising/Falling edge trigger detection */
244 
245 #define IS_COMP_TRIGGERMODE(MODE)  (((MODE) == COMP_TRIGGERMODE_NONE)             || \
246                                     ((MODE) == COMP_TRIGGERMODE_IT_RISING)        || \
247                                     ((MODE) == COMP_TRIGGERMODE_IT_FALLING)       || \
248                                     ((MODE) == COMP_TRIGGERMODE_IT_RISING_FALLING)  )
249 /**
250   * @}
251   */
252 
253 /** @defgroup COMP_ExtiLineEvent COMP ExtiLineEvent
254   * @{
255   */
256 #define COMP_EXTI_LINE_COMP1             EXTI_RTSR_TR21  /*!< External interrupt line 21 Connected to COMP1 */
257 #define COMP_EXTI_LINE_COMP2             EXTI_RTSR_TR22  /*!< External interrupt line 22 Connected to COMP2 */
258 
259 /**
260   * @}
261   */
262 
263 /** @defgroup COMP_NonInvertingInputPull COMP NonInvertingInputPull
264   * @{
265   */
266 #define COMP_NONINVERTINGINPUT_NOPULL           (0x00000000U)           /*!< No internal pull-up or pull-down resistor connected to comparator non inverting input */
267 #define COMP_NONINVERTINGINPUT_10KPU            COMP_CSR_10KPU          /*!< Internal 10kOhm pull-up resistor connected to comparator non inverting input */
268 #define COMP_NONINVERTINGINPUT_10KPD            COMP_CSR_10KPD          /*!< Internal 10kOhm pull-down resistor connected to comparator non inverting input */
269 #define COMP_NONINVERTINGINPUT_400KPU           COMP_CSR_400KPU         /*!< Internal 400kOhm pull-up resistor connected to comparator non inverting input */
270 #define COMP_NONINVERTINGINPUT_400KPD           COMP_CSR_400KPD         /*!< Internal 400kOhm pull-down resistor connected to comparator non inverting input */
271 
272 #define IS_COMP_NONINVERTINGINPUTPULL(INPUT) (((INPUT) == COMP_NONINVERTINGINPUT_NOPULL) || \
273                                               ((INPUT) == COMP_NONINVERTINGINPUT_10KPU)  || \
274                                               ((INPUT) == COMP_NONINVERTINGINPUT_10KPD)  || \
275                                               ((INPUT) == COMP_NONINVERTINGINPUT_400KPU) || \
276                                               ((INPUT) == COMP_NONINVERTINGINPUT_400KPD)   )
277 /**
278   * @}
279   */
280 
281 /**
282   * @}
283   */
284 
285 
286 /* Exported macro ------------------------------------------------------------*/
287 
288 /** @defgroup COMP_Exported_Macro COMP Exported Macro
289   * @{
290   */
291 
292 /** @defgroup COMP_Handle_Management  COMP Handle Management
293   * @{
294   */
295 
296 /** @brief Reset COMP handle state
297   * @param  __HANDLE__ COMP handle.
298   * @retval None
299   */
300 #if (USE_HAL_COMP_REGISTER_CALLBACKS == 1)
301 #define __HAL_COMP_RESET_HANDLE_STATE(__HANDLE__) do{                                                   \
302                                                      (__HANDLE__)->State = HAL_COMP_STATE_RESET;      \
303                                                      (__HANDLE__)->MspInitCallback = NULL;            \
304                                                      (__HANDLE__)->MspDeInitCallback = NULL;          \
305                                                     } while(0)
306 #else
307 #define __HAL_COMP_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_COMP_STATE_RESET)
308 #endif
309 
310 /**
311   * @brief Clear COMP error code (set it to no error code "HAL_COMP_ERROR_NONE").
312   * @param __HANDLE__ COMP handle
313   * @retval None
314   */
315 #define COMP_CLEAR_ERRORCODE(__HANDLE__) ((__HANDLE__)->ErrorCode = HAL_COMP_ERROR_NONE)
316 
317 /**
318   * @brief Enables the specified comparator
319   * @param  __HANDLE__ COMP handle.
320   * @retval None.
321   */
322 #define __HAL_COMP_ENABLE(__HANDLE__)                                          \
323   ( ( ((__HANDLE__)->Instance == COMP1)                                        \
324     )?                                                                         \
325      SET_BIT(COMP->CSR, COMP_CSR_CMP1EN)                                       \
326      :                                                                         \
327      MODIFY_REG(COMP->CSR, COMP_CSR_INSEL, (__HANDLE__)->Init.InvertingInput ) \
328   )
329 
330 /**
331   * @brief Disables the specified comparator
332   * @param  __HANDLE__ COMP handle.
333   * @retval None.
334   */
335 #define __HAL_COMP_DISABLE(__HANDLE__)                                         \
336   ( ( ((__HANDLE__)->Instance == COMP1)                                        \
337     )?                                                                         \
338      CLEAR_BIT(COMP->CSR, COMP_CSR_CMP1EN)                                     \
339      :                                                                         \
340      CLEAR_BIT(COMP->CSR, COMP_CSR_INSEL)                                      \
341   )
342 
343 /** @brief  Checks whether the specified COMP flag is set or not.
344   * @param  __HANDLE__ specifies the COMP Handle.
345   * @param  __FLAG__ specifies the flag to check.
346   *        This parameter can be one of the following values:
347   *            @arg COMP_FLAG_LOCK:  lock flag
348   * @retval The new state of __FLAG__ (TRUE or FALSE).
349   */
350 #define __HAL_COMP_GET_FLAG(__HANDLE__, __FLAG__) (READ_BIT((__HANDLE__)->Instance->CSR, (__FLAG__)) == (__FLAG__))
351 
352 /**
353   * @brief  Enable the COMP1 EXTI line rising edge trigger.
354   * @retval None
355   */
356 #define __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE()    SET_BIT(EXTI->RTSR, COMP_EXTI_LINE_COMP1)
357 
358 /**
359   * @brief  Disable the COMP1 EXTI line rising edge trigger.
360   * @retval None
361   */
362 #define __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE()   CLEAR_BIT(EXTI->RTSR, COMP_EXTI_LINE_COMP1)
363 
364 /**
365   * @brief  Enable the COMP1 EXTI line falling edge trigger.
366   * @retval None
367   */
368 #define __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE()   SET_BIT(EXTI->FTSR, COMP_EXTI_LINE_COMP1)
369 
370 /**
371   * @brief  Disable the COMP1 EXTI line falling edge trigger.
372   * @retval None
373   */
374 #define __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE()  CLEAR_BIT(EXTI->FTSR, COMP_EXTI_LINE_COMP1)
375 
376 /**
377   * @brief  Enable the COMP1 EXTI line rising & falling edge trigger.
378   * @retval None
379   */
380 #define __HAL_COMP_COMP1_EXTI_ENABLE_RISING_FALLING_EDGE()   do { \
381                                                                __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE(); \
382                                                                __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE(); \
383                                                              } while(0)
384 
385 /**
386   * @brief  Disable the COMP1 EXTI line rising & falling edge trigger.
387   * @retval None
388   */
389 #define __HAL_COMP_COMP1_EXTI_DISABLE_RISING_FALLING_EDGE()  do { \
390                                                                __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE(); \
391                                                                __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE(); \
392                                                              } while(0)
393 
394 /**
395   * @brief  Enable the COMP1 EXTI line in interrupt mode.
396   * @retval None
397   */
398 #define __HAL_COMP_COMP1_EXTI_ENABLE_IT()             SET_BIT(EXTI->IMR, COMP_EXTI_LINE_COMP1)
399 
400 /**
401   * @brief  Disable the COMP1 EXTI line in interrupt mode.
402   * @retval None
403   */
404 #define __HAL_COMP_COMP1_EXTI_DISABLE_IT()            CLEAR_BIT(EXTI->IMR, COMP_EXTI_LINE_COMP1)
405 
406 /**
407   * @brief  Enable the COMP1 EXTI Line in event mode.
408   * @retval None
409   */
410 #define __HAL_COMP_COMP1_EXTI_ENABLE_EVENT()           SET_BIT(EXTI->EMR, COMP_EXTI_LINE_COMP1)
411 
412 /**
413   * @brief  Disable the COMP1 EXTI Line in event mode.
414   * @retval None
415   */
416 #define __HAL_COMP_COMP1_EXTI_DISABLE_EVENT()          CLEAR_BIT(EXTI->EMR, COMP_EXTI_LINE_COMP1)
417 
418 /**
419   * @brief  Check whether the COMP1 EXTI line flag is set or not.
420   * @retval RESET or SET
421   */
422 #define __HAL_COMP_COMP1_EXTI_GET_FLAG()              READ_BIT(EXTI->PR, COMP_EXTI_LINE_COMP1)
423 
424 /**
425   * @brief  Clear the the COMP1 EXTI flag.
426   * @retval None
427   */
428 #define __HAL_COMP_COMP1_EXTI_CLEAR_FLAG()            WRITE_REG(EXTI->PR, COMP_EXTI_LINE_COMP1)
429 
430 /**
431   * @brief  Generates a Software interrupt on COMP1 EXTI Line.
432   * @retval None
433   */
434 #define __HAL_COMP_COMP1_EXTI_GENERATE_SWIT()              SET_BIT(EXTI->SWIER, COMP_EXTI_LINE_COMP1)
435 
436 /**
437   * @brief  Enable the COMP2 EXTI line rising edge trigger.
438   * @retval None
439   */
440 #define __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE()    SET_BIT(EXTI->RTSR, COMP_EXTI_LINE_COMP2)
441 
442 /**
443   * @brief  Disable the COMP2 EXTI line rising edge trigger.
444   * @retval None
445   */
446 #define __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE()   CLEAR_BIT(EXTI->RTSR, COMP_EXTI_LINE_COMP2)
447 
448 /**
449   * @brief  Enable the COMP2 EXTI line falling edge trigger.
450   * @retval None
451   */
452 #define __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE()   SET_BIT(EXTI->FTSR, COMP_EXTI_LINE_COMP2)
453 
454 /**
455   * @brief  Disable the COMP2 EXTI line falling edge trigger.
456   * @retval None
457   */
458 #define __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE()  CLEAR_BIT(EXTI->FTSR, COMP_EXTI_LINE_COMP2)
459 
460 /**
461   * @brief  Enable the COMP2 EXTI line rising & falling edge trigger.
462   * @retval None
463   */
464 #define __HAL_COMP_COMP2_EXTI_ENABLE_RISING_FALLING_EDGE()   do { \
465                                                                __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE(); \
466                                                                __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE(); \
467                                                              } while(0)
468 
469 /**
470   * @brief  Disable the COMP2 EXTI line rising & falling edge trigger.
471   * @retval None
472   */
473 #define __HAL_COMP_COMP2_EXTI_DISABLE_RISING_FALLING_EDGE()   do { \
474                                                                __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE(); \
475                                                                __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE(); \
476                                                              } while(0)
477 
478 /**
479   * @brief  Enable the COMP2 EXTI line.
480   * @retval None
481   */
482 #define __HAL_COMP_COMP2_EXTI_ENABLE_IT()             SET_BIT(EXTI->IMR, COMP_EXTI_LINE_COMP2)
483 
484 /**
485   * @brief  Disable the COMP2 EXTI line.
486   * @retval None
487   */
488 #define __HAL_COMP_COMP2_EXTI_DISABLE_IT()            CLEAR_BIT(EXTI->IMR, COMP_EXTI_LINE_COMP2)
489 
490 /**
491   * @brief  Enable the COMP2 EXTI Line in event mode.
492   * @retval None
493   */
494 #define __HAL_COMP_COMP2_EXTI_ENABLE_EVENT()           SET_BIT(EXTI->EMR, COMP_EXTI_LINE_COMP2)
495 
496 /**
497   * @brief  Disable the COMP2 EXTI Line in event mode.
498   * @retval None
499   */
500 #define __HAL_COMP_COMP2_EXTI_DISABLE_EVENT()          CLEAR_BIT(EXTI->EMR, COMP_EXTI_LINE_COMP2)
501 
502 /**
503   * @brief  Check whether the COMP2 EXTI line flag is set or not.
504   * @retval RESET or SET
505   */
506 #define __HAL_COMP_COMP2_EXTI_GET_FLAG()              READ_BIT(EXTI->PR, COMP_EXTI_LINE_COMP2)
507 
508 /**
509   * @brief  Clear the the COMP2 EXTI flag.
510   * @retval None
511   */
512 #define __HAL_COMP_COMP2_EXTI_CLEAR_FLAG()            WRITE_REG(EXTI->PR, COMP_EXTI_LINE_COMP2)
513 
514 /**
515   * @brief  Generates a Software interrupt on COMP1 EXTI Line.
516   * @retval None
517   */
518 #define __HAL_COMP_COMP2_EXTI_GENERATE_SWIT()              SET_BIT(EXTI->SWIER, COMP_EXTI_LINE_COMP2)
519 
520 /**
521   * @}
522   */
523 
524 /* Private macro -------------------------------------------------------------*/
525 
526 /** @defgroup COMP_Private_Macro COMP Private Macro
527   * @{
528   */
529 
530 /**
531   * @brief  Get the specified EXTI line for a comparator instance
532   * @param  __INSTANCE__ specifies the COMP instance.
533   * @retval value of @ref COMP_ExtiLineEvent
534   */
535 #define COMP_GET_EXTI_LINE(__INSTANCE__)                                       \
536   ( ( ((__INSTANCE__) == COMP1)                                                \
537     )?                                                                         \
538      (COMP_EXTI_LINE_COMP1)                                                    \
539      :                                                                         \
540      (COMP_EXTI_LINE_COMP2)                                                    \
541   )
542 
543 /**
544   * @brief Select the COMP register CSR bit CMPxOUT corresponding to the
545   * selected COMP instance.
546   * @param __HANDLE__: COMP handle
547   * @retval Comparator register CSR bit COMP_CSR_CMP1OUT or COMP_CSR_CMP2OUT
548   */
549 #define __COMP_CSR_CMPXOUT(__HANDLE__)                                         \
550   ( ( ((__HANDLE__)->Instance == COMP1)                                        \
551     )?                                                                         \
552      (COMP_CSR_CMP1OUT)                                                        \
553      :                                                                         \
554      (COMP_CSR_CMP2OUT)                                                        \
555   )
556 
557 /**
558   * @brief Verification of COMP state: enabled or disabled
559   * @param __HANDLE__: COMP handle
560   * @retval SET (COMP enabled) or RESET (COMP disabled)
561   */
562 #define __COMP_IS_ENABLED(__HANDLE__)                                          \
563   ( ( ((__HANDLE__)->Instance == COMP1)                                        \
564     )?                                                                         \
565      (((READ_BIT(COMP->CSR , COMP_CSR_CMP1EN) == COMP_CSR_CMP1EN)              \
566       ) ? SET : RESET)                                                         \
567      :                                                                         \
568      (((READ_BIT(COMP->CSR , COMP_CSR_INSEL) != RESET)                         \
569       ) ? SET : RESET)                                                         \
570   )
571 
572 /**
573   * @}
574   */
575 
576 
577 /* Include COMP HAL Extension module */
578 #include "stm32l1xx_hal_comp_ex.h"
579 
580 /* Exported functions --------------------------------------------------------*/
581 /** @addtogroup COMP_Exported_Functions
582   * @{
583   */
584 
585 /* Initialization and de-initialization functions  ******************************/
586 /** @addtogroup COMP_Exported_Functions_Group1
587   * @{
588   */
589 HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp);
590 HAL_StatusTypeDef HAL_COMP_DeInit (COMP_HandleTypeDef *hcomp);
591 void HAL_COMP_MspInit(COMP_HandleTypeDef *hcomp);
592 void HAL_COMP_MspDeInit(COMP_HandleTypeDef *hcomp);
593 
594 #if (USE_HAL_COMP_REGISTER_CALLBACKS == 1)
595 /* Callbacks Register/UnRegister functions  ***********************************/
596 HAL_StatusTypeDef HAL_COMP_RegisterCallback(COMP_HandleTypeDef *hcomp, HAL_COMP_CallbackIDTypeDef CallbackID, pCOMP_CallbackTypeDef pCallback);
597 HAL_StatusTypeDef HAL_COMP_UnRegisterCallback(COMP_HandleTypeDef *hcomp, HAL_COMP_CallbackIDTypeDef CallbackID);
598 #endif /* USE_HAL_COMP_REGISTER_CALLBACKS */
599 
600 /**
601   * @}
602   */
603 
604 /* I/O operation functions  *****************************************************/
605 /** @addtogroup COMP_Exported_Functions_Group2
606   * @{
607   */
608 HAL_StatusTypeDef HAL_COMP_Start(COMP_HandleTypeDef *hcomp);
609 HAL_StatusTypeDef HAL_COMP_Stop(COMP_HandleTypeDef *hcomp);
610 HAL_StatusTypeDef HAL_COMP_Start_IT(COMP_HandleTypeDef *hcomp);
611 HAL_StatusTypeDef HAL_COMP_Stop_IT(COMP_HandleTypeDef *hcomp);
612 void HAL_COMP_IRQHandler(COMP_HandleTypeDef *hcomp);
613 /**
614   * @}
615   */
616 
617 /* Peripheral Control functions  ************************************************/
618 /** @addtogroup COMP_Exported_Functions_Group3
619   * @{
620   */
621 HAL_StatusTypeDef HAL_COMP_Lock(COMP_HandleTypeDef *hcomp);
622 uint32_t HAL_COMP_GetOutputLevel(COMP_HandleTypeDef *hcomp);
623 
624 /* Callback in Interrupt mode */
625 void HAL_COMP_TriggerCallback(COMP_HandleTypeDef *hcomp);
626 /**
627   * @}
628   */
629 
630 /* Peripheral State functions  **************************************************/
631 /** @addtogroup COMP_Exported_Functions_Group4
632   * @{
633   */
634 HAL_COMP_StateTypeDef HAL_COMP_GetState(COMP_HandleTypeDef *hcomp);
635 uint32_t              HAL_COMP_GetError(COMP_HandleTypeDef *hcomp);
636 /**
637   * @}
638   */
639 
640 /**
641   * @}
642   */
643 
644 /**
645   * @}
646   */
647 
648 /**
649   * @}
650   */
651 
652 #ifdef __cplusplus
653 }
654 #endif
655 
656 #endif /* __STM32L1xx_HAL_COMP_H */
657 
658 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
659