/************************************************************************************************/ /** * @file ciu32l051_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 CIU32L051_STD_COMP_H #define CIU32L051_STD_COMP_H /************************************************************************************************/ /** * @addtogroup CIU32L051_STD_Driver * @{ */ /** * @defgroup COMP COMP * @brief 比较器的STD库驱动 * @{ */ /************************************************************************************************/ #ifdef __cplusplus extern "C" { #endif /*------------------------------------------includes--------------------------------------------*/ #include "ciu32l051_std_common.h" /*-----------------------------------------type define------------------------------------------*/ /************************************************************************************************/ /** * @defgroup COMP_Types COMP Types * @brief COMP数据类型定义 * @{ */ /************************************************************************************************/ /** * @brief COMP参数配置结构体定义 */ typedef struct { uint32_t inpsel; /**< COMP正相输入 @arg COMP_INPSEL_IO1 ... */ uint32_t inmsel; /**< COMP反相输入 @arg COMP_INMSEL_VBGR ... */ uint32_t speed; /**< COMP响应速度,响应速度越快,功耗越大。可设置为超低速、低速、中速、高速四种模式。 @arg COMP_VERYLOWSPEED ... */ uint32_t hyst; /**< COMP迟滞模式,可以禁止迟滞,或者设置迟滞电压为10mV、20mV、30mV。 @arg COMP_HYST_NONE ... */ uint32_t outpol; /**< COMP输出极性,可设置输出状态”反相”。 @arg COMP_OUTPOL_INVERTED ... */ } std_comp_init_t; /** * @} */ /*--------------------------------------------define--------------------------------------------*/ /************************************************************************************************/ /** * @defgroup COMP_Constants COMP Constants * @brief COMP常量定义及宏定义 * @{ * */ /************************************************************************************************/ /* 比较器正相输入 */ #define COMP_INPSEL_IO1 COMP_CSR_INP_IO1 /**< 正相输入 COMP1 = PC4, COMP2 = PA1 */ #define COMP_INPSEL_IO2 COMP_CSR_INP_IO2 /**< 正相输入 COMP1 = PA5, COMP2 = PD5 */ #define COMP_INPSEL_IO3 COMP_CSR_INP_IO3 /**< 正相输入 COMP1 = PB2 */ #define COMP_INPSEL_IO4 COMP_CSR_INP_IO4 /**< 正相输入 COMP1 = PA8 */ /* 比较器反相输入 */ #define COMP_INMSEL_VBGR COMP_CSR_INM_VBGR /**< 反相输入 VBGR */ #define COMP_INMSEL_6BIT_DAC COMP_CSR_INM_6BIT_DAC /**< 反相输入 6BIT_DAC */ #define COMP_INMSEL_IO1 COMP_CSR_INM_IO1 /**< 反相输入 COMP1 = PC3, COMP2 = PA2 */ #define COMP_INMSEL_IO2 COMP_CSR_INM_IO2 /**< 反相输入 COMP1 = PA4, COMP2 = PD4 */ #define COMP_INMSEL_IO3 COMP_CSR_INM_IO3 /**< 反相输入 COMP1 = PB1 */ #define COMP_INMSEL_IO4 COMP_CSR_INM_IO4 /**< 反相输入 COMP1 = PA9 */ /* 比较器正相输入模式选择,可用于选择窗口比较器功能 */ #define COMP_INPMODE_EACH_INPUT (0x00000000U) /**< 正相输入各自独立,由各自inpsel决定 */ #define COMP_INPMODE_COMMON_INPUT COMP_CSR_INPMOD /**< 正相输入相互连接,即窗口比较器模式 */ /* 比较器响应速度 */ #define COMP_VERYLOWSPEED COMP_CSR_VERY_LOW_SPEED /**< 响应速度模式 超低速 */ #define COMP_LOWSPEED COMP_CSR_LOW_SPEED /**< 响应速度模式 低速 */ #define COMP_MEDIUMSPEED COMP_CSR_MEDIUM_SPEED /**< 响应速度模式 中速 */ #define COMP_HIGHSPEED COMP_CSR_HIGH_SPEED /**< 响应速度模式 高速 */ /* 比较器迟滞模式 */ #define COMP_HYST_NONE COMP_CSR_HYST_NONE /**< 迟滞模式:无迟滞 */ #define COMP_HYST_LOW COMP_CSR_HYST_LOW /**< 迟滞模式:10mV */ #define COMP_HYST_MEDIUM COMP_CSR_HYST_MEDIUM /**< 迟滞模式:20mV */ #define COMP_HYST_HIGH COMP_CSR_HYST_HIGH /**< 迟滞模式:30mV */ /* 比较器滤波使能 */ #define COMP_FILTER_DISABLE (0x00000000U) /**< 比较器滤波禁止 */ #define COMP_FILTER_ENABLE COMP_CSR_FLTEN /**< 比较器滤波使能 */ /* 比较器滤波时间 */ #define COMP_FLTIME_2CYCLE COMP_CSR_FLTIME_2CYCLE /**< 滤波时间 2个CYCLE */ #define COMP_FLTIME_4CYCLE COMP_CSR_FLTIME_4CYCLE /**< 滤波时间 4个CYCLE */ #define COMP_FLTIME_8CYCLE COMP_CSR_FLTIME_8CYCLE /**< 滤波时间 8个CYCLE */ #define COMP_FLTIME_16CYCLE COMP_CSR_FLTIME_16CYCLE /**< 滤波时间 16个CYCLE */ #define COMP_FLTIME_32CYCLE COMP_CSR_FLTIME_32CYCLE /**< 滤波时间 32个CYCLE */ #define COMP_FLTIME_64CYCLE COMP_CSR_FLTIME_64CYCLE /**< 滤波时间 64个CYCLE */ #define COMP_FLTIME_128CYCLE COMP_CSR_FLTIME_128CYCLE /**< 滤波时间 128个CYCLE */ #define COMP_FLTIME_256CYCLE COMP_CSR_FLTIME_256CYCLE /**< 滤波时间 256个CYCLE */ /* 比较器输出极性 */ #define COMP_OUTPOL_NON_INVERTED (0x00000000U) /**< 输出状态不反相 */ #define COMP_OUTPOL_INVERTED COMP_CSR_POL /**< 输出状态反相 */ /* 比较器输出选择 */ #define COMP_OUTMODE_EACH_OUT (0x00000000U) /**< 输出为其原始电压比较结果 */ #define COMP_OUTMODE_COMMON_XOR_OUT COMP_CSR_OUTMOD /**< 输出为比较器1、2电压比较结果异或 */ /* 比较器输出结果 */ #define COMP_OUTPUT_LEVEL_LOW (0x00000000UL) /**< 比较器输出电平低 */ #define COMP_OUTPUT_LEVEL_HIGH (0x00000001UL) /**< 比较器输出电平高 */ /* 等待COMP1使能启动时间 响应速度模式为高 速 使能启动时间23US 响应速度模式为中 速 使能启动时间24US 响应速度模式为低 速 使能启动时间30US 响应速度模式为超低速 使能启动时间39US */ #define COMP_EN_DELAY (30U) /**< COMP使能启动时间 */ /** * @} */ /*-------------------------------------------functions------------------------------------------*/ /************************************************************************************************/ /** * @defgroup COMP_External_Functions COMP External Functions * @brief COMP对外函数 * @{ * */ /************************************************************************************************/ /** * @brief 使能COMP * @param compx COMP外设 * @retval 无 */ __STATIC_INLINE void std_comp_enable(COMP_t *compx) { compx->CSR |= (COMP_CSR_EN); } /** * @brief 禁止COMP * @param compx COMP外设 * @retval 无 */ __STATIC_INLINE void std_comp_disable(COMP_t *compx) { compx->CSR &= (~COMP_CSR_EN); } /** * @brief 设置COMP反相输入 * @param compx COMP外设 * @param input_minus 反相输入选择 * @arg COMP_INMSEL_VBGR * @arg COMP_INMSEL_6BIT_DAC * @arg COMP_INMSEL_IO1 * @arg COMP_INMSEL_IO2 * @arg COMP_INMSEL_IO3 * @arg COMP_INMSEL_IO4 * @retval 无 */ __STATIC_INLINE void std_comp_set_input_minus(COMP_t *compx, uint32_t input_minus) { MODIFY_REG(compx->CSR, COMP_CSR_INM, input_minus); } /** * @brief 获取COMP反相输入 * @param compx COMP外设 * @retval uint32_t 返回反相输入 * @arg COMP_INMSEL_VBGR * @arg COMP_INMSEL_6BIT_DAC * @arg COMP_INMSEL_IO1 * @arg COMP_INMSEL_IO2 * @arg COMP_INMSEL_IO3 * @arg COMP_INMSEL_IO4 */ __STATIC_INLINE uint32_t std_comp_get_input_minus(COMP_t *compx) { return(compx->CSR & COMP_CSR_INM); } /** * @brief 设置COMP正相输入 * @param compx COMP外设 * @param input_plus 正相输入选择 * @arg COMP_INPSEL_IO1 * @arg COMP_INPSEL_IO2 * @arg COMP_INPSEL_IO3 * @arg COMP_INPSEL_IO4 * @retval 无 */ __STATIC_INLINE void std_comp_set_input_plus(COMP_t *compx, uint32_t input_plus) { MODIFY_REG(compx->CSR, COMP_CSR_INP, input_plus); } /** * @brief 获取COMP正相输入 * @param compx COMP外设 * @retval uint32_t 返回正相输入 * @arg COMP_INPSEL_IO1 * @arg COMP_INPSEL_IO2 * @arg COMP_INPSEL_IO3 * @arg COMP_INPSEL_IO4 */ __STATIC_INLINE uint32_t std_comp_get_input_plus(COMP_t *compx) { return(compx->CSR & COMP_CSR_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->CSR, COMP_CSR_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->CSR, COMP_CSR_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->CSR, COMP_CSR_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->CSR & COMP_CSR_POL); } /** * @brief 设置COMP迟滞模式 * @param compx COMP外设 * @param input_hysteresis 迟滞模式选择 * @arg COMP_HYST_NONE * @arg COMP_HYST_LOW * @arg COMP_HYST_MEDIUM * @arg COMP_HYST_HIGH * @retval 无 */ __STATIC_INLINE void std_comp_set_input_hysteresis(COMP_t *compx, uint32_t input_hysteresis) { MODIFY_REG(compx->CSR, COMP_CSR_HYST, input_hysteresis); } /** * @brief 设置COMP响应速度模式 * @param compx COMP外设 * @param speed_mode 响应速度 * @arg COMP_VERYLOWSPEED * @arg COMP_LOWSPEED * @arg COMP_MEDIUMSPEED * @arg COMP_HIGHSPEED * @retval 无 */ __STATIC_INLINE void std_comp_set_speed_mode(COMP_t *compx, uint32_t speed_mode) { MODIFY_REG(compx->CSR, COMP_CSR_SPEED, speed_mode); } /** * @brief 设置COMP输出滤波时间 * @param compx COMP外设 * @param filter_time 滤波时间选择 * @arg COMP_FLTIME_2CYCLE * @arg COMP_FLTIME_4CYCLE * @arg ... * @arg COMP_FLTIME_256CYCLE * @retval 无 */ __STATIC_INLINE void std_comp_set_output_filter_time(COMP_t *compx, uint32_t filter_time) { MODIFY_REG(compx->CSR, COMP_CSR_FLTIME, filter_time); } /** * @brief COMP输出滤波使能 * @param compx COMP外设 * @retval 无 */ __STATIC_INLINE void std_comp_output_filter_enable(COMP_t *compx) { compx->CSR |= (COMP_CSR_FLTEN); } /** * @brief COMP输出滤波禁止 * @param compx COMP外设 * @retval 无 */ __STATIC_INLINE void std_comp_output_filter_disable(COMP_t *compx) { compx->CSR &= (~COMP_CSR_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->CSR & COMP_CSR_EN) == COMP_CSR_EN); } /** * @brief COMP寄存器锁定 * @param compx COMP外设 * @note 只能通过复位来清除锁定功能 * @retval 无 */ __STATIC_INLINE void std_comp_lock(COMP_t *compx) { compx->CSR |= (COMP_CSR_LOCK); } /** * @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->CSR & COMP_CSR_VAL) >> COMP_CSR_VAL_POS); } /* 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 /* CIU32L051_STD_COMP_H */