226 lines
6.4 KiB
C
226 lines
6.4 KiB
C
|
/********************************************************************************
|
|||
|
Copyright (C), Sinowealth Electronic. Ltd.
|
|||
|
Author: Sino
|
|||
|
Version: V0.0
|
|||
|
Date: 2020/04/26
|
|||
|
History:
|
|||
|
V2.0 2020/04/26 Preliminary
|
|||
|
********************************************************************************/
|
|||
|
#include "Main.h"
|
|||
|
|
|||
|
|
|||
|
BOOL bSleepFlg; //ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>IDLE<4C><45>־
|
|||
|
BOOL bPDFlg;
|
|||
|
BOOL bWakeupFlg;
|
|||
|
BOOL bPCEnterPDFlg; //PC֪ͨϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>SLEEP<45><50>־
|
|||
|
U8 xdata ucSleepTimerCnt;
|
|||
|
U8 xdata ucPDTimerCnt;
|
|||
|
U8 xdata ucResetFlag;
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: WakeUpProcess
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>Sleepģʽ<EFBFBD><EFBFBD><EFBFBD>ѣ<EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*************************************************************************************************/
|
|||
|
void WakeUpProcess(void)
|
|||
|
{
|
|||
|
if(bWakeupFlg)
|
|||
|
{
|
|||
|
bWakeupFlg = 0;
|
|||
|
if(bSleepFlg)
|
|||
|
{
|
|||
|
McuClockSet(MCU_CLK_24MHz);
|
|||
|
IrqEn();
|
|||
|
|
|||
|
bSleepFlg = 0;
|
|||
|
ucSleepTimerCnt = 0;
|
|||
|
Delay1ms(1);
|
|||
|
|
|||
|
#if (UART0_DEFINE != 0)
|
|||
|
IrqUart0En(); //<2F><><EFBFBD><EFBFBD>uart0<74>ж<EFBFBD>
|
|||
|
#endif
|
|||
|
IrqTimer3En(); //<2F><><EFBFBD><EFBFBD>Timer3<72>ж<EFBFBD>
|
|||
|
McuTwiEn(); //<2F><><EFBFBD><EFBFBD>MCU Twiģ<69><C4A3>
|
|||
|
|
|||
|
AfeAlarmDis(AFE_ALARM_SC | AFE_ALARM_OV | AFE_ALARM_CD);
|
|||
|
AfeTempADCEn(); //<2F><><EFBFBD><EFBFBD>AFE<46>¶Ȳɼ<C8B2>
|
|||
|
AfeWDTEn(); //<2F><><EFBFBD><EFBFBD>AFE WDT
|
|||
|
}
|
|||
|
ucSleepTimerCnt = 0;
|
|||
|
ucPDTimerCnt = 0;
|
|||
|
ucUart0TimeoutCnt = 0;
|
|||
|
ucUart1TimeoutCnt = 0;
|
|||
|
ucUart2TimeoutCnt = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SystemIntoPD
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
*************************************************************************************************/
|
|||
|
void SystemIntoPD(void)
|
|||
|
{
|
|||
|
while(1)
|
|||
|
{
|
|||
|
McuWDTClear(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
|||
|
|
|||
|
IrqDis(); //<2F>ر<EFBFBD><D8B1>ж<EFBFBD>Դ
|
|||
|
// LEDAllOff(); //<2F>ر<EFBFBD>LED<45><44>ʾ
|
|||
|
BlueToothPowerDis(); //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
AFEMosCtl(0); //<2F>ر<EFBFBD>MOS<4F><53><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
AFEEnterPD(); //<2F>ر<EFBFBD>3.3V<EFBFBD><EFBFBD>Դ
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SystemIntoSleep
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IDLE<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PD
|
|||
|
*************************************************************************************************/
|
|||
|
void SystemIntoSleep(void)
|
|||
|
{
|
|||
|
// LEDAllOff(); //<2F>ر<EFBFBD>LED<45><44>ʾ
|
|||
|
BlueToothPowerDis(); //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
bLedDisBleFlg = 0;
|
|||
|
|
|||
|
AfeWDTDis(); //<2F>ر<EFBFBD>AFE WDT
|
|||
|
AfeTempADCDis(); //<2F>ر<EFBFBD>AFE<46>¶Ȳɼ<C8B2>
|
|||
|
AfeAlarmEn(AFE_ALARM_SC | AFE_ALARM_OV | AFE_ALARM_CD); //<2F><><EFBFBD><EFBFBD>SC,OV,CD<43><44>Alarm<72><6D><EFBFBD><EFBFBD>
|
|||
|
McuTwiDis(); //<2F>ر<EFBFBD>MCU Twiģ<69>齵<EFBFBD><EFBFBD><CDB9><EFBFBD>
|
|||
|
McuPWM2Dis(); //<2F>ر<EFBFBD>MCU PWMģ<4D><C4A3>
|
|||
|
if(bDSGMOS) //DSG<53><47><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ
|
|||
|
{
|
|||
|
IO_DSG_PWM = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
IO_DSG_PWM = 0;
|
|||
|
}
|
|||
|
Delay1ms(1);
|
|||
|
|
|||
|
IrqDis(); //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>ж<EFBFBD>Դ
|
|||
|
#if (UART0_DEFINE != 0)
|
|||
|
IrqUart0Dis();
|
|||
|
#endif
|
|||
|
#if (UART1_DEFINE != 0)
|
|||
|
IrqUart1Dis();
|
|||
|
#endif
|
|||
|
#if (UART2_DEFINE != 0)
|
|||
|
IrqUart2Dis();
|
|||
|
#endif
|
|||
|
IrqTimer3Dis(); //<2F>ر<EFBFBD>Timer3<72>ж<EFBFBD>
|
|||
|
IrqINT4FlgClr(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>ж<EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
McuClockSet(MCU_CLK_128KHz); //<2F><><EFBFBD><EFBFBD>ϵͳʱ<CDB3><CAB1>Ϊ128KHz
|
|||
|
IrqEn();
|
|||
|
|
|||
|
McuIntoPD(); //MCU<43><55><EFBFBD><EFBFBD>PD<50><44><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ALARM<52><4D><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>sleep<65><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>й<EFBFBD>DSG MOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD>Ŀգ<C4BF><D5A3><EFBFBD><EFBFBD>ǣ<EFBFBD>AFE<46>ڲ<EFBFBD>Ԥ<EFBFBD><D4A4>FUSE<53><45><EFBFBD><EFBFBD>VDD<44><44>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>4Vʱ<56><CAB1><EFBFBD>ر<EFBFBD>LDO<44><4F>ʹV33<33>ϵ硣
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: LowPowerCheck
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IDLE<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PD
|
|||
|
*************************************************************************************************/
|
|||
|
void LowPowerCheck(void)
|
|||
|
{
|
|||
|
if(bPCEnterPDFlg && (bUart0SndAckFlg||bUart1SndAckFlg||bUart2SndAckFlg)) //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>PD
|
|||
|
{
|
|||
|
bPCEnterPDFlg = 0;
|
|||
|
bPDFlg = 1;
|
|||
|
}
|
|||
|
else if(bCTO) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߺ<EFBFBD><DFBA><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>PD
|
|||
|
{
|
|||
|
if(++ucPDTimerCnt >= E2ucLowPowerDeley)
|
|||
|
{
|
|||
|
ucPDTimerCnt = E2ucLowPowerDeley;
|
|||
|
bPDFlg = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
else if(!bLedDisFlg) //LED<45><44>ʾ<EFBFBD>رպ<D8B1><D5BA><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB9><EFBFBD>
|
|||
|
{
|
|||
|
if(!bCHGING && !bDSGING) //<2F>dz<EFBFBD><C7B3>Ƿ<EFBFBD>״̬
|
|||
|
{
|
|||
|
if(bUV) //<2F><><EFBFBD><EFBFBD>Ƿѹ<C7B7><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>PD
|
|||
|
{
|
|||
|
if(++ucPDTimerCnt >= E2ucLowPowerDeley)
|
|||
|
{
|
|||
|
ucPDTimerCnt = E2ucLowPowerDeley;
|
|||
|
bPDFlg = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
else //δ<><CEB4><EFBFBD><EFBFBD>Ƿѹ<C7B7><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>IDLE
|
|||
|
{
|
|||
|
ucPDTimerCnt = 0;
|
|||
|
if(!(bOTC | bUTC | bOV | bOCC | bOTD | bUTD | bUV | bOCD1 | bOCD2 | bAFE_SC | bLedDisBleFlg))
|
|||
|
{
|
|||
|
if(++ucSleepTimerCnt >= E2ucLowPowerDeley)
|
|||
|
{
|
|||
|
ucSleepTimerCnt = E2ucLowPowerDeley;
|
|||
|
bSleepFlg = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ucSleepTimerCnt = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ucSleepTimerCnt = 0;
|
|||
|
ucPDTimerCnt = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ucSleepTimerCnt = 0;
|
|||
|
ucPDTimerCnt = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: LowPowerProcess
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IDLE<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PD
|
|||
|
*************************************************************************************************/
|
|||
|
void LowPowerProcess(void)
|
|||
|
{
|
|||
|
if(!bSleepFlg && !bPDFlg)
|
|||
|
{
|
|||
|
IrqDis();
|
|||
|
if(!(bKeyFlg | bCaliFlg | bMcuFlashWrFlg | bWakeupFlg | bISPFlg | bTimer50msFlg | bTimer1sFlg) && (ucResetFlag!=0x12))
|
|||
|
{
|
|||
|
IrqEn();
|
|||
|
McuIntoIdle();
|
|||
|
}
|
|||
|
IrqEn();
|
|||
|
}
|
|||
|
else if(bPDFlg)
|
|||
|
{
|
|||
|
bMcuFlashWrFlg = 1;
|
|||
|
McuFlashProcess();
|
|||
|
SystemIntoPD();
|
|||
|
}
|
|||
|
else if(bSleepFlg)
|
|||
|
{
|
|||
|
SystemIntoSleep();
|
|||
|
}
|
|||
|
|
|||
|
WakeUpProcess(); //ϵͳ<CFB5>ӵ<D3B5><CDB9>Ļ<EFBFBD><C4BB><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
|