Electricity/FWLIB/source/ENS1_ANAC.c

198 lines
6.1 KiB
C
Raw Normal View History

/*
*Copyright ,2023 , NANOCHAP
*File name: ENS1_ANAC.c
*Author:
*Version: V1.0
*Date: 2023-11-
*Description:
*Function List:
History:
1.V1.0
Date:
Author:
Modification: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
#include "ens1_anac.h"
#include "ENS1_CLOCK.h"
#include "ENS1_ADC.h"
/*----------------------------------------------------COMP----------------------------------------------------------------*/
/*<2A>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void CompInitSet(COMP_ConfigStructure* COMPCONFIG)
{
if(COMPCONFIG->COMPARATOR_NUM == COMP0)
{
//IO<49><4F><EFBFBD><EFBFBD>
GPIO_AltFunction(GPIO_8 , ALT_FUNC3);
GPIO_AltFunction(GPIO_9 , ALT_FUNC3);
GPIO_AltFunction(GPIO_10 , ALT_FUNC3);
GPIO_AltFunction(GPIO_11 , ALT_FUNC3);
GPIO_AltFunction(GPIO_20 , ALT_FUNC2);
CMSDK_ANAC->COMP0_CTRL |= ( COMPCONFIG->COMP_VREF_SEL << 4 );
CMSDK_ANAC->COMP0_CTRL |= ( COMPCONFIG->COMP_SIGSEL_NEGATIVE_INPUT_SEL << 2 );
CMSDK_ANAC->COMP0_CTRL |= ( COMPCONFIG->COMP_SIGSEL_POSITIVE_INPUT_SEL << 1 );
}
else if(COMPCONFIG->COMPARATOR_NUM == COMP1)
{
GPIO_AltFunction(GPIO_12 , ALT_FUNC3);
GPIO_AltFunction(GPIO_13 , ALT_FUNC3);
GPIO_AltFunction(GPIO_14 , ALT_FUNC3);
GPIO_AltFunction(GPIO_15 , ALT_FUNC3);
GPIO_AltFunction(GPIO_21 , ALT_FUNC2);
CMSDK_ANAC->COMP1_CTRL |= ( COMPCONFIG->COMP_VREF_SEL << 4 );
CMSDK_ANAC->COMP1_CTRL |= ( COMPCONFIG->COMP_SIGSEL_NEGATIVE_INPUT_SEL << 2 );
CMSDK_ANAC->COMP1_CTRL |= ( COMPCONFIG->COMP_SIGSEL_POSITIVE_INPUT_SEL << 1 );
}
else
return ;
}
uint8_t Read_Comp_Output(COMP_NUM NUM)
{
if(NUM == COMP0)
return (uint8_t)((CMSDK_ANAC->COMP0_CTRL >> 8)&0X1);
else
return (uint8_t)((CMSDK_ANAC->COMP1_CTRL >> 8)&0X1);
}
void CompControl(COMP_NUM NUM ,FunctionalState Newstate)
{
if(NUM == COMP0)
(Newstate == ENABLE)? (CMSDK_ANAC->COMP0_CTRL |= (1) ): ( CMSDK_ANAC->COMP0_CTRL &=~ (1));
else
(Newstate == ENABLE)? (CMSDK_ANAC->COMP1_CTRL |= (1) ): ( CMSDK_ANAC->COMP1_CTRL &=~ (1));
}
/*--------------------------------------------------------PGA---------------------------------------------------------------*/
//<2F><>ʼ<EFBFBD><CABC>
void PGAInitSet(PGA_ConfigStructure* PGACONFIG)
{
if(PGACONFIG->PGA_NEG_SELx == PGA_NEGATIVE_INPUT_PGA_VIN0) //PGA0
{
GPIO_AltFunction(GPIO_16 , ALT_FUNC3);
GPIO_AltFunction(GPIO_18 , ALT_FUNC3);
GPIO_AnalogChannel_Control(GPIO_16 ,ENABLE );
GPIO_AnalogChannel_Control(GPIO_18 ,ENABLE );
}
else if(PGACONFIG->PGA_NEG_SELx == PGA_NEGATIVE_INPUT_PGA_VIN1) //PGA1
{
GPIO_AltFunction(GPIO_17 , ALT_FUNC3);
GPIO_AltFunction(GPIO_19 , ALT_FUNC3);
GPIO_AnalogChannel_Control(GPIO_17 ,ENABLE );
GPIO_AnalogChannel_Control(GPIO_19 ,ENABLE );
}
else if((PGACONFIG->PGA_NEG_SELx ==PGA_NEGATIVE_INPUT_INTERNAL_VCM) && ((PGACONFIG->PGA_POS_SELx == PGA_POSITIVE_INPUT_PGA_VIP0 )||(PGACONFIG->PGA_POS_SELx == PGA_POSITIVE_INPUT_PGA_VIP1))) //<2F>ڲ<EFBFBD><DAB2>ο<EFBFBD><CEBF><EFBFBD>ѹ+0/1
{
GPIO_AltFunction((GPIO_NUM)(GPIO_16+PGACONFIG->PGA_POS_SELx), ALT_FUNC3);
GPIO_AnalogChannel_Control((GPIO_NUM)(GPIO_16+PGACONFIG->PGA_POS_SELx) ,ENABLE );
}
else if((PGACONFIG->PGA_NEG_SELx ==PGA_NEGATIVE_INPUT_EXTERNAL_VCM) && ((PGACONFIG->PGA_POS_SELx == PGA_POSITIVE_INPUT_PGA_VIP0 )||(PGACONFIG->PGA_POS_SELx == PGA_POSITIVE_INPUT_PGA_VIP1))) //<2F>ڲ<EFBFBD><DAB2>ο<EFBFBD><CEBF><EFBFBD>ѹ+0/1
{
GPIO_AltFunction((GPIO_NUM)(GPIO_16+PGACONFIG->PGA_POS_SELx), ALT_FUNC3);
GPIO_AltFunction(GPIO_20, ALT_FUNC3);
GPIO_AnalogChannel_Control((GPIO_NUM)(GPIO_16+PGACONFIG->PGA_POS_SELx) ,ENABLE );
GPIO_AnalogChannel_Control(GPIO_20 ,ENABLE );
}
else if((PGACONFIG->PGA_POS_SELx == PGA_POSITIVE_INPUT_INTERNAL_VCM) && ((PGACONFIG->PGA_NEG_SELx == PGA_NEGATIVE_INPUT_PGA_VIN0)||(PGACONFIG->PGA_NEG_SELx == PGA_NEGATIVE_INPUT_PGA_VIN1)))
{
GPIO_AltFunction((GPIO_NUM)(GPIO_18+PGACONFIG->PGA_POS_SELx), ALT_FUNC3);
GPIO_AnalogChannel_Control((GPIO_NUM)(GPIO_18+PGACONFIG->PGA_POS_SELx) ,ENABLE );
}
else if((PGACONFIG->PGA_POS_SELx == PGA_POSITIVE_INPUT_VREF1_2V) && ((PGACONFIG->PGA_NEG_SELx == PGA_NEGATIVE_INPUT_PGA_VIN0)||(PGACONFIG->PGA_NEG_SELx == PGA_NEGATIVE_INPUT_PGA_VIN1)))
{
GPIO_AltFunction((GPIO_NUM)(GPIO_18+PGACONFIG->PGA_POS_SELx), ALT_FUNC3);
GPIO_AnalogChannel_Control((GPIO_NUM)(GPIO_18+PGACONFIG->PGA_POS_SELx) ,ENABLE );
}
else
{
return ;
}
if(PGACONFIG->PGA_OUT == PGA_TO_GPIO4)
{
CMSDK_ADC->ADC_CH_SEL &=~ (0x7);
CMSDK_ADC->ADC_CH_SEL = 4;
GPIO_AltFunction(GPIO_4, ALT_FUNC3);
GPIO_AnalogChannel_Control(GPIO_4 ,ENABLE );
ENS1_ADC_STOP(ENS1_PGA_TO_ADC);
}
else if(PGACONFIG->PGA_OUT == PGA_TO_ADC)
{
ENS1_ADCCLKConfig(ADC_CLK_base32div);
CMSDK_ADC->ADC_CH_SEL &=~ (0x7);
CMSDK_ADC->ADC_CH_SEL = 0;
ENS1_ADC_CONFIG(ENS1_PGA_TO_ADC ,
CONTINUOUS_ADC_MODE,
COV_RCV_EOC ,
ADC_SampleTime_5ADC_Clk,
ENABLE_EOC_INT);
ENS1_ADC_START(ENS1_PGA_TO_ADC);
}
else
{
return ;
}
CMSDK_ANAC->PGA_CTRL |= ( PGACONFIG->PGA_GAIN_SEL << 4 );
}
//PGA<47><41><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>
void PGAControl(FunctionalState Newstate)
{
(Newstate == ENABLE) ? (CMSDK_ANAC->PGA_CTRL |= (0X3) ) : (CMSDK_ANAC->PGA_CTRL &=~ (0X3)) ;
}
/*----------------------------<2D>͵<EFBFBD>ѹ<EFBFBD><D1B9>оƬ<D0BE><C6AC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>--------------------------*/
void PMU_TEMP150C_TRIGControl(FunctionalState Newstate) //<2F><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
{
(Newstate==ENABLE) ? (CMSDK_ANAC->PMU_CTRL |= (1<<5) ) : (CMSDK_ANAC->PMU_CTRL &=~ (1<<5));
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6>Ƿ񳬹<C7B7>150<35>ȵ<EFBFBD>״ֵ̬
int8_t TEMP_150C_TRIG_SIGNAL(void)
{
if((CMSDK_ANAC->PMU_CTRL >> 5) & 0x1)
return ((CMSDK_ANAC->PMU_CTRL >> 7) & 0x1);
else
{
PMU_TEMP150C_TRIGControl(ENABLE);
return ((CMSDK_ANAC->PMU_CTRL >> 7) & 0x1);
}
}
//<2F>͵<EFBFBD>ѹ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ѹ
void LVD_InitSet(uint8_t Threshold_voltage)
{
CMSDK_ANAC->PMU_CTRL |= (Threshold_voltage << 1);
}
//<2F>򿪻<EFBFBD><F2BFAABB>رմ˹<D5B4><CBB9><EFBFBD>
void PMU_LVD_Control(FunctionalState Newstate)
{
(Newstate == ENABLE) ? (CMSDK_ANAC->PMU_CTRL|= (1) ) : (CMSDK_ANAC->PMU_CTRL &=~ (1)) ;
}
//<2F><>ȡ<EFBFBD>͵<EFBFBD>ѹ״̬
uint8_t Read_LVD_Signal(void)
{
return ((CMSDK_ANAC->PMU_CTRL >> 6) & 0x1);
}
/*------------------------<2D><>϶BUFFER<45><52><EFBFBD>û<EFBFBD><C3BB>ر<EFBFBD>-----------------------------------*/
void PMU_BANDGAP_CONTROL(FunctionalState Newstate)
{
(Newstate == ENABLE) ? (CMSDK_ANAC->PMU_CTRL |= (1<<4)) : (CMSDK_ANAC->PMU_CTRL &=~ (1<<4)) ;
}