打印
[活动专区]

【AC7811开发板试用活动】时钟系统分析

[复制链接]
860|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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。

以上分析完毕。



使用特权

评论回复

相关帖子

沙发
RunningX| | 2019-11-7 15:28 | 只看该作者
不错的分析,很好看懂

使用特权

评论回复
板凳
RunningX| | 2019-11-7 15:28 | 只看该作者
不错的分析,很好看懂

使用特权

评论回复
地板
condition| | 2019-11-11 19:59 | 只看该作者
感谢楼主的分析

使用特权

评论回复
5
consumption| | 2019-11-17 17:53 | 只看该作者
感谢楼主详细的分析说明

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

243

帖子

1

粉丝