/************************************************************************************************/
/**
* @file               std_comp.h
* @author             MCU Ecosystem Development Team
* @brief              COMP STD库驱动头文件。
*                     提供COMP相关的STD库操作函数声明、数据类型以及常量的定义。                         
*                     
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/

/* 避免头文件重复引用 */
#ifndef STD_COMP_H
#define STD_COMP_H

/************************************************************************************************/
/** 
* @addtogroup STD_Driver
* @{
*/

/**
* @defgroup COMP COMP
* @brief 比较器的STD库驱动
* @{
*/
/************************************************************************************************/

#ifdef __cplusplus
 extern "C" {
#endif

/*------------------------------------------includes--------------------------------------------*/
#include "std_common.h"

/*-----------------------------------------type define------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup COMP_Types  COMP Types 
* @brief    COMP数据类型定义
* @{
*/
/************************************************************************************************/
/**
* @brief  COMP参数配置结构体定义
*/
typedef struct
{
    uint32_t inpsel;             /**< COMP正相输入                   
                                          @arg COMP_INPSEL_VRDAC_OUT ... */

    uint32_t inmsel;             /**< COMP反相输入                   
                                          @arg COMP_INMSEL_IO1 ... */ 

    uint32_t speed;              /**< COMP响应速度，响应速度越快，功耗越大。可设置为低速、高速两种模式。
                                          @arg COMP_LOWSPEED ... */

    uint32_t hyst;               /**< COMP迟滞模式，可以禁止迟滞，或者使能迟滞。
                                          @arg COMP_HYST_DISABLE ... */

    uint32_t outpol;             /**< COMP输出极性，可设置”输出反相”。
                                          @arg COMP_OUTPOL_INVERTED ... */
                                          
    uint32_t interrupt_type;     /**< COMP中断类型 
                                           @arg COMP_INTERRUPT_TYPE_NONE ... */
                                           
    uint32_t filter_clock;       /**< COMP数字滤波时钟
                                           @arg COMP_FLTCLK_PCLK ... */
                                           
    uint32_t filter_enable;      /**< COMP数字滤波使能
                                           @arg COMP_FILTER_ENABLE ... */
                                           
    uint32_t filter_time;        /**< COMP数字滤波时间配置
                                           @arg COMP_FLTIME_2CYCLE ...  */
} std_comp_init_t;

/**
* @}
*/

/*--------------------------------------------define--------------------------------------------*/

/************************************************************************************************/
/**
* @defgroup COMP_Constants COMP Constants 
* @brief  COMP常量定义及宏定义
* @{
*
*/
/************************************************************************************************/
/* 比较器RDAC输出分压 */     
#define COMP_RDAC_DIV_1DIV8                    COMP_CR_RDACDIV_1DIV8         /**< RDAC 分压选择1/8    */
#define COMP_RDAC_DIV_2DIV8                    COMP_CR_RDACDIV_2DIV8         /**< RDAC 分压选择2/8    */     
#define COMP_RDAC_DIV_3DIV8                    COMP_CR_RDACDIV_3DIV8         /**< RDAC 分压选择3/8    */     
#define COMP_RDAC_DIV_4DIV8                    COMP_CR_RDACDIV_4DIV8         /**< RDAC 分压选择4/8    */     
#define COMP_RDAC_DIV_5DIV8                    COMP_CR_RDACDIV_5DIV8         /**< RDAC 分压选择5/8    */
#define COMP_RDAC_DIV_6DIV8                    COMP_CR_RDACDIV_6DIV8         /**< RDAC 分压选择6/8    */
#define COMP_RDAC_DIV_7DIV8                    COMP_CR_RDACDIV_7DIV8         /**< RDAC 分压选择7/8    */
#define COMP_RDAC_DIV_8DIV8                    COMP_CR_RDACDIV_8DIV8         /**< RDAC 分压选择8/8    */

/* 比较器正相输入 */
#define COMP_INPSEL_VRDAC_OUT                  COMP_CSR1_INP_VRDAC_OUT       /**< 正相输入 VRDAC_OUT                 */
#define COMP_INPSEL_IO1                        COMP_CSR1_INP_IO1             /**< 正相输入 COMP1 = PA9, COMP2 = PA0  */
#define COMP_INPSEL_IO2                        COMP_CSR1_INP_IO2             /**< 正相输入 COMP1 = PB3, COMP2 = PA11 */
#define COMP_INPSEL_IO3                        COMP_CSR1_INP_IO3             /**< 正相输入 COMP1 = PB4               */
                                               
/* 比较器反相输入 */
#define COMP_INMSEL_VRDAC_OUT                  COMP_CSR1_INM_VRDAC_OUT       /**< 反相输入 VRDAC_OUT    */
#define COMP_INMSEL_IO1                        COMP_CSR1_INM_IO1             /**< 反相输入 COMP2 = PF1  */ 
#define COMP_INMSEL_IO2                        COMP_CSR1_INM_IO2             /**< 反相输入 COMP1 = PF2  */ 

/* 比较器正相输入模式选择，可用于选择窗口比较器功能 */
#define COMP_INPMODE_EACH_INPUT                (0x00000000U)                 /**< 正相输入各自独立，由各自inpsel决定 */
#define COMP_INPMODE_COMMON_INPUT              COMP_CSR1_INPMOD              /**< 正相输入相互连接，即窗口比较器模式 */
                                                                   
/* 比较器响应速度 */                                                
#define COMP_LOWSPEED                          COMP_CSR1_LOW_SPEED           /**< 响应速度模式 低速   */
#define COMP_HIGHSPEED                         COMP_CSR1_HIGH_SPEED          /**< 响应速度模式 高速   */
                                                                   
/* 比较器迟滞模式*/            
#define COMP_HYST_DISABLE                      (0x00000000U)                 /**< 禁止迟滞功能       */
#define COMP_HYST_ENABLE                       COMP_CSR1_HYST                /**< 使能迟滞功能：30mV */
                                                                   
/* 比较器滤波时钟 */                                                
#define COMP_FLTCLK_PCLK                       COMP_CSR1_FLTCLK_PCLK         /**< 滤波时钟 PCLK   */
#define COMP_FLTCLK_RCL                        COMP_CSR1_FLTCLK_RCL          /**< 滤波时钟 RCL    */
#define COMP_FLTCLK_LXTAL                      COMP_CSR1_FLTCLK_LXTAL        /**< 滤波时钟 LXTAL  */
                                     
/* 比较器滤波使能 */                  
#define COMP_FILTER_DISABLE                    (0x00000000U)                 /**< 比较器滤波禁止 */
#define COMP_FILTER_ENABLE                     COMP_CSR1_FLTEN               /**< 比较器滤波使能 */

/* 比较器滤波时间 */
#define COMP_FLTIME_2CYCLE                     COMP_CSR1_FLTIME_2CYCLE       /**< 滤波时间 2个CYCLE    */
#define COMP_FLTIME_4CYCLE                     COMP_CSR1_FLTIME_4CYCLE       /**< 滤波时间 4个CYCLE    */
#define COMP_FLTIME_8CYCLE                     COMP_CSR1_FLTIME_8CYCLE       /**< 滤波时间 8个CYCLE    */
#define COMP_FLTIME_16CYCLE                    COMP_CSR1_FLTIME_16CYCLE      /**< 滤波时间 16个CYCLE   */
#define COMP_FLTIME_32CYCLE                    COMP_CSR1_FLTIME_32CYCLE      /**< 滤波时间 32个CYCLE   */
#define COMP_FLTIME_64CYCLE                    COMP_CSR1_FLTIME_64CYCLE      /**< 滤波时间 64个CYCLE   */
#define COMP_FLTIME_256CYCLE                   COMP_CSR1_FLTIME_256CYCLE     /**< 滤波时间 256个CYCLE  */
#define COMP_FLTIME_1024CYCLE                  COMP_CSR1_FLTIME_1024CYCLE    /**< 滤波时间 1024个CYCLE */

/* 比较器输出极性 */
#define COMP_OUTPOL_NON_INVERTED               (0x00000000U)                 /**< 输出状态不反相 */
#define COMP_OUTPOL_INVERTED                   COMP_CSR1_POL                 /**< 输出状态反相   */

/* 比较器输出选择 */
#define COMP_OUTMODE_EACH_OUT                  (0x00000000U)                 /**< 输出为其原始电压比较结果         */
#define COMP_OUTMODE_COMMON_XOR_OUT            COMP_CSR1_OUTMOD              /**< 输出为比较器1、2电压比较结果异或 */

/* 比较器输出结果 */
#define COMP_OUTPUT_LEVEL_LOW                  (0x00000000UL)                /**< 比较器输出电平低 */
#define COMP_OUTPUT_LEVEL_HIGH                 (0x00000001UL)                /**< 比较器输出电平高 */

/* 等待COMP使能启动时间，启动时间典型值参考数据手册(COMP特性的tSTART参数) 
   响应速度模式为高速, 使能启动时间1US
   响应速度模式为低速, 使能启动时间11US
*/
#define COMP_EN_DELAY                          (11U)                          /**< COMP使能启动时间 */

/* COMP使能方式*/
#define COMP_ENABLE_SEL_SOFTWARE               (COMP_CSR2_ENSEL_EN)          /**< 由CSR1 EN位使能                                 */
#define COMP_ENABLE_SEL_TIM3_OC1               (COMP_CSR2_ENSEL_TIM3_OC1)    /**< 由TIM3 OC1的PWM输出使能，低电平使能，高电平禁止 */
#define COMP_ENABLE_SEL_TIM3_OC2               (COMP_CSR2_ENSEL_TIM3_OC2)    /**< 由TIM3 OC2的PWM输出使能，低电平使能，高电平禁止 */   

/* COMP中断类型 */
#define COMP_INTERRUPT_TYPE_NONE               (0x00000000UL)                           /**< 无触发中断            */
#define COMP_INTERRUPT_TYPE_RISING             (COMP_CSR2_RISEEN)                       /**< 上降沿触发中断        */
#define COMP_INTERRUPT_TYPE_FALLING            (COMP_CSR2_FALLEN)                       /**< 下降沿触发中断        */
#define COMP_INTERRUPT_TYPE_RISING_FALLING     (COMP_CSR2_RISEEN | COMP_CSR2_FALLEN)    /**< 上升沿/下降沿触发中断 */

/** 
* @} 
*/

/*-------------------------------------------functions------------------------------------------*/

/************************************************************************************************/
/**
* @defgroup COMP_External_Functions COMP External Functions
* @brief    COMP对外函数
* @{
*
*/
/************************************************************************************************/
/** 
* @brief  设置RDAC 输出8级分压
* @param  rdac_div RDAC 8级分压
*             @arg COMP_RDAC_DIV_1DIV8
*             @arg COMP_RDAC_DIV_2DIV8
*             @arg ...
*             @arg COMP_RDAC_DIV_8DIV8
* @retval 无
*/
__STATIC_INLINE void std_comp_set_rdac_div(uint32_t rdac_div)
{
    MODIFY_REG(COMP_COMMON->CR, COMP_CR_RDACDIV, rdac_div);
}

/** 
* @brief  获取RDAC 输出8级分压
* @retval uint32_t 返回 RDAC 8级分压
*             @arg COMP_RDAC_DIV_1DIV8
*             @arg COMP_RDAC_DIV_2DIV8
*             @arg ...
*             @arg COMP_RDAC_DIV_8DIV8
*/
__STATIC_INLINE uint32_t std_comp_get_rdac_div(void)
{
    return (COMP_COMMON->CR & COMP_CR_RDACDIV);
}

/** 
* @brief  使能COMP RDAC
* @retval 无
*/
__STATIC_INLINE void std_comp_rdac_enable(void)
{
    COMP_COMMON->CR |= (COMP_CR_RDACEN);
}

/** 
* @brief  禁止COMP RDAC
* @retval 无
*/
__STATIC_INLINE void std_comp_rdac_disable(void)
{
    COMP_COMMON->CR &= (~COMP_CR_RDACEN);
}

/** 
* @brief  使能COMP
* @param  compx COMP外设
* @retval 无
*/
__STATIC_INLINE void std_comp_enable(COMP_t *compx)
{
    compx->CSR1 |= (COMP_CSR1_EN);
}

/** 
* @brief  禁止COMP
* @param  compx COMP外设
* @retval 无
*/
__STATIC_INLINE void std_comp_disable(COMP_t *compx)
{
    compx->CSR1 &= (~COMP_CSR1_EN);
}

/** 
* @brief  设置COMP反相输入
* @param  compx COMP外设
* @param  input_minus 反相输入选择
*             @arg COMP_INMSEL_VRDAC_OUT
*             @arg COMP_INMSEL_IO1
*             @arg COMP_INMSEL_IO2
* @retval 无
*/
__STATIC_INLINE void std_comp_set_input_minus(COMP_t *compx, uint32_t input_minus)
{
    COMP_COMMON->CR |= COMP_CR_VCSEL;
    MODIFY_REG(compx->CSR1, COMP_CSR1_INM, input_minus);
}

/** 
* @brief  获取COMP反相输入
* @param  compx COMP外设
* @retval uint32_t 返回反相输入
*             @arg COMP_INMSEL_VRDAC_OUT
*             @arg COMP_INMSEL_IO1
*             @arg COMP_INMSEL_IO2
*/
__STATIC_INLINE uint32_t std_comp_get_input_minus(COMP_t *compx)
{
    return(compx->CSR1 & COMP_CSR1_INM);
}

/** 
* @brief  设置COMP正相输入
* @param  compx COMP外设
* @param  input_plus 正相输入选择
*             @arg COMP_INPSEL_VRDAC_OUT
*             @arg COMP_INPSEL_IO1
*             @arg COMP_INPSEL_IO2
*             @arg COMP_INPSEL_IO3
* @retval 无
*/
__STATIC_INLINE void std_comp_set_input_plus(COMP_t *compx, uint32_t input_plus)
{
    COMP_COMMON->CR |= COMP_CR_VCSEL;
    MODIFY_REG(compx->CSR1, COMP_CSR1_INP, input_plus);
}

/** 
* @brief  获取COMP正相输入
* @param  compx COMP外设
* @retval uint32_t 返回正相输入
*             @arg COMP_INPSEL_VRDAC_OUT
*             @arg COMP_INPSEL_IO1      
*             @arg COMP_INPSEL_IO2      
*             @arg COMP_INPSEL_IO3      
*/
__STATIC_INLINE uint32_t std_comp_get_input_plus(COMP_t *compx)
{
    return(compx->CSR1 & COMP_CSR1_INP);
}

/** 
* @brief  设置COMP正相输入模式
* @param  compx COMP外设
* @param  input_mode 正相输入模式选择
*             @arg COMP_INPMODE_EACH_INPUT
*             @arg COMP_INPMODE_COMMON_INPUT
* @retval 无
*/
__STATIC_INLINE void std_comp_set_input_plus_mode(COMP_t *compx, uint32_t input_mode)
{
    MODIFY_REG(compx->CSR1, COMP_CSR1_INPMOD, input_mode);
}

/** 
* @brief  设置COMP输出模式
* @param  compx COMP外设
* @param  output_mode 输出模式选择
*             @arg COMP_OUTMODE_EACH_OUT
*             @arg COMP_OUTMODE_COMMON_XOR_OUT
* @retval 无
*/
__STATIC_INLINE void std_comp_set_output_mode(COMP_t *compx, uint32_t output_mode)
{
    MODIFY_REG(compx->CSR1, COMP_CSR1_OUTMOD, output_mode);
}

/** 
* @brief  设置COMP输出极性
* @param  compx COMP外设
* @param  output_polarity 输出极性选择
*             @arg COMP_OUTPOL_NON_INVERTED
*             @arg COMP_OUTPOL_INVERTED
* @retval 无
*/
__STATIC_INLINE void std_comp_set_output_polarity(COMP_t *compx, uint32_t output_polarity)
{
    MODIFY_REG(compx->CSR1, COMP_CSR1_POL, output_polarity);
}

/** 
* @brief  获取COMP输出极性
* @param  compx COMP外设
* @retval uint32_t 返回输出极性
*             @arg COMP_OUTPOL_NON_INVERTED
*             @arg COMP_OUTPOL_INVERTED
*/
__STATIC_INLINE uint32_t std_comp_get_output_polarity(COMP_t *compx)
{
    return(compx->CSR1 & COMP_CSR1_POL);
}

/** 
* @brief  设置COMP迟滞模式
* @param  compx COMP外设
* @param  input_hysteresis 迟滞模式选择
*             @arg COMP_HYST_DISABLE
*             @arg COMP_HYST_ENABLE 
* @retval 无
*/
__STATIC_INLINE void std_comp_set_input_hysteresis(COMP_t *compx, uint32_t input_hysteresis)
{
    MODIFY_REG(compx->CSR1, COMP_CSR1_HYST, input_hysteresis);
}

/** 
* @brief  设置COMP响应速度模式
* @param  compx COMP外设
* @param  speed_mode 响应速度
*             @arg COMP_LOWSPEED
*             @arg COMP_HIGHSPEED
* @retval 无
*/
__STATIC_INLINE void std_comp_set_speed_mode(COMP_t *compx, uint32_t speed_mode)
{
    MODIFY_REG(compx->CSR1, COMP_CSR1_SPEED, speed_mode);
}

/** 
* @brief  设置COMP滤波时钟源
* @param  compx COMP外设
* @param  clock_source 滤波时钟源
*             @arg COMP_FLTCLK_PCLK 
*             @arg COMP_FLTCLK_RCL  
*             @arg COMP_FLTCLK_LXTAL
* @retval 无
*/
__STATIC_INLINE void std_comp_set_filter_clock(COMP_t *compx, uint32_t clock_source)
{
    MODIFY_REG(compx->CSR1, COMP_CSR1_FLTCLK, clock_source);
}

/** 
* @brief  获取COMP滤波时钟源
* @param  compx COMP外设
* @retval uint32_t 滤波时钟源
*             @arg COMP_FLTCLK_PCLK 
*             @arg COMP_FLTCLK_RCL  
*             @arg COMP_FLTCLK_LXTAL
*/
__STATIC_INLINE uint32_t std_comp_get_filter_clock(COMP_t *compx)
{
       return (compx->CSR1 & COMP_CSR1_FLTCLK);
}

/** 
* @brief  设置COMP输出滤波时间
* @param  compx COMP外设
* @param  filter_time 滤波时间选择
*             @arg COMP_FLTIME_2CYCLE
*             @arg COMP_FLTIME_4CYCLE
*             @arg ...
*             @arg COMP_FLTIME_1024CYCLE
* @retval 无
*/
__STATIC_INLINE void std_comp_set_output_filter_time(COMP_t *compx, uint32_t filter_time)
{
    MODIFY_REG(compx->CSR1, COMP_CSR1_FLTIME, filter_time);
}

/** 
* @brief  COMP输出滤波使能
* @param  compx COMP外设
* @retval 无
*/
__STATIC_INLINE void std_comp_output_filter_enable(COMP_t *compx)
{
    compx->CSR1 |= (COMP_CSR1_FLTEN);
}

/** 
* @brief  COMP输出滤波禁止
* @param  compx COMP外设
* @retval 无
*/
__STATIC_INLINE void std_comp_output_filter_disable(COMP_t *compx)
{
    compx->CSR1 &= (~COMP_CSR1_FLTEN);
}

/** 
* @brief  获取COMP使能状态
* @param  compx COMP外设
* @retval bool 返回逻辑表达式的判断结果
*             @arg true: 表示COMP已使能
*             @arg false:表示COMP未使能
*/
__STATIC_INLINE bool std_comp_get_enable_status(COMP_t *compx)
{
    return ((compx->CSR1 & COMP_CSR1_EN) == COMP_CSR1_EN);
}

/** 
* @brief  获取COMP输出结果
* @param  compx COMP外设
* @retval uint32_t 返回COMP输出结果
*             @arg COMP_OUTPUT_LEVEL_LOW
*             @arg COMP_OUTPUT_LEVEL_HIGH
*/
__STATIC_INLINE uint32_t std_comp_get_output_result(COMP_t *compx)
{
    return ((compx->CSR1 & COMP_CSR1_VAL) >> COMP_CSR1_VAL_POS);
}

/** 
* @brief  配置COMP使能方式
* @param  compx COMP外设
* @param  enable_type COMP使能方式
*             @arg COMP_ENABLE_SEL_SOFTWARE
*             @arg COMP_ENABLE_SEL_TIM3_OC1
*             @arg COMP_ENABLE_SEL_TIM3_OC2
* @note   当比较器使能通过TIM3_OCx的PWM输出控制，CSR1寄存器EN位无效。
* @retval 无
*/
__STATIC_INLINE void std_comp_set_enable_mode(COMP_t *compx,uint32_t enable_type)
{
    MODIFY_REG(compx->CSR2, COMP_CSR2_ENSEL, enable_type);
}

/**
* @brief  获取COMP使能方式
* @param  compx COMP外设
* @retval uint32_t COMP使能方式
*             @arg COMP_ENABLE_SEL_SOFTWARE   
*             @arg COMP_ENABLE_SEL_TIM3_OC1
*             @arg COMP_ENABLE_SEL_TIM3_OC2
*/
__STATIC_INLINE uint32_t  std_comp_get_enable_mode(COMP_t *compx)         
{
    return (compx->CSR2 & COMP_CSR2_ENSEL);
}

/**
* @brief  配置COMP中断类型
* @param  compx COMP外设
* @param  interrupt_type 中断类型
*             @arg COMP_INTERRUPT_TYPE_NONE          
*             @arg COMP_INTERRUPT_TYPE_RISING         
*             @arg COMP_INTERRUPT_TYPE_FALLING        
*             @arg COMP_INTERRUPT_TYPE_RISING_FALLING 
* @retval 无
*/
__STATIC_INLINE void std_comp_set_interrupt_type(COMP_t *compx, uint32_t interrupt_type)
{
    MODIFY_REG(compx->CSR2, COMP_CSR2_FALLEN | COMP_CSR2_RISEEN, interrupt_type);
}

/**
* @brief  获取COMP中断类型
* @param  compx COMP外设
* @retval uint32_t 返回COMP中断类型
*             @arg COMP_INTERRUPT_TYPE_NONE          
*             @arg COMP_INTERRUPT_TYPE_RISING         
*             @arg COMP_INTERRUPT_TYPE_FALLING        
*             @arg COMP_INTERRUPT_TYPE_RISING_FALLING 
*/
__STATIC_INLINE uint32_t  std_comp_get_interrupt_type(COMP_t *compx)         
{
    return (compx->CSR2 & (COMP_CSR2_RISEEN | COMP_CSR2_FALLEN));
}

/**
* @brief  使能COMP中断
* @param  compx COMP外设
* @retval 无
*/
__STATIC_INLINE void std_comp_interrupt_enable(COMP_t *compx)
{
    compx->CSR2 |= (COMP_CSR2_IE);
}

/**
* @brief  禁止COMP中断
* @param  compx COMP外设
* @retval 无
*/
__STATIC_INLINE void std_comp_interrupt_disable(COMP_t *compx)
{
    compx->CSR2 &= (~COMP_CSR2_IE);
}

/** 
* @brief  获取COMP中断使能状态
* @param  compx COMP外设
* @retval bool 返回逻辑表达式的判断结果
*             @arg true: 表示中断使能
*             @arg false:表示中断未使能
*/

__STATIC_INLINE bool std_comp_get_interrupt_enable(COMP_t *compx)
{
    return((compx->CSR2 & (COMP_CSR2_IE)) == (COMP_CSR2_IE));
}


/**
* @brief  获取COMP中断标记
* @param  compx COMP外设
* @retval bool 返回逻辑表达式的判断结果
*             @arg true: 表示COMP中断状态置位 
*             @arg false:表示COMP中断状态未置位
*/
__STATIC_INLINE bool std_comp_get_interrupt_flag(COMP_t *compx)
{
    return ((compx->SR & (COMP_SR_INTF)) == (COMP_SR_INTF));
}

/**
* @brief  清除COMP中断标志
* @param  compx COMP外设
* @retval 无
*/
__STATIC_INLINE void std_comp_clear_interrupt_flag(COMP_t *compx)
{
    compx->SR = COMP_SR_INTF;
}

/**
* @brief  使能COMP停止TIM3 OC1的PWM输出
* @param  compx COMP外设
* @retval 无
*/
__STATIC_INLINE void std_comp_stop_tim3_oc1_enable(COMP_t *compx)
{
    compx->CSR2 |= (COMP_CSR2_TIMSTOP1);
}

/**
* @brief  禁止COMP停止TIM3 OC1的PWM输出
* @param  compx COMP外设
* @retval 无
*/
__STATIC_INLINE void std_comp_stop_tim3_oc1_disable(COMP_t *compx)
{
    compx->CSR2 &= (~COMP_CSR2_TIMSTOP1);
}

/**
* @brief  使能COMP停止TIM3 OC2的PWM输出
* @param  compx COMP外设
* @retval 无
*/
__STATIC_INLINE void std_comp_stop_tim3_oc2_enable(COMP_t *compx)
{
    compx->CSR2 |= (COMP_CSR2_TIMSTOP2);
}

/**
* @brief  禁止COMP停止TIM3 OC2的PWM输出
* @param  compx COMP外设
* @retval 无
*/
__STATIC_INLINE void std_comp_stop_tim3_oc2_disable(COMP_t *compx)
{
    compx->CSR2 &= (~COMP_CSR2_TIMSTOP2);
}

/* COMP初始化函数 */
void std_comp_init(COMP_t *compx, std_comp_init_t *comp_init_param);
/* COMP结构体初始化函数 */
void std_comp_struct_init(std_comp_init_t *comp_init_struct);
/* COMP去初始化函数 */
void std_comp_deinit(COMP_t *compx);

/**
* @}
*/

#ifdef __cplusplus
}
#endif

/**
* @}
*/


/**
* @}
*/

#endif /* STD_COMP_H */
