249 lines
6.7 KiB
C
249 lines
6.7 KiB
C
|
|
|||
|
#ifdef __cplusplus
|
|||
|
extern "C"
|
|||
|
{
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
#include "UWater_power_app.h"
|
|||
|
#include "UWater_adc_driver.h"
|
|||
|
#include "UWater_rtcc_driver.h"
|
|||
|
#include "soe.h"
|
|||
|
/*------------------------------ Variable Define -------------------------------------*/
|
|||
|
|
|||
|
static u8 s_g_voltage_stat = NORMAL_POWER; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
|
|||
|
static u8 s_g_power_machine_state_num = POWER_SYS_S0; // <20><>Դ<EFBFBD><D4B4>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><E2B4A6><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
|||
|
static u8 s_power_adc_done = 0; // ADװ<44><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
|
|||
|
static u32 s_power_adc_result = 0; // ADת<44><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
static u8 s_power_reset=0;
|
|||
|
|
|||
|
|
|||
|
u8 s_power_sleep_sum = 0;
|
|||
|
u8 s_power_sleep_flag = FALSE; // <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>
|
|||
|
u32 temp_value;
|
|||
|
|
|||
|
/*------------------------------ Function Define -------------------------------------*/
|
|||
|
|
|||
|
|
|||
|
/***********************<2A><><EFBFBD>ص<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>***************************
|
|||
|
Function: void PowerADCEnable(void) void PowerADCDisable(void)
|
|||
|
Description:
|
|||
|
Input:
|
|||
|
Return:
|
|||
|
Others:
|
|||
|
****************************************************************/
|
|||
|
void PowerADCEnable(void)
|
|||
|
{
|
|||
|
stc_gpio_cfg_t stcGpioCfg;
|
|||
|
DDL_ZERO_STRUCT(stcGpioCfg);
|
|||
|
stcGpioCfg.enDir = GpioDirOut; ///< <20>˿ڷ<CBBF><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stcGpioCfg.enDrv = GpioDrvL; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stcGpioCfg.enPu = GpioPuDisable; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-><3E><>
|
|||
|
stcGpioCfg.enPd = GpioPdDisable;
|
|||
|
stcGpioCfg.enOD = GpioOdDisable; ///< <20>˿ڿ<CBBF>©<EFBFBD><C2A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A>رտ<D8B1>©,ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stcGpioCfg.enCtrlMode = GpioAHB; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>->AHB
|
|||
|
Gpio_Init(BAT_CHECK_ENPORT, BAT_CHECK_ENPIN, &stcGpioCfg);
|
|||
|
Gpio_WriteOutputIO(BAT_CHECK_ENPORT, BAT_CHECK_ENPIN, TRUE);
|
|||
|
}
|
|||
|
|
|||
|
void PowerADCDisable(void)
|
|||
|
{
|
|||
|
stc_gpio_cfg_t stcGpioCfg;
|
|||
|
DDL_ZERO_STRUCT(stcGpioCfg);
|
|||
|
stcGpioCfg.enDir = GpioDirOut; ///< <20>˿ڷ<CBBF><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stcGpioCfg.enDrv = GpioDrvL; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stcGpioCfg.enPu = GpioPuDisable; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-><3E><>
|
|||
|
stcGpioCfg.enPd = GpioPdDisable;
|
|||
|
stcGpioCfg.enOD = GpioOdDisable; ///< <20>˿ڿ<CBBF>©<EFBFBD><C2A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A>رտ<D8B1>©,ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stcGpioCfg.enCtrlMode = GpioAHB; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>->AHB
|
|||
|
Gpio_Init(BAT_CHECK_ENPORT, BAT_CHECK_ENPIN, &stcGpioCfg);
|
|||
|
Gpio_WriteOutputIO(BAT_CHECK_ENPORT, BAT_CHECK_ENPIN, FALSE);
|
|||
|
}
|
|||
|
|
|||
|
/***********************<2A>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC>***************************
|
|||
|
Function: void PowerManageInitSys(void)
|
|||
|
Description:
|
|||
|
Input:
|
|||
|
Return:
|
|||
|
Others:
|
|||
|
****************************************************************/
|
|||
|
void PowerManageInitSys(void)
|
|||
|
{
|
|||
|
s_g_voltage_stat = NORMAL_POWER; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
|
|||
|
s_g_power_machine_state_num = POWER_SYS_S0; // <20><>Դ<EFBFBD><D4B4>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><E2B4A6><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
|||
|
RtccSetTimer(RTCC_TIMER_BAT_NUM, 30); //<2F>ϵ<EFBFBD>30s<30><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ѹ
|
|||
|
PowerADCDisable();
|
|||
|
}
|
|||
|
|
|||
|
/***********************<2A><>ѯǷѹ<C7B7><D1B9>Ϣ***************************
|
|||
|
Function: u8 PowerCheckStatusSys(void)
|
|||
|
Description: <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ƿѹ
|
|||
|
Input:
|
|||
|
Return: LOW_POWER <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ѹ<EFBFBD><EFBFBD> NORMAL_POWER<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Others:
|
|||
|
****************************************************************/
|
|||
|
u8 PowerCheckStatusSys (void)
|
|||
|
{
|
|||
|
return (s_g_voltage_stat);
|
|||
|
}
|
|||
|
/***********************<2A><>ѯ<EFBFBD><D1AF>ѹֵ<D1B9><D6B5>Ϣ***************************
|
|||
|
Function: u16 PowerCheckValueSys(void)
|
|||
|
Description: <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
Input:
|
|||
|
Return: <EFBFBD>Ŵ<EFBFBD>100<EFBFBD><EFBFBD><EFBFBD><EFBFBD> u16,16<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Others:
|
|||
|
****************************************************************/
|
|||
|
u16 PowerCheckValueSys(void)
|
|||
|
{
|
|||
|
return ((u16)temp_value);
|
|||
|
}
|
|||
|
/***********************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>***************************
|
|||
|
Function: void PowerMachineSys (void)
|
|||
|
Description: Ӧ<EFBFBD>ò㽨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
Input:
|
|||
|
Return:
|
|||
|
Others:
|
|||
|
*****************************************************************/
|
|||
|
void PowerMachineSys(void)
|
|||
|
{
|
|||
|
static u8 low_power_sum = 0;
|
|||
|
|
|||
|
switch (s_g_power_machine_state_num)
|
|||
|
{
|
|||
|
case POWER_SYS_S0:
|
|||
|
if (0 == RtccCheckTimer(RTCC_TIMER_BAT_NUM))
|
|||
|
{
|
|||
|
if(TASK_IDLE == AdcIfIdle())
|
|||
|
{
|
|||
|
PowerADCEnable();
|
|||
|
AdcStartConvert(POWER_CHECK_CHANNEL, POWER_CHECK_NUM, POWER_CHECK_INTERVAL, &s_power_adc_result, &s_power_adc_done);
|
|||
|
s_g_power_machine_state_num = POWER_SYS_S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case POWER_SYS_S1:
|
|||
|
if (TRUE == s_power_adc_done)
|
|||
|
{
|
|||
|
PowerADCDisable();
|
|||
|
if (ADC_OK == AdcGetStatus())
|
|||
|
{
|
|||
|
if(s_power_adc_result <= LOW_POWER_ADC_VALUE) //Ƿѹ
|
|||
|
{
|
|||
|
low_power_sum ++;
|
|||
|
RtccSetTimer(RTCC_TIMER_BAT_NUM, VOLTAGE_TEST_INTERVAL);
|
|||
|
if(low_power_sum >=6)
|
|||
|
{
|
|||
|
SaveNewSoe(SOE_BAT_LOW_LEVEL,SOE_REMARK_NOR); //<2F><>SOE
|
|||
|
s_g_voltage_stat = LOW_POWER;
|
|||
|
low_power_sum = 0;
|
|||
|
RtccSetTimer(RTCC_TIMER_BAT_NUM, VOLTAGE_TEST_INTERVAL); //<2F><>ʱ12h
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
s_g_voltage_stat = NORMAL_POWER;
|
|||
|
low_power_sum = 0;
|
|||
|
RtccSetTimer(RTCC_TIMER_BAT_NUM, VOLTAGE_TEST_INTERVAL); //<2F><>ʱ12h
|
|||
|
}
|
|||
|
temp_value = s_power_adc_result * 500; //((v/2)/2.5)*4096 = s_power_adc_result
|
|||
|
temp_value = temp_value/4096;
|
|||
|
if(s_power_reset==0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
{
|
|||
|
s_power_reset =1;
|
|||
|
if(temp_value<360)
|
|||
|
{
|
|||
|
RtccSetTimer(RTCC_TIMER_BAT_NUM, 10);//10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
|
|||
|
}
|
|||
|
}
|
|||
|
s_g_power_machine_state_num = POWER_SYS_S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/***********************<2A><><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***************************
|
|||
|
Function: u8 PowerIfSleepSys(void)
|
|||
|
Description:
|
|||
|
Input:
|
|||
|
Return:
|
|||
|
Others:
|
|||
|
*****************************************************************/
|
|||
|
u8 PowerIfSleepSys(void)
|
|||
|
{
|
|||
|
if (s_g_power_machine_state_num == POWER_SYS_S0)
|
|||
|
{
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
void PowerPreSleepSys(void)
|
|||
|
{
|
|||
|
// PowerADCDisable(); //<2F>ܽſ<DCBD><C5BF><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//<2F><>ʱ<EFBFBD>䲻<EFBFBD><E4B2BB><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-7-21/////////////////////////////////////
|
|||
|
|
|||
|
/***********************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***************************
|
|||
|
Function: void PowerUnSleepClearSumSys (void)
|
|||
|
Description:
|
|||
|
Input:
|
|||
|
Return:
|
|||
|
Others:
|
|||
|
*****************************************************************/
|
|||
|
void PowerUnSleepClearSumSys(void)
|
|||
|
{
|
|||
|
s_power_sleep_sum = 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**************************************************
|
|||
|
Function: u8 PowerUnSleepSaveDataMsgSys (void)
|
|||
|
Description:
|
|||
|
Input:
|
|||
|
Return:
|
|||
|
Others:
|
|||
|
*****************************************************************/
|
|||
|
u8 PowerUnSleepSaveDataMsgSys(void)
|
|||
|
{
|
|||
|
return s_power_sleep_flag;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************
|
|||
|
Function: void PowerUnSleepSaveDataClearMsgSys (void)
|
|||
|
Description:
|
|||
|
Input:
|
|||
|
Return:
|
|||
|
Others:
|
|||
|
*****************************************************************/
|
|||
|
void PowerUnSleepSaveDataClearMsgSys(void)
|
|||
|
{
|
|||
|
s_power_sleep_flag = FALSE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void PowerUnSleepSumAddSys(void)
|
|||
|
{
|
|||
|
s_power_sleep_sum++;
|
|||
|
if (s_power_sleep_sum >= 10)//10min
|
|||
|
{
|
|||
|
s_power_sleep_sum = 0;
|
|||
|
s_power_sleep_flag = TRUE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
|