17#ifndef FSL_COMPONENT_ID
18#define FSL_COMPONENT_ID "platform.drivers.smc"
76#if (defined(FSL_FEATURE_SMC_HAS_PARAM) && FSL_FEATURE_SMC_HAS_PARAM)
87 uint32_t reg = base->PARAM;
88 param->hsrunEnable = (
bool)(reg & SMC_PARAM_EHSRUN_MASK);
89 param->llsEnable = (
bool)(reg & SMC_PARAM_ELLS_MASK);
90 param->lls2Enable = (
bool)(reg & SMC_PARAM_ELLS2_MASK);
91 param->vlls0Enable = (
bool)(reg & SMC_PARAM_EVLLS0_MASK);
153 reg &= ~SMC_PMCTRL_RUNM_MASK;
160#if (defined(FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) && FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE)
173 reg &= ~SMC_PMCTRL_RUNM_MASK;
190 SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;
209#if (defined(FSL_FEATURE_SMC_HAS_PSTOPO) && FSL_FEATURE_SMC_HAS_PSTOPO)
211 reg = base->STOPCTRL;
212 reg &= ~SMC_STOPCTRL_PSTOPO_MASK;
213 reg |= ((uint32_t)option << SMC_STOPCTRL_PSTOPO_SHIFT);
214 base->STOPCTRL = reg;
219 reg &= ~SMC_PMCTRL_STOPM_MASK;
224 SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
231 if (base->PMCTRL & SMC_PMCTRL_STOPA_MASK)
248#
if (defined(FSL_FEATURE_SMC_HAS_LPWUI) && FSL_FEATURE_SMC_HAS_LPWUI)
257#if (defined(FSL_FEATURE_SMC_HAS_LPWUI) && FSL_FEATURE_SMC_HAS_LPWUI)
262 reg |= SMC_PMCTRL_LPWUI_MASK;
267 reg &= ~SMC_PMCTRL_LPWUI_MASK;
272 reg &= ~SMC_PMCTRL_RUNM_MASK;
289 SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;
309 reg &= ~SMC_PMCTRL_STOPM_MASK;
314 SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
321 if (base->PMCTRL & SMC_PMCTRL_STOPA_MASK)
331#if (defined(FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE)
339#
if ((defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE) || \
340 (defined(FSL_FEATURE_SMC_HAS_LPOPO) && FSL_FEATURE_SMC_HAS_LPOPO))
350 reg &= ~SMC_PMCTRL_STOPM_MASK;
355#if (defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE)
356 reg = base->STOPCTRL;
357 reg &= ~SMC_STOPCTRL_LLSM_MASK;
358 reg |= ((uint32_t)
config->subMode << SMC_STOPCTRL_LLSM_SHIFT);
359 base->STOPCTRL = reg;
362#if (defined(FSL_FEATURE_SMC_HAS_LPOPO) && FSL_FEATURE_SMC_HAS_LPOPO)
363 if (
config->enableLpoClock)
365 base->STOPCTRL &= ~SMC_STOPCTRL_LPOPO_MASK;
369 base->STOPCTRL |= SMC_STOPCTRL_LPOPO_MASK;
374 SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
381 if (base->PMCTRL & SMC_PMCTRL_STOPA_MASK)
392#if (defined(FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE)
404#if (defined(FSL_FEATURE_SMC_HAS_PORPO) && FSL_FEATURE_SMC_HAS_PORPO)
405#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG) || \
406 (defined(FSL_FEATURE_SMC_USE_STOPCTRL_VLLSM) && FSL_FEATURE_SMC_USE_STOPCTRL_VLLSM) || \
407 (defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE)
412 if (
config->enablePorDetectInVlls0)
414#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG)
415 base->VLLSCTRL &= ~SMC_VLLSCTRL_PORPO_MASK;
417 base->STOPCTRL &= ~SMC_STOPCTRL_PORPO_MASK;
422#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG)
423 base->VLLSCTRL |= SMC_VLLSCTRL_PORPO_MASK;
425 base->STOPCTRL |= SMC_STOPCTRL_PORPO_MASK;
431#if (defined(FSL_FEATURE_SMC_HAS_RAM2_POWER_OPTION) && FSL_FEATURE_SMC_HAS_RAM2_POWER_OPTION)
435 if (
config->enableRam2InVlls2)
437#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG)
438 base->VLLSCTRL |= SMC_VLLSCTRL_RAM2PO_MASK;
440 base->STOPCTRL |= SMC_STOPCTRL_RAM2PO_MASK;
445#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG)
446 base->VLLSCTRL &= ~SMC_VLLSCTRL_RAM2PO_MASK;
448 base->STOPCTRL &= ~SMC_STOPCTRL_RAM2PO_MASK;
459 reg &= ~SMC_PMCTRL_STOPM_MASK;
464#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG)
465 reg = base->VLLSCTRL;
466 reg &= ~SMC_VLLSCTRL_VLLSM_MASK;
467 reg |= ((uint32_t)
config->subMode << SMC_VLLSCTRL_VLLSM_SHIFT);
468 base->VLLSCTRL = reg;
470#if (defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE)
471 reg = base->STOPCTRL;
472 reg &= ~SMC_STOPCTRL_LLSM_MASK;
473 reg |= ((uint32_t)
config->subMode << SMC_STOPCTRL_LLSM_SHIFT);
474 base->STOPCTRL = reg;
476 reg = base->STOPCTRL;
477 reg &= ~SMC_STOPCTRL_VLLSM_MASK;
478 reg |= ((uint32_t)
config->subMode << SMC_STOPCTRL_VLLSM_SHIFT);
479 base->STOPCTRL = reg;
483#if (defined(FSL_FEATURE_SMC_HAS_LPOPO) && FSL_FEATURE_SMC_HAS_LPOPO)
484 if (
config->enableLpoClock)
486 base->STOPCTRL &= ~SMC_STOPCTRL_LPOPO_MASK;
490 base->STOPCTRL |= SMC_STOPCTRL_LPOPO_MASK;
495 SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
502 if (base->PMCTRL & SMC_PMCTRL_STOPA_MASK)
static constexpr persistent_config_s * config
status_t SMC_SetPowerModeLls(SMC_Type *base #if((defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) &&FSL_FEATURE_SMC_HAS_LLS_SUBMODE)||\(defined(FSL_FEATURE_SMC_HAS_LPOPO) &&FSL_FEATURE_SMC_HAS_LPOPO)), const smc_power_mode_lls_config_t *config #endif)
static uint32_t g_savedPrimask
void(* smc_stop_ram_func_t)(void)
status_t SMC_SetPowerModeVlpr(SMC_Type *base #if(defined(FSL_FEATURE_SMC_HAS_LPWUI) &&FSL_FEATURE_SMC_HAS_LPWUI), bool wakeupMode #endif)
static void SMC_EnterStopRamFunc(void)
static uint16_t s_stopRamFuncArray[]
int32_t status_t
Type used for all status and error return values.
void SMC_GetParam(SMC_Type *base, smc_param_t *param)
Gets the SMC parameter.
void SMC_PostExitStopModes(void)
Recovers after wake up from stop modes.
void SMC_PreEnterWaitModes(void)
Prepares to enter wait modes.
void SMC_PreEnterStopModes(void)
Prepares to enter stop modes.
status_t SMC_SetPowerModeVlpw(SMC_Type *base)
Configures the system to VLPW power mode.
enum _smc_partial_stop_mode smc_partial_stop_option_t
Partial STOP option.
status_t SMC_SetPowerModeVlps(SMC_Type *base)
Configures the system to VLPS power mode.
status_t SMC_SetPowerModeRun(SMC_Type *base)
Configures the system to RUN power mode.
status_t SMC_SetPowerModeStop(SMC_Type *base, smc_partial_stop_option_t option)
Configures the system to Stop power mode.
status_t SMC_SetPowerModeWait(SMC_Type *base)
Configures the system to WAIT power mode.
void SMC_PostExitWaitModes(void)
Recovers after wake up from stop modes.
status_t SMC_SetPowerModeVlls(SMC_Type *base, const smc_power_mode_vlls_config_t *config)
Configures the system to VLLS power mode.
status_t SMC_SetPowerModeHsrun(SMC_Type *base)
Configures the system to HSRUN power mode.
SMC Low-Leakage Stop power mode configuration.
SMC Very Low-Leakage Stop power mode configuration.
static tstrWifiInitParam param