CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Include/ciu32l051_std_comp.h

419 lines
13 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************************************/
/**
* @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 */