123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- /**
- ******************************************************************************
- * @file lib_comp.c
- * @author Application Team
- * @version V4.4.0
- * @date 2018-09-27
- * @brief COMP library.
- ******************************************************************************
- * @attention
- *
- ******************************************************************************
- */
- #include "lib_comp.h"
- extern __IO uint32_t ana_reg3_tmp;
- /**
- * @brief Comparator debounce configure.
- * @param COMPx:
- COMP_1
- COMP_2
- Debounce:
- COMP_DEB_0
- COMP_DEB_1
- COMP_DEB_2
- COMP_DEB_3
- * @retval None
- */
- void COMP_DEBConfig(uint32_t COMPx, uint32_t Debounce)
- {
- uint32_t tmp;
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
- assert_parameters(IS_COMP_DEB(Debounce));
-
- tmp = ANA->CTRL;
- tmp &= ~(ANA_CTRL_CMP1DEB << COMPx);
- tmp |= Debounce << COMPx;
- ANA->CTRL = tmp;
- }
- /**
- * @brief Comparator mode configure.
- * @param COMPx:
- COMP_1
- COMP_2
- Mode:
- COMP_MODE_OFF
- COMP_MODE_RISING
- COMP_MODE_FALLING
- COMP_MODE_BOTH
- * @retval None
- */
- void COMP_ModeConfig(uint32_t COMPx, uint32_t Mode)
- {
- uint32_t tmp;
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
- assert_parameters(IS_COMP_MODE(Mode));
-
- tmp = ANA->CTRL;
- tmp &= ~(ANA_CTRL_COMP1_SEL << COMPx);
- tmp |= Mode << COMPx;
- ANA->CTRL = tmp;
- }
- /**
- * @brief Configure signal source.
- * @param COMPx:
- * COMP_1
- * COMP_2
- * SourceSelect:
- * COMP_SIGNALSRC_P_TO_REF
- * COMP_SIGNALSRC_N_TO_REF
- * COMP_SIGNALSRC_P_TO_N
- * @retval None
- */
- void COMP_SignalSourceConfig(uint32_t COMPx, uint32_t SourceSelect)
- {
- uint32_t tmp;
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
- assert_parameters(IS_COMP_SIGNALSRC(SourceSelect));
-
- tmp = ANA->REG2;
- tmp &= ~(ANA_REG2_CMP1_SEL << COMPx);
- tmp |= SourceSelect << COMPx;
-
- ANA->REG2 = tmp;
- }
- /**
- * @brief Comparator configure REF selection.
- * @param COMPx:
- * COMP_1
- * COMP_2
- * REFSelect:
- * COMP_REF_VREF
- * COMP_REF_BGPREF
- * @retval None
- */
- void COMP_REFConfig(uint32_t COMPx, uint32_t REFSelect)
- {
- uint32_t tmp;
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
- assert_parameters(IS_COMP_REF(REFSelect));
-
- tmp = ANA->REG2;
- tmp &= ~(ANA_REG2_REFSEL_CMP1 << (COMPx / 2));
- tmp |= REFSelect << (COMPx / 2);
-
- ANA->REG2 = tmp;
- }
- /**
- * @brief Comparator configure Bias current selection.
- * @param COMPx:
- * COMP_1
- * COMP_2
- * BiasSel:
- * COMP_BIAS_20nA
- * COMP_BIAS_100nA
- * COMP_BIAS_500nA
- * @retval None
- */
- void COMP_BiasConfig(uint32_t COMPx, uint32_t BiasSel)
- {
- uint32_t tmp;
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
- assert_parameters(IS_COMP_BIAS(BiasSel));
-
- tmp = ANA->REG5;
- tmp &= ~(ANA_REG5_IT_CMP1 << COMPx);
- tmp |= BiasSel << COMPx;
-
- ANA->REG5 = tmp;
- }
- /**
- * @brief Get comparator count value.
- * @param COMPx:
- COMP_1
- COMP_2
- * @retval Comparator count value.
- */
- uint32_t COMP_GetCNTValue(uint32_t COMPx)
- {
- __IO uint32_t *addr;
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
-
- addr = &ANA->CMPCNT1 + (COMPx / 2);
-
- return (*addr);
- }
- /**
- * @brief Clear comparator counter value.
- * @param COMPx:
- COMP_1
- COMP_2
- * @retval None
- */
- void COMP_ClearCNTValue(uint32_t COMPx)
- {
- __IO uint32_t *addr;
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
-
- addr = &ANA->CMPCNT1 + (COMPx / 2);
- *addr = 0;
- }
- /**
- * @brief comparator output enable control.
- * @param COMPx:
- COMP_1
- COMP_2
- NewState:
- ENABLE
- DISABLE
- * @retval None
- */
- void COMP_Output_Cmd(uint32_t COMPx, uint32_t NewState)
- {
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
- assert_parameters(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState == ENABLE)
- {
- if (COMPx == COMP_1)
- GPIOAF->SELE |= IOE_SEL_SEL7;
- else
- PMU->IOASEL |= PMU_IOASEL_SEL6;
- }
- else
- {
- if (COMPx == COMP_1)
- GPIOAF->SELE &= ~IOE_SEL_SEL7;
- else
- PMU->IOASEL &= ~PMU_IOASEL_SEL6;
- }
- }
- /**
- * @brief Comparator enable control.
- * @param COMPx:
- COMP_1
- COMP_2
- NewState:
- ENABLE
- DISABLE
- * @retval None
- */
- void COMP_Cmd(uint32_t COMPx, uint32_t NewState)
- {
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
- assert_parameters(IS_FUNCTIONAL_STATE(NewState));
- if (COMPx == COMP_1)
- {
- if (NewState == ENABLE)
- ana_reg3_tmp |= ANA_REG3_CMP1PDN;
- else
- ana_reg3_tmp &= ~ANA_REG3_CMP1PDN;
- }
- else
- {
- if (NewState == ENABLE)
- ana_reg3_tmp |= ANA_REG3_CMP2PDN;
- else
- ana_reg3_tmp &= ~ANA_REG3_CMP2PDN;
- }
- ANA->REG3 = ana_reg3_tmp;
- }
- /**
- * @brief Get comparator 1 output level
- * @param None
- * @retval None
- */
- uint8_t COMP1_GetOutputLevel(void)
- {
- if (ANA->COMPOUT & ANA_COMPOUT_COMP1)
- return 1;
- else
- return 0;
- }
- /**
- * @brief Get comparator 2 output level
- * @param None
- * @retval None
- */
- uint8_t COMP2_GetOutputLevel(void)
- {
- if (ANA->COMPOUT & ANA_COMPOUT_COMP2)
- return 1;
- else
- return 0;
- }
- /**
- * @brief Comparator interrupt enable control.
- * @param COMPx:
- * COMP_1
- * COMP_2
- * NewState:
- * ENABLE
- * DISABLE
- * @retval None
- */
- void COMP_INTConfig(uint32_t COMPx, uint32_t NewState)
- {
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
-
- if (NewState == ENABLE)
- {
- ANA->INTEN |= ANA_INTEN_INTEN2 << (COMPx/2);
- }
- else
- {
- ANA->INTEN &= ~(ANA_INTEN_INTEN2 << (COMPx/2));
- }
- }
- /**
- * @brief Get comparator interrupt flag status.
- * @param COMPx:
- * COMP_1
- * COMP_2
- * @retval flag status
- * 0: status not set
- * 1: status set
- */
- uint8_t COMP_GetINTStatus(uint32_t COMPx)
- {
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
-
- if (ANA->INTSTS & (ANA_INTSTS_INTSTS2 << (COMPx/2)))
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- /**
- * @brief Clear comparator interrupt flag.
- * @param COMPx:
- * COMP_1
- * COMP_2
- * @retval None
- */
- void COMP_ClearINTStatus(uint32_t COMPx)
- {
- /* Check parameters */
- assert_parameters(IS_COMP(COMPx));
-
- ANA->INTSTS = ANA_INTSTS_INTSTS2 << (COMPx/2);
- }
- /*********************************** END OF FILE ******************************/
|