clock_manager_error_code_t CLOCK_SYS_GetFreq(clock_names_t clockName, uint32_t *frequency) { clock_manager_error_code_t returnCode = kClockManagerSuccess; switch (clockName) { case kCoreClock: case kSystemClock: *frequency = CLOCK_SYS_GetCoreClockFreq(); break; case kPlatformClock: *frequency = CLOCK_SYS_GetSystemClockFreq(); break; case kBusClock: *frequency = CLOCK_SYS_GetBusClockFreq(); break; case kFlexBusClock: *frequency = CLOCK_SYS_GetFlexbusFreq(); break; case kFlashClock: *frequency = CLOCK_SYS_GetFlashClockFreq(); break; case kOsc32kClock: *frequency = CLOCK_SYS_GetExternalRefClock32kFreq(); break; case kOsc0ErClock: *frequency = CLOCK_SYS_GetOsc0ExternalRefClockFreq(); break; case kRtcoutClock: *frequency = CLOCK_SYS_GetRtcOutFreq(); break; case kMcgFfClock: *frequency = CLOCK_SYS_GetFixedFreqClockFreq(); break; case kMcgFllClock: *frequency = CLOCK_HAL_GetFllClk(MCG_BASE); break; case kMcgPll0Clock: *frequency = CLOCK_HAL_GetPll0Clk(MCG_BASE); break; case kMcgOutClock: *frequency = CLOCK_HAL_GetOutClk(MCG_BASE); break; case kMcgIrClock: *frequency = CLOCK_HAL_GetInternalRefClk(MCG_BASE); break; case kLpoClock: *frequency = CLOCK_SYS_GetLpoClockFreq(); break; default: *frequency = 0U; returnCode = kClockManagerNoSuchClockName; break; } return returnCode; }
/*FUNCTION********************************************************************** * Function Name : POWER_SYS_CheckClocks * Description :Internal function used by POWER_SYS_SetMode function *END**************************************************************************/ static power_manager_error_code_t POWER_SYS_CheckClocks(power_manager_modes_t mode) { #if POWER_VLPR_MCG_LITE mcglite_mode_t mcgMode = CLOCK_HAL_GetMode(MCG); #else mcg_modes_t mcgMode = CLOCK_HAL_GetMcgMode(MCG); /* Check clock monitors */ switch(mode) { #if FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE case kPowerManagerHsrun: #endif case kPowerManagerRun: case kPowerManagerWait: /* Clock monitors can be enabled */ break; default: /* For other modes clock monitors should be disabled */ #if FSL_FEATURE_MCG_HAS_EXTERNAL_CLOCK_MONITOR if( CLOCK_HAL_IsOsc0MonitorEnabled(MCG) ) { return kPowerManagerErrorClock; } #endif #if FSL_FEATURE_MCG_HAS_RTC_32K if( CLOCK_HAL_IsRtcOscMonitorEnabled(MCG) ) { return kPowerManagerErrorClock; } #endif #if FSL_FEATURE_MCG_USE_PLLREFSEL if( CLOCK_HAL_IsOsc1MonitorEnabled(MCG) ) { return kPowerManagerErrorClock; } #endif break; } #endif /* We need check clocks if goes into VLPR or VLPW over VLPR */ if( (mode!=kPowerManagerVlpr) && (mode!=kPowerManagerVlpw) ) { return kPowerManagerSuccess; } #if POWER_VLPR_MCG_LITE switch(mcgMode) { case kMcgliteModeLirc8M: case kMcgliteModeLirc2M: case kMcgliteModeExt: /* allowed modes */ break; default: return kPowerManagerErrorClock; } if(CLOCK_SYS_GetFlashClockFreq() > POWER_VLPR_MAX_FLASH_BLPE_CLK) { return kPowerManagerErrorClock; } #else switch(mcgMode) { case kMcgModeBLPI: /* fast IRC must be selected */ if(CLOCK_HAL_GetInternalRefClkMode(MCG) != kMcgIrcFast) { return kPowerManagerErrorClock; } if(CLOCK_SYS_GetFlashClockFreq() > POWER_VLPR_MAX_FLASH_BLPI_CLK) { return kPowerManagerErrorClock; } break; case kMcgModeBLPE: if(CLOCK_SYS_GetFlashClockFreq() > POWER_VLPR_MAX_FLASH_BLPE_CLK) { return kPowerManagerErrorClock; } break; default: return kPowerManagerErrorClock; } #endif if(CLOCK_SYS_GetCoreClockFreq() > POWER_VLPR_MAX_CLK) { return kPowerManagerErrorClock; } if(CLOCK_SYS_GetBusClockFreq() > POWER_VLPR_MAX_CLK) { return kPowerManagerErrorClock; } if(CLOCK_SYS_GetSystemClockFreq() > POWER_VLPR_MAX_CLK) { return kPowerManagerErrorClock; } return kPowerManagerSuccess; }