/************************************************************************************************/
/**
* @file               std_comp.c
* @author             MCU Ecosystem Development Team
* @brief              COMP STD库驱动。
*                     实现COMP初始化配置等功能API。
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/

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

/**
* @addtogroup COMP 
* @{
*
*/
/************************************************************************************************/


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

#ifdef STD_COMP_PERIPHERAL_USED
/*------------------------------------------functions-------------------------------------------*/

/************************************************************************************************/
/**
* @addtogroup COMP_External_Functions 
* @{
*
*/
/************************************************************************************************/

/** 
* @brief  COMP初始化
* @param  compx COMP外设
* @param  comp_init_param COMP初始化结构体
* @retval 无
*/
void std_comp_init(COMP_t *compx, std_comp_init_t *comp_init_param)
{
    /* 设置COMP正相输入 */
    std_comp_set_input_plus(compx, comp_init_param->inpsel);
    /* 设置COMP反相输入 */
    std_comp_set_input_minus(compx, comp_init_param->inmsel);
    /* 设置COMP响应速度 */
    std_comp_set_speed_mode(compx, comp_init_param->speed);
    /* 设置COMP迟滞模式 */
    std_comp_set_input_hysteresis(compx, comp_init_param->hyst);
    /* 输出极性配置 */
    std_comp_set_output_polarity(compx, comp_init_param->outpol);
    /* 设置COMP中断类型 */
    std_comp_set_interrupt_type(compx, comp_init_param->interrupt_type);
    
    if (COMP_FILTER_ENABLE == comp_init_param->filter_enable)
    {
        /* 配置COMP的数字滤波时钟 */
        std_comp_set_filter_clock(compx, comp_init_param->filter_clock);
        /* 配置COMP的数字滤波时间 */
        std_comp_set_output_filter_time(compx, comp_init_param->filter_time);        
        /* 使能COMP滤波 */
        std_comp_output_filter_enable(compx);
    }
    else
    {
        /* 禁止COMP滤波 */
        std_comp_output_filter_disable(compx);        
    }
}

/** 
* @brief  COMP结构体初始化
* @param  comp_init_struct COMP初始化结构体
* @retval 无
*/
void std_comp_struct_init(std_comp_init_t *comp_init_struct)
{
    comp_init_struct->inpsel          = COMP_INPSEL_VRDAC_OUT;
    comp_init_struct->inmsel          = COMP_INMSEL_VRDAC_OUT;
    comp_init_struct->speed           = COMP_LOWSPEED;
    comp_init_struct->hyst            = COMP_HYST_DISABLE;
    comp_init_struct->outpol          = COMP_OUTPOL_NON_INVERTED;
    comp_init_struct->interrupt_type  = COMP_INTERRUPT_TYPE_NONE;
    comp_init_struct->filter_clock    = COMP_FLTCLK_PCLK;
    comp_init_struct->filter_enable   = COMP_FILTER_DISABLE;
    comp_init_struct->filter_time     = COMP_FLTIME_2CYCLE;
}

/** 
* @brief  COMP去初始化
* @param  compx COMP外设
* @retval 无
*/
void std_comp_deinit(COMP_t *compx)
{
    /* 禁止COMP */
    std_comp_disable(compx);
    /* 复位COMP外设 */
    compx->CSR1 = 0x00000000U;
    compx->CSR2 = 0x00000000U;
    /* 清除中断标志 */
    compx->SR = COMP_SR_INTF; 
}

/** 
* @} 
*/

#endif /* STD_COMP_PERIPHERAL_USED */

/** 
* @} 
*/

/** 
* @} 
*/
