PASII/CandeII_1.4/Taskrun/LowPow_Task.c

79 lines
1.9 KiB
C
Raw Normal View History

/*****************************************************************
;Project: Light
;MCU:
;Date:
;File:
;Function:
******************************************************************/
#include "LowPow_Task.h"
#include "tick.h"
#include "config.h"
#include "ws2812.h"
#include "delay.h"
#include "key.h"
#include "gpio.h"
#include "wdt.h"
/*---------------------------------------------------------------*/
//<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
extern TaskFlagUnion_t tTaskFlag;
extern unsigned char BetteryConnectFlag;
extern uint8_t Adv_State;
/*---------------------------------------------------------------*/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned int SleepCount = 0;
/*---------------------------------------------------------------*/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void PowerDown(void);
/*---------------------------------------------------------------*/
//<2F>͹<EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void LowPow_Task(void)
{
if(tTaskFlag.TaskFlagValue==0)
{
if((SleepCount >= SLEEPTIME)&&(Adv_State == 0))
{
__disable_irq();
LedBuff_WriteNum(10,0x00ffff); //<2F><>ɫ
WS_Show_Disable_irq();
delay_ms(1000);
LedBuff_WriteNum(10,0x000000);
WS_Show_Disable_irq();
WS_Power(DISABLE);
__disable_irq();
wdt_clear(); //<2F><><EFBFBD><EFBFBD>ǰιһ<CEB9>ι<EFBFBD>
wdt_disable(); //<2F>رտ<D8B1><D5BF>Ź<EFBFBD>
PowerDown();
SystemSleep();
WS_Power(ENABLE);
delay_ms(10);
__enable_irq();
wdt_enable(128*5); //<2F><><EFBFBD>Ѻ<EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF>Ź<EFBFBD>
}
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
{
SleepCount = 0;
}
}
/*---------------------------------------------------------------*/
//dz<><C7B3><EFBFBD><EFBFBD><EFBFBD>߻<EFBFBD><DFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void PowerDown(void)
{
struct gap_wakeup_config pw_cfg;
pw_cfg.wakeup_type = SLEEP_WAKEUP;
pw_cfg.wdt_wakeup_en = (bool)false;
pw_cfg.rtc_wakeup_en = (bool)false;
pw_cfg.timer_wakeup_en = (bool)false;
pw_cfg.gpi_wakeup_en = (bool)true;
pw_cfg.gpi_wakeup_cfg = U32BIT(SHOCK_PIN); //<2F>жϻ<D0B6><CFBB><EFBFBD>pin
WakeupConfig(&pw_cfg);
}
/*---------------------------------------------------------------*/