123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482 |
- /**
- *******************************************************************************
- * @file hc32_ll_cmp.h
- * @brief Head file for CMP module.
- *
- @verbatim
- Change Logs:
- Date Author Notes
- 2022-12-31 CDT First version
- @endverbatim
- *******************************************************************************
- * Copyright (C) 2022, 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;
- /**
- * @brief CMP window mode configuration structure
- */
- typedef struct {
- uint16_t u16PositiveInput; /*!< Window mode Positive(compare voltage) input @ref CMP_Window_Positive_Select */
- uint16_t u16WinVolLow; /*!< CMP reference low voltage for window mode @ref CMP_Window_Low_Select */
- uint16_t u16WinVolHigh; /*!< CMP reference high voltage for window mode @ref CMP_Window_High_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_window_init_t;
- /**
- * @brief CMP blank window function configuration structure
- */
- typedef struct {
- uint8_t u8Mode; /*!< blank window mode select, @ref CMP_BlankWindow_Mode */
- uint16_t u16Src; /*!< blank window source select,
- can be any combination of @ref CMP_BlankWindow_Src */
- uint16_t u16ValidLevelEdge; /*!< Valid level for blank window level mode @ref CMP_BlankWindow_Valid_Level
- Valid edge for blank window edge mode @ref CMP_BlankWindow_Valid_Edge */
- uint16_t u16MaskWidth; /*!< Mask width when valid edge occurs for blank window edge mode, which range
- from 0~255 */
- uint8_t u8OutLevel; /*!< CMP output level when blank window valid @ref CMP_BlankWindow_output_Level */
- } stc_cmp_blankwindow_t;
- /**
- * @brief CMP input scan mode configuration structure
- */
- typedef struct {
- uint16_t u16Mode; /*!< Scan mode @ref CMP_Scan_Mode */
- uint16_t u16Src; /*!< Scan input source @ref CMP_Scan_Inm_Inp_Src */
- uint16_t u16Stable; /*!< Scan stable time value, range [0x00U ~ 0x3FU],
- The CMP stable time = T(CMP clock) x u16Stable,
- The stable time is recommended greater than 100nS */
- uint16_t u16Period; /*!< Scan period value, range [0x08 ~ 0xFF],
- u16Period > (u16Stable + u16OutFilter * 4 + CMP_SCAN_PERIOD_IMME)
- u16OutFilter is configurate in CMP_NormalModeInit() function. */
- } stc_cmp_scan_config_t;
- /**
- * @}
- */
- /*******************************************************************************
- * Global pre-processor symbols/macros ('#define')
- ******************************************************************************/
- /**
- * @defgroup CMP_Global_Macros CMP Global Macros
- * @{
- */
- #define VISR_OFFSET (8U)
- /**
- * @defgroup CMP_Window_Mode_Unit CMP Window Mode Unit
- * @{
- */
- #define CMP_WIN_CMP12 (0x01U)
- #define CMP_WIN_CMP34 (0x02U)
- /**
- * @}
- */
- /**
- * @defgroup CMP_Positive_Input_Select CMP Positive(Compare) Voltage Input
- * @{
- */
- #define CMP_POSITIVE_NONE (0x0U)
- /* Positive input select table
- CMP1 CMP2 CMP3 CMP4
- -------------------------------------
- INP1 PA0 PA4 PB0 PA9
- INP2 PA1 PA5 PB1 PB1
- INP3 PA2 PA6 PC0 PC0
- INP4 PA3 PA3 PA4 PA10
- */
- #define CMP_POSITIVE_INP1 (CMP_PMSR_CVSL_0 >> CMP_PMSR_CVSL_POS)
- #define CMP_POSITIVE_INP2 (CMP_PMSR_CVSL_1 >> CMP_PMSR_CVSL_POS)
- #define CMP_POSITIVE_INP3 (CMP_PMSR_CVSL_2 >> CMP_PMSR_CVSL_POS)
- #define CMP_POSITIVE_INP4 (CMP_PMSR_CVSL_3 >> CMP_PMSR_CVSL_POS)
- /**
- * @}
- */
- /**
- * @defgroup CMP_Window_Positive_Select CMP Window Mode positive(compare) Voltage
- * @{
- */
- #define CMP_WIN_POSITIVE_NONE (0x0U)
- /* Positive input select table for window mode
- WIN_CMP12 WIN_CMP34
- ----------------------------------------------
- INP1 -- --
- INP2 -- PB1
- INP3 -- PC0
- INP4 PA3 --
- */
- #define CMP_WIN_POSITIVE_INP2 (CMP_PMSR_CVSL_1 >> CMP_PMSR_CVSL_POS)
- #define CMP_WIN_POSITIVE_INP3 (CMP_PMSR_CVSL_2 >> CMP_PMSR_CVSL_POS)
- #define CMP_WIN_POSITIVE_INP4 (CMP_PMSR_CVSL_3 >> CMP_PMSR_CVSL_POS)
- /**
- * @}
- */
- /**
- * @defgroup CMP_Scan_Inp_Status CMP Scan Function Positive In INP Source
- * @{
- */
- #define CMP_SCAN_STAT_INM_NONE (0U)
- #define CMP_SCAN_STAT_INP1 (1U << CMP_SCMR_CVST_POS)
- #define CMP_SCAN_STAT_INP2 (2U << CMP_SCMR_CVST_POS)
- #define CMP_SCAN_STAT_INP3 (4U << CMP_SCMR_CVST_POS)
- #define CMP_SCAN_STAT_INP4 (8U << CMP_SCMR_CVST_POS)
- /**
- * @}
- */
- /**
- * @defgroup CMP_Scan_Inm_Status CMP Scan Function Positive In INM Source
- * @{
- */
- #define CMP_SCAN_STAT_NONE (0U)
- #define CMP_SCAN_STAT_INM1 (1U << CMP_SCMR_RVST_POS)
- #define CMP_SCAN_STAT_INM2 (2U << CMP_SCMR_RVST_POS)
- #define CMP_SCAN_STAT_INM3 (4U << CMP_SCMR_RVST_POS)
- #define CMP_SCAN_STAT_INM4 (8U << CMP_SCMR_RVST_POS)
- /**
- * @}
- */
- /**
- * @defgroup CMP_Scan_Inm_Inp_Src CMP Scan Inm or Inp Source
- * @{
- */
- #define CMP_SCAN_SRC_INP1_INM1 (1U)
- #define CMP_SCAN_SRC_INP2_INM2 (2U)
- #define CMP_SCAN_SRC_INP3_INM3 (4U)
- #define CMP_SCAN_SRC_INP4_INM4 (8U)
- /**
- * @}
- */
- /**
- * @defgroup CMP_Scan_Mode CMP Scan Mode
- * @{
- */
- #define CMP_SCAN_NONE (0U)
- #define CMP_SCAN_INP (CMP_MDR_CSMD_1)
- #define CMP_SCAN_INM (CMP_MDR_CSMD)
- /**
- * @}
- */
- /**
- * @defgroup CMP_Negative_Input_Select CMP Negative(Reference) Voltage Input
- * @{
- */
- #define CMP_NEGATIVE_NONE (0x0U)
- /* Negative input select table
- CMP1 CMP2 CMP3 CMP4
- ----------------------------------------------------
- INM1 PA7 PA7 PA7 PA7
- INM2 PC3 PC4 PC5 PA8
- INM3 DAO1 DAO1 DAO1 DAO1
- INM4 DAO2 DAO2 DAO2 DAO2
- */
- #define CMP_NEGATIVE_INM1 (CMP_PMSR_RVSL_0)
- #define CMP_NEGATIVE_INM2 (CMP_PMSR_RVSL_1)
- #define CMP_NEGATIVE_INM3 (CMP_PMSR_RVSL_2)
- #define CMP_NEGATIVE_INM4 (CMP_PMSR_RVSL_3)
- /**
- * @}
- */
- /**
- * @defgroup CMP_Window_Low_Select CMP Window Mode Window Low Voltage
- * @{
- */
- #define CMP_WIN_LOW_NONE (0x0U)
- /* Window mode low voltage select table
- WIN_CMP12 IN_CMP34
- -------------------------------------
- INM1 PA7 PA7
- INM2 PC3 PC5
- INM3 DAO1 DAO1
- INM4 DAO2 DAO2
- */
- #define CMP_WIN_LOW_INM1 (CMP_PMSR_RVSL_0)
- #define CMP_WIN_LOW_INM2 (CMP_PMSR_RVSL_1)
- #define CMP_WIN_LOW_INM3 (CMP_PMSR_RVSL_2)
- #define CMP_WIN_LOW_INM4 (CMP_PMSR_RVSL_3)
- /**
- * @}
- */
- /**
- * @defgroup CMP_Window_High_Select CMP Window Mode Window High Voltage
- * @{
- */
- #define CMP_WIN_HIGH_NONE (0x0U)
- /* Window mode high voltage select table
- WIN_CMP12 WIN_CMP34
- ------------------------------------------
- INM1 PA7 PA7
- INM2 PC4 PA8
- INM3 DAO1 DAO1
- INM4 DAO2 DAO2
- */
- #define CMP_WIN_HIGH_INM1 (CMP_PMSR_RVSL_0)
- #define CMP_WIN_HIGH_INM2 (CMP_PMSR_RVSL_1)
- #define CMP_WIN_HIGH_INM3 (CMP_PMSR_RVSL_2)
- #define CMP_WIN_HIGH_INM4 (CMP_PMSR_RVSL_3)
- /**
- * @}
- */
- /**
- * @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_OCR_COPS) /*!< 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_FIR_EDGS_POS) /*!< Detect rising edge */
- #define CMP_DETECT_EDGS_FALLING (2U << CMP_FIR_EDGS_POS) /*!< Detect falling edge */
- #define CMP_DETECT_EDGS_BOTH (3U << CMP_FIR_EDGS_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_FIR_FCKS_POS)
- #define CMP_OUT_FILTER_CLK_DIV2 (2U << CMP_FIR_FCKS_POS)
- #define CMP_OUT_FILTER_CLK_DIV4 (3U << CMP_FIR_FCKS_POS)
- #define CMP_OUT_FILTER_CLK_DIV8 (4U << CMP_FIR_FCKS_POS)
- #define CMP_OUT_FILTER_CLK_DIV16 (5U << CMP_FIR_FCKS_POS)
- #define CMP_OUT_FILTER_CLK_DIV32 (6U << CMP_FIR_FCKS_POS)
- /**
- * @}
- */
- /**
- * @defgroup CMP_BlankWindow_Src CMP Output blank window Function Control Signal
- * @{
- */
- /* Blank window PWM source select table
- CMP1 CMP2 CMP3 CMP4
- ------------------------------------------------------------------------
- SRC1 TIMA_1_PWM1 TIMA_3_PWM1 TIMA_1_PWM1 TIMA_2_PWM1
- SRC2 TIMA_1_PWM2 TIMA_3_PWM2 TIMA_1_PWM2 TIMA_2_PWM2
- SRC3 TIMA_1_PWM3 TIMA_3_PWM3 TIMA_1_PWM3 TIMA_2_PWM3
- SRC4 TIMA_2_PWM1 TIMA_4_PWM1 TIMA_3_PWM1 TIMA_4_PWM1
- SRC5 TIMA_2_PWM2 TIMA_4_PWM2 TIMA_3_PWM2 TIMA_4_PWM2
- SRC6 TIMA_2_PWM3 TIMA_4_PWM3 TIMA_3_PWM3 TIMA_4_PWM3
- SRC7 TIM6_1_PWMA TIM6_1_PWMA TIM6_1_PWMB TIM6_1_PWMB
- SRC8 TIM6_2_PWMA TIM6_2_PWMA TIM6_2_PWMB TIM6_2_PWMB
- SRC9 TIM4_1_OUH TIM4_1_OUH TIM4_2_OUH TIM4_2_OUH
- SRC10 TIM4_1_OUL TIM4_1_OUL TIM4_2_OUL TIM4_2_OUL
- SRC11 TIM4_1_OVH TIM4_1_OVH TIM4_2_OVH TIM4_2_OVH
- SRC12 TIM4_1_OVL TIM4_1_OVL TIM4_2_OVL TIM4_2_OVL
- SRC13 TIM4_1_OWH TIM4_1_OWH TIM4_2_OWH TIM4_2_OWH
- SRC14 TIM4_1_OWL TIM4_1_OWL TIM4_2_OWL TIM4_2_OWL
- SRC15 TIM4_1_OXH TIM4_1_OXH TIM4_2_OXH TIM4_2_OXH
- SRC16 TIM4_1_OXL TIM4_1_OXL TIM4_2_OXL TIM4_2_OXL
- */
- #define CMP_BLANKWIN_SRC1 (CMP_BWSR1_CTWS0)
- #define CMP_BLANKWIN_SRC2 (CMP_BWSR1_CTWS1)
- #define CMP_BLANKWIN_SRC3 (CMP_BWSR1_CTWS2)
- #define CMP_BLANKWIN_SRC4 (CMP_BWSR1_CTWS3)
- #define CMP_BLANKWIN_SRC5 (CMP_BWSR1_CTWS4)
- #define CMP_BLANKWIN_SRC6 (CMP_BWSR1_CTWS5)
- #define CMP_BLANKWIN_SRC7 (CMP_BWSR1_CTWS6)
- #define CMP_BLANKWIN_SRC8 (CMP_BWSR1_CTWS7)
- #define CMP_BLANKWIN_SRC9 (CMP_BWSR1_CTWS8)
- #define CMP_BLANKWIN_SRC10 (CMP_BWSR1_CTWS9)
- #define CMP_BLANKWIN_SRC11 (CMP_BWSR1_CTWS10)
- #define CMP_BLANKWIN_SRC12 (CMP_BWSR1_CTWS11)
- #define CMP_BLANKWIN_SRC13 (CMP_BWSR1_CTWS12)
- #define CMP_BLANKWIN_SRC14 (CMP_BWSR1_CTWS13)
- #define CMP_BLANKWIN_SRC15 (CMP_BWSR1_CTWS14)
- #define CMP_BLANKWIN_SRC16 (CMP_BWSR1_CTWS15)
- /**
- * @}
- */
- /**
- * @defgroup CMP_BlankWindow_Valid_Level CMP Blank Window Valid Level
- * @{
- */
- #define CMP_BLANKWIN_VALID_LVL_LOW (0U) /*!< Blank window valid level is low */
- #define CMP_BLANKWIN_VALID_LVL_HIGH (1U) /*!< Blank window valid level is high */
- /**
- * @}
- */
- /**
- * @defgroup CMP_BlankWindow_output_Level CMP Output Level When Blank Windows Valid
- * @{
- */
- #define CMP_BLANKWIN_OUTPUT_LVL_LOW (0U) /*!< Output low when blank windows valid */
- #define CMP_BLANKWIN_OUTPUT_LVL_HIGH (1U << CMP_OCR_BWOL_POS) /*!< Output high when blank windows valid */
- #define CMP_BLANKWIN_OUTPUT_LVL_HOLD (2U << CMP_OCR_BWOL_POS) /*!< Output level hold when blank windows valid */
- /**
- * @}
- */
- /**
- * @defgroup CMP_BlankWindow_Mode CMP Blank Windows Mode
- * @{
- */
- #define CMP_BLANKWIN_MD_LVL (0U)
- #define CMP_BLANKWIN_MD_EDGE (CMP_OCR_BWMD)
- /**
- * @}
- */
- /**
- * @defgroup CMP_BlankWindow_Valid_Edge CMP Blank Windows valid edge for edge mode
- * @{
- */
- #define CMP_BLANKWIN_VALID_EDGE_NONE (0U) /*!< Blank window valid edge none */
- #define CMP_BLANKWIN_VALID_EDGE_RISING (CMP_BWSR2_TWEG_0) /*!< Blank window rising edge valid */
- #define CMP_BLANKWIN_VALID_EDGE_FALLING (CMP_BWSR2_TWEG_1) /*!< Blank window falling edge valid */
- #define CMP_BLANKWIN_VALID_EDGE_ALL (CMP_BWSR2_TWEG_0 | CMP_BWSR2_TWEG_1) /*!< Blank window all edge valid */
- /**
- * @}
- */
- /**
- * @}
- */
- /*******************************************************************************
- * 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);
- int32_t CMP_WindowModeInit(uint8_t u8WinCMPx, const stc_cmp_window_init_t *pstcCmpWindowInit);
- int32_t CMP_WindowStructInit(stc_cmp_window_init_t *pstcCmpWindowInit);
- void CMP_BlankWindowSrcDisable(CM_CMP_TypeDef *CMPx, uint16_t u16BlankWindowSrc);
- int32_t CMP_BlankWindowConfig(CM_CMP_TypeDef *CMPx, const stc_cmp_blankwindow_t *pstcBlankWindowConfig);
- int32_t CMP_BlankWindowStructInit(stc_cmp_blankwindow_t *pstcBlankWindowConfig);
- void CMP_BlankWindowCmd(CM_CMP_TypeDef *CMPx, en_functional_state_t enNewState);
- void CMP_BlankWindowMode(CM_CMP_TypeDef *CMPx, uint8_t u8Mode);
- uint32_t CMP_GetScanInpSrc(CM_CMP_TypeDef *CMPx);
- uint32_t CMP_GetScanInmSrc(CM_CMP_TypeDef *CMPx);
- void CMP_ScanSetSrc(CM_CMP_TypeDef *CMPx, uint16_t u16Src);
- void CMP_ScanSetMode(CM_CMP_TypeDef *CMPx, uint16_t u16Mode);
- int32_t CMP_ScanConfig(CM_CMP_TypeDef *CMPx, stc_cmp_scan_config_t *pstcCmpScanConfig);
- int32_t CMP_ScanStructInit(stc_cmp_scan_config_t *pstcCmpScanConfig);
- 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);
- /**
- * @}
- */
- #endif /* LL_CMP_ENABLE */
- /**
- * @}
- */
- /**
- * @}
- */
- #ifdef __cplusplus
- }
- #endif
- #endif /* __HC32_LL_CMP_H__ */
- /*******************************************************************************
- * EOF (not truncated)
- ******************************************************************************/
|