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

[复制链接]
99|4
 楼主 | 2019-11-7 13:47 | 显示全部楼层 |阅读模式
本帖最后由 xinmeng_wit 于 2019-11-7 13:49 编辑

时钟系统是所有外设的基础,AC7811系统时钟可以最高达到100MHz。时钟系统其实官方手册里面写的很清楚。

捕获1.PNG

系统时钟框图如下:

捕获2.PNG

从上图可以看出,如果我们要修改sys_clk的时钟评率,那么我们只需要修改如下几个参数:
①sys_clk_sel
②pll_clk_div
③pll_div
④syspll
⑤pll_ref_sel

系统时钟再进一步细化:

捕获3.PNG

示例工程里的代码已经对系统时钟进行了设置,下面进行分析。

捕获5.PNG

启动文件里面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。

以上分析完毕。



使用特权

评论回复
| 2019-11-7 15:28 | 显示全部楼层
不错的分析,很好看懂

使用特权

评论回复
| 2019-11-7 15:28 | 显示全部楼层
不错的分析,很好看懂

使用特权

评论回复
| 2019-11-11 19:59 | 显示全部楼层
感谢楼主的分析

使用特权

评论回复
| 2019-11-17 17:53 | 显示全部楼层
感谢楼主详细的分析说明

使用特权

评论回复
扫描二维码,随时随地手机跟帖
*滑动验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表