本帖最后由 xinmeng_wit 于 2019-11-7 13:49 编辑
时钟系统是所有外设的基础,AC7811系统时钟可以最高达到100MHz。时钟系统其实官方手册里面写的很清楚。
系统时钟框图如下:
从上图可以看出,如果我们要修改sys_clk的时钟评率,那么我们只需要修改如下几个参数:
①sys_clk_sel
②pll_clk_div
③pll_div
④syspll
⑤pll_ref_sel
系统时钟再进一步细化:
示例工程里的代码已经对系统时钟进行了设置,下面进行分析。
启动文件里面main函数之前先调用SystemInit函数进行时钟设置。
void SystemInit (void)
{
SetEflashClock();
SetSysClock();
CKGEN_SetAPBClockDivider(APBCLK_DIV);
CKGEN_SetSFlashClock(SFLASH_CLK_SEL_APB, SFLASH_DIVIDER_2);
//SPM_EnableLVD(0); //disable LVD if need
} 再进入到SetSysClock()函数
void SetSysClock(void)
{
#if AC78XX_CLOCK_SRC == IC_CLOCK_SRC_XOSC
SetXOSCClock();
#elif AC78XX_CLOCK_SRC == IC_CLOCK_SRC_HSI
SetHSIClock();
#elif AC78XX_CLOCK_SRC == IC_CLOCK_SRC_HSE
SetHSEClock();
#else
SetHSEBYPClock();
#endif
} 再进入到SetHSEClock()函数
void SetHSEClock(void)
{
SPM_EnableXOSC(1);
CKGEN_SetPLLReference(PLL_REF_EXTERNAL_OSC);//PLL输入时钟选择外部时钟(8M)
CKGEN_SetPllPrevDiv(PLL_PREDIV);//PREDIV选择1分频
CKGEN_SetPllPostDiv(PLL_POSDIV);//POSTDIV选择4分频
CKGEN_SetPllFeedbackDiv(PLL_FBKDIV);//FBKDIV设置为96
SPM_EnablePLL(1);
CKGEN_SetSysclkDiv(SYSCLK_DIV);//SYSCLK_DIV选择1分频
CKGEN_SetSysclkSrc(SYSCLK_SRC_PLL_OUTPUT);//系统时钟选择pll时钟
} 根据计算公式:sysclk=VCO/POSDIV/2/pll_clk_div/sysclk_div=(输入频率*FBKDIV/PREDIV)/POSDIV/2/pll_clk_div/sysclk_div=8*96/1/4/2/1/1=96(MHz)
所以系统时钟为96M。
以上分析完毕。
|