mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-22 17:12:55 +08:00
106 lines
2.3 KiB
C
106 lines
2.3 KiB
C
/*
|
|
* Copyright 2022 MindMotion Microelectronics Co., Ltd.
|
|
* All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include "hal_power.h"
|
|
|
|
void CORE_EnterSleepMode(bool sleep_on_exit, bool sleep_deep, POWER_WakeUp_Type mode)
|
|
{
|
|
if (sleep_on_exit)
|
|
{
|
|
SCB->SCR |= SCB_SCR_SLEEPONEXIT_Msk;
|
|
}
|
|
else
|
|
{
|
|
SCB->SCR &= ~SCB_SCR_SLEEPONEXIT_Msk;
|
|
}
|
|
|
|
if (sleep_deep)
|
|
{
|
|
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
|
|
}
|
|
else
|
|
{
|
|
SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;
|
|
}
|
|
|
|
if (mode == POWER_WakeUp_Interrupt)
|
|
{
|
|
__WFI();
|
|
}
|
|
if (mode == POWER_WakeUp_Event)
|
|
{
|
|
__WFE();
|
|
}
|
|
}
|
|
|
|
void POWER_EnterRunMode(void)
|
|
{
|
|
PWR_EnableLowPowerRunMode(PWR, false);
|
|
}
|
|
|
|
void POWER_EnableLowPowerRunMode(void)
|
|
{
|
|
PWR_EnableLowPowerRunMode(PWR, true);
|
|
}
|
|
|
|
void POWER_EnterSleepMode(POWER_SleepConf_Type * conf)
|
|
{
|
|
CORE_EnterSleepMode(conf->SleepOnExit, false, conf->WakeUpMode);
|
|
}
|
|
|
|
void POWER_EnterStopMode(POWER_StopConf_Type * conf)
|
|
{
|
|
PWR_EnterStopMode(PWR, conf->DeepStop);
|
|
|
|
CORE_EnterSleepMode(false, true, conf->WakeUpMode);
|
|
}
|
|
|
|
void POWER_EnableStandbyWakeUpPin(PWR_StandbyWakeUpPinConf_Type * conf)
|
|
{
|
|
PWR_EnableStandbyWakeUpPin(PWR, conf);
|
|
}
|
|
|
|
void POWER_EnterStandbyMode(POWER_StandbyConf_Type * conf)
|
|
{
|
|
PWR_EnterStandbyMode(PWR, conf->Delay);
|
|
|
|
CORE_EnterSleepMode(false, true, conf->WakeUpMode);
|
|
}
|
|
|
|
void POWER_SelectMode(POWER_Mode_Type mode, void * conf)
|
|
{
|
|
switch (mode)
|
|
{
|
|
case POWER_Mode_Run:
|
|
POWER_EnterRunMode();
|
|
break;
|
|
case POWER_Mode_LowPowerRun:
|
|
POWER_EnableLowPowerRunMode();
|
|
break;
|
|
case POWER_Mode_Sleep:
|
|
POWER_EnterSleepMode( (POWER_SleepConf_Type *) conf);
|
|
break;
|
|
case POWER_Mode_LowPowerSleep:
|
|
POWER_EnableLowPowerRunMode();
|
|
POWER_EnterSleepMode( (POWER_SleepConf_Type *) conf);
|
|
break;
|
|
case POWER_Mode_Stop:
|
|
POWER_EnterStopMode( (POWER_StopConf_Type *) conf);
|
|
break;
|
|
case POWER_Mode_DeepStop:
|
|
POWER_EnterStopMode( (POWER_StopConf_Type *) conf);
|
|
break;
|
|
case POWER_Mode_Standby:
|
|
POWER_EnterStandbyMode( (POWER_StandbyConf_Type *) conf);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* EOF. */
|