276 lines
9.4 KiB
C
276 lines
9.4 KiB
C
|
|
/**
|
||
|
|
*******************************************************************************
|
||
|
|
* @file hc32_ll_cmp.h
|
||
|
|
* @brief This file contains all the functions prototypes of the CMP driver
|
||
|
|
* library.
|
||
|
|
@verbatim
|
||
|
|
Change Logs:
|
||
|
|
Date Author Notes
|
||
|
|
2022-03-31 CDT First version
|
||
|
|
2022-06-30 CDT Modify macro define for API
|
||
|
|
2023-01-15 CDT Code refine for scan function
|
||
|
|
@endverbatim
|
||
|
|
*******************************************************************************
|
||
|
|
* Copyright (C) 2022-2023, Xiaohua Semiconductor Co., Ltd. All rights reserved.
|
||
|
|
*
|
||
|
|
* This software component is licensed by XHSC under BSD 3-Clause license
|
||
|
|
* (the "License"); You may not use this file except in compliance with the
|
||
|
|
* License. You may obtain a copy of the License at:
|
||
|
|
* opensource.org/licenses/BSD-3-Clause
|
||
|
|
*
|
||
|
|
*******************************************************************************
|
||
|
|
*/
|
||
|
|
#ifndef __HC32_LL_CMP_H__
|
||
|
|
#define __HC32_LL_CMP_H__
|
||
|
|
|
||
|
|
/* C binding of definitions if building with C++ compiler */
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C"
|
||
|
|
{
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* Include files
|
||
|
|
******************************************************************************/
|
||
|
|
#include "hc32_ll_def.h"
|
||
|
|
|
||
|
|
#include "hc32f4xx.h"
|
||
|
|
#include "hc32f4xx_conf.h"
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @addtogroup LL_Driver
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @addtogroup LL_CMP
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
#if (LL_CMP_ENABLE == DDL_ON)
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* Global type definitions ('typedef')
|
||
|
|
******************************************************************************/
|
||
|
|
/**
|
||
|
|
* @defgroup CMP_Global_Types CMP Global Types
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief CMP normal mode configuration structure
|
||
|
|
*/
|
||
|
|
typedef struct {
|
||
|
|
uint16_t u16PositiveInput; /*!< Positive(compare voltage) input @ref CMP_Positive_Input_Select */
|
||
|
|
uint16_t u16NegativeInput; /*!< Negative(Reference voltage) input @ref CMP_Negative_Input_Select */
|
||
|
|
uint16_t u16OutPolarity; /*!< Output polarity select, @ref CMP_Out_Polarity_Select */
|
||
|
|
uint16_t u16OutDetectEdge; /*!< Output detect edge, @ref CMP_Out_Detect_Edge_Select */
|
||
|
|
uint16_t u16OutFilter; /*!< Output Filter, @ref CMP_Out_Filter */
|
||
|
|
} stc_cmp_init_t;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* Global pre-processor symbols/macros ('#define')
|
||
|
|
******************************************************************************/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup CMP_Global_Macros CMP Global Macros
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
#define VISR_OFFSET (8U)
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup CMP_Positive_Input_Select CMP Positive(Compare) Voltage Input
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define CMP_POSITIVE_NONE (0x0U)
|
||
|
|
/* Note:
|
||
|
|
Normal mode:
|
||
|
|
1) Select one positive input from the following values.
|
||
|
|
Scan mode:
|
||
|
|
2) Select any combination of the following values, but the XXX_PGAO/ XXX_PGAO_BP/ XXX_CMP1_INP4/ XXX_CMP3_INP4
|
||
|
|
should not be valid at the same time.
|
||
|
|
*/
|
||
|
|
/* CMP1 */
|
||
|
|
#define CMP1_POSITIVE_CMP1_INP1 (CMP_VLTSEL_CVSL_0) /*!< Pin CMP1_INP1 */
|
||
|
|
#define CMP1_POSITIVE_CMP1_INP2 (CMP_VLTSEL_CVSL_1) /*!< Pin CMP1_INP2 */
|
||
|
|
#define CMP1_POSITIVE_CMP1_INP3 (CMP_VLTSEL_CVSL_2) /*!< Pin CMP1_INP3 */
|
||
|
|
#define CMP1_POSITIVE_PGAO (CMP_VLTSEL_CVSL_3 | CMP_VLTSEL_C4SL_0) /*!< Internal voltage PGAO */
|
||
|
|
#define CMP1_POSITIVE_PGAO_BP (CMP_VLTSEL_CVSL_3 | CMP_VLTSEL_C4SL_1) /*!< Internal voltage PGAO_BP */
|
||
|
|
#define CMP1_POSITIVE_CMP1_INP4 (CMP_VLTSEL_CVSL_3 | CMP_VLTSEL_C4SL_2) /*!< Pin CMP1_INP4 */
|
||
|
|
/* CMP2 */
|
||
|
|
#define CMP2_POSITIVE_CMP2_INP1 (CMP_VLTSEL_CVSL_0) /*!< Pin CMP2_INP1 */
|
||
|
|
#define CMP2_POSITIVE_CMP2_INP2 (CMP_VLTSEL_CVSL_1) /*!< Pin CMP2_INP2 */
|
||
|
|
#define CMP2_POSITIVE_CMP2_INP3 (CMP_VLTSEL_CVSL_2) /*!< Pin CMP2_INP3 */
|
||
|
|
#define CMP2_POSITIVE_PGAO (CMP_VLTSEL_CVSL_3 | CMP_VLTSEL_C4SL_0) /*!< Internal voltage PGAO */
|
||
|
|
#define CMP2_POSITIVE_PGAO_BP (CMP_VLTSEL_CVSL_3 | CMP_VLTSEL_C4SL_1) /*!< Internal voltage PGAO_BP */
|
||
|
|
/* CMP3 */
|
||
|
|
#define CMP3_POSITIVE_CMP3_INP1 (CMP_VLTSEL_CVSL_0) /*!< Pin CMP3_INP1 */
|
||
|
|
#define CMP3_POSITIVE_CMP3_INP2 (CMP_VLTSEL_CVSL_1) /*!< Pin CMP3_INP2 */
|
||
|
|
#define CMP3_POSITIVE_CMP3_INP3 (CMP_VLTSEL_CVSL_2) /*!< Pin CMP3_INP3 */
|
||
|
|
#define CMP3_POSITIVE_CMP3_INP4 (CMP_VLTSEL_CVSL_3) /*!< Pin CMP3_INP4 */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup CMP_Scan_Inp_Status CMP Scan Function Positive In INP Source
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define CMP_SCAN_STAT_INP_NONE (0U)
|
||
|
|
#define CMP_SCAN_STAT_INP1 (1U << CMP_OUTMON_CVST_POS)
|
||
|
|
#define CMP_SCAN_STAT_INP2 (2U << CMP_OUTMON_CVST_POS)
|
||
|
|
#define CMP_SCAN_STAT_INP3 (4U << CMP_OUTMON_CVST_POS)
|
||
|
|
#define CMP_SCAN_STAT_INP4 (8U << CMP_OUTMON_CVST_POS)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup CMP_Negative_Input_Select CMP Negative(Reference) Voltage Input
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define CMP_NEGATIVE_NONE (0x0U)
|
||
|
|
/* Negative input select table
|
||
|
|
CMP1 CMP2 CMP3
|
||
|
|
----------------------------------------------------
|
||
|
|
INM1 CMP1_INM1 CMP2_INM1 CMP3_INM1
|
||
|
|
INM2 CMP1_INM2 CMP2_INM2 CMP3_INM2
|
||
|
|
INM3 DAC1 DAC2 DAC1
|
||
|
|
INM4 VREF VREF DAC2
|
||
|
|
*/
|
||
|
|
#define CMP_NEGATIVE_INM1 (1U << CMP_VLTSEL_RVSL_POS)
|
||
|
|
#define CMP_NEGATIVE_INM2 (2U << CMP_VLTSEL_RVSL_POS)
|
||
|
|
#define CMP_NEGATIVE_INM3 (4U << CMP_VLTSEL_RVSL_POS)
|
||
|
|
#define CMP_NEGATIVE_INM4 (8U << CMP_VLTSEL_RVSL_POS)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup CMP_Out_Polarity_Select CMP Output Polarity
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define CMP_OUT_INVT_OFF (0x0U) /*!< CMP output don't reverse */
|
||
|
|
#define CMP_OUT_INVT_ON (CMP_CTRL_INV) /*!< CMP output level reverse */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup CMP_Out_Detect_Edge_Select CMP Output Detect Edge
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define CMP_DETECT_EDGS_NONE (0U) /*!< Do not detect edge */
|
||
|
|
#define CMP_DETECT_EDGS_RISING (1U << CMP_CTRL_EDGSL_POS) /*!< Detect rising edge */
|
||
|
|
#define CMP_DETECT_EDGS_FALLING (2U << CMP_CTRL_EDGSL_POS) /*!< Detect falling edge */
|
||
|
|
#define CMP_DETECT_EDGS_BOTH (3U << CMP_CTRL_EDGSL_POS) /*!< Detect rising and falling edges */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup CMP_Out_Filter CMP Output Filter Configuration
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define CMP_OUT_FILTER_NONE (0U) /*!< Do not filter */
|
||
|
|
#define CMP_OUT_FILTER_CLK (1U << CMP_CTRL_FLTSL_POS)
|
||
|
|
#define CMP_OUT_FILTER_CLK_DIV2 (2U << CMP_CTRL_FLTSL_POS)
|
||
|
|
#define CMP_OUT_FILTER_CLK_DIV4 (3U << CMP_CTRL_FLTSL_POS)
|
||
|
|
#define CMP_OUT_FILTER_CLK_DIV8 (4U << CMP_CTRL_FLTSL_POS)
|
||
|
|
#define CMP_OUT_FILTER_CLK_DIV16 (5U << CMP_CTRL_FLTSL_POS)
|
||
|
|
#define CMP_OUT_FILTER_CLK_DIV32 (6U << CMP_CTRL_FLTSL_POS)
|
||
|
|
#define CMP_OUT_FILTER_CLK_DIV64 (7U << CMP_CTRL_FLTSL_POS)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup CMP_8BitDAC_Adc_Ref_Switch CMP 8 bit DAC ADC Reference Voltage Switch
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define CMP_ADC_REF_VREF (CMPCR_RVADC_VREFSW)
|
||
|
|
#define CMP_ADC_REF_DA2 (CMPCR_RVADC_DA2SW)
|
||
|
|
#define CMP_ADC_REF_DA1 (CMPCR_RVADC_DA1SW)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup CMP_8Bit_Dac_Ch CMP 8 bit DAC Channel
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define CMP_8BITDAC_CH1 (CMPCR_DACR_DA1EN)
|
||
|
|
#define CMP_8BITDAC_CH2 (CMPCR_DACR_DA2EN)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* Global variable definitions ('extern')
|
||
|
|
******************************************************************************/
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
Global function prototypes (definition in C source)
|
||
|
|
******************************************************************************/
|
||
|
|
/**
|
||
|
|
* @addtogroup CMP_Global_Functions
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
int32_t CMP_StructInit(stc_cmp_init_t *pstcCmpInit);
|
||
|
|
int32_t CMP_NormalModeInit(CM_CMP_TypeDef *CMPx, const stc_cmp_init_t *pstcCmpInit);
|
||
|
|
void CMP_DeInit(CM_CMP_TypeDef *CMPx);
|
||
|
|
|
||
|
|
void CMP_FuncCmd(CM_CMP_TypeDef *CMPx, en_functional_state_t enNewState);
|
||
|
|
void CMP_IntCmd(CM_CMP_TypeDef *CMPx, en_functional_state_t enNewState);
|
||
|
|
void CMP_CompareOutCmd(CM_CMP_TypeDef *CMPx, en_functional_state_t enNewState);
|
||
|
|
void CMP_PinVcoutCmd(CM_CMP_TypeDef *CMPx, en_functional_state_t enNewState);
|
||
|
|
en_flag_status_t CMP_GetStatus(const CM_CMP_TypeDef *CMPx);
|
||
|
|
void CMP_SetOutDetectEdge(CM_CMP_TypeDef *CMPx, uint8_t u8CmpEdges);
|
||
|
|
void CMP_SetOutFilter(CM_CMP_TypeDef *CMPx, uint8_t u8CmpFilter);
|
||
|
|
void CMP_SetOutPolarity(CM_CMP_TypeDef *CMPx, uint16_t u16CmpPolarity);
|
||
|
|
void CMP_SetPositiveInput(CM_CMP_TypeDef *CMPx, uint16_t u16PositiveInput);
|
||
|
|
void CMP_SetNegativeInput(CM_CMP_TypeDef *CMPx, uint16_t u16NegativeInput);
|
||
|
|
|
||
|
|
uint32_t CMP_GetScanInpSrc(CM_CMP_TypeDef *CMPx);
|
||
|
|
int32_t CMP_ScanTimeConfig(CM_CMP_TypeDef *CMPx, uint16_t u16Stable, uint16_t u16Period);
|
||
|
|
void CMP_ScanCmd(CM_CMP_TypeDef *CMPx, en_functional_state_t enNewState);
|
||
|
|
|
||
|
|
void CMP_8BitDAC_Cmd(uint8_t u8Ch, en_functional_state_t enNewState);
|
||
|
|
void CMP_8BitDAC_AdcRefCmd(uint16_t u16AdcRefSw, en_functional_state_t enNewState);
|
||
|
|
|
||
|
|
void CMP_8BitDAC_WriteData(uint8_t u8Ch, uint16_t u16DACData);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
#endif /* LL_CMP_ENABLE */
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif /* __HC32_LL_CMP_H__ */
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* EOF (not truncated)
|
||
|
|
******************************************************************************/
|