最近使用HC32L130xxx單片機做項目,使用內部RCH做為主時鍾源,RCH時鍾源最高頻率為24M,但是可以通過倍頻PLL到48M,時鍾源示意圖如下圖所示。
配置時鍾時注意事項
1、在配置時鍾源頻率時,不能配置當前正在用的時鍾源。比如當前正在使用RCH作為時鍾源,那么就不可更改RCH的時鍾源,如果要更改,需要將時鍾源切換到其他時鍾源上,比如切換到RLH。然后設置RCH,時鍾源切換完成后,時鍾源在切換到RCH。
2、當時鍾源HCLK大於24M,此處設置FLASH 讀等待周期為1 cycle(前面已經配置,此處無需重復配置),否則當切換時鍾源到PLL48M時鍾源時就會死機。
初始化程序如下所示。PCLK時鍾可以通過Sysctrl_GetPClkFreq()函數讀回,用以驗證時鍾是否設置正確。
-
void App_RCH24MHzToPll48MHz (void)
-
{
-
stc_sysctrl_pll_cfg_t stcPLLCfg;
-
-
-
///<============== 將時鍾從RCH4MHz切換至RCH24MHz ==============================
-
///< RCH時鍾不同頻率的切換,需要先將時鍾切換到RCL,設置好頻率后再切回RCH
-
Sysctrl_SetRCLTrim(SysctrlRclFreq32768);
-
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
-
Sysctrl_SysClkSwitch(SysctrlClkRCL);
-
-
///< 加載目標頻率的RCH的TRIM值
-
Sysctrl_SetRCHTrim(SysctrlRchFreq24MHz);
-
///< 使能RCH(默認打開,此處可不需要再次打開)
-
//Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE);
-
///< 時鍾切換到RCH
-
Sysctrl_SysClkSwitch(SysctrlClkRCH);
-
///< 關閉RCL時鍾
-
Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);
-
-
-
///< 注意十分重要 當前時鍾源HCLK大於24M:此處設置FLASH 讀等待周期為1 cycle(前面已經配置,此處無需重復配置)
-
-
Flash_WaitCycle(FlashWaitCycle1);
-
-
stcPLLCfg.enInFreq = SysctrlPllInFreq20_24MHz; //RCH 24MHz
-
stcPLLCfg.enOutFreq = SysctrlPllOutFreq36_48MHz; //PLL 輸出48MHz
-
stcPLLCfg.enPllClkSrc = SysctrlPllRch; //輸入時鍾源選擇RCH
-
stcPLLCfg.enPllMul = SysctrlPllMul2; //24MHz x 2 = 48MHz
-
Sysctrl_SetPLLFreq(&stcPLLCfg);
-
Sysctrl_SetPLLStableTime(SysctrlPllStableCycle16384);
-
Sysctrl_ClkSourceEnable(SysctrlClkPLL, TRUE);
-
-
///< 時鍾切換
-
Sysctrl_SysClkSwitch(SysctrlClkPLL);
-
-
Sysctrl_GetPClkFreq(); //獲取PCLK時鍾頻率
-
-
-
}
debug在線調試讀取結果。