Subversion Repositories DashDisplay

Rev

Rev 56 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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