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;
}
Exemple #2
0
/*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;
}