(8)IMX6ULL主时钟配置一般方法论
时钟配置
时钟配置需要看三个方面【时钟源选择】【时钟路径选择】【时钟目标选择】
(1)看时钟树,找想配置的【时钟目标】
选择想要配置的是时钟,了解其【时钟源】【时钟路径】I.MX6U 参考手册 P 628
(2)找到了之后,明确时钟源和时钟路径。通过公式选择好想用时钟源和时钟路径。
(3)配置时钟源
时钟源又分为两种:【PLL自身的主时钟源的配置】【PLL经过开关切换的选择配置】
【PLL自身的主时钟源的配置】:主要是在“CCM Analog Memory”P 710处看
【PLL经过开关切换的选择配置】:主要在“CCM internal clock generation”章节,看Switcher clock generation(切换时钟生成图)
看图找到寄存器的对应位,在进行配置。
例如:我们想配置芯片的主时钟。
(1)找想配置的【时钟目标】

找到了ARM时钟,【时钟源】为PLL1,路径可分频,与CACRR寄存器相关。
(2)找到了之后,明确时钟源和时钟路径。通过公式选择好想用时钟源和时钟路径。
我们想让主时钟以528M的频率工作 我们可以选择 PLL1输出1056M,再在路径上分频,最后输出1056/2=528M。
(3)配置时钟源
然后我们看PLL1时钟源的配置。
【PLL自身的主时钟源的配置】:


得到了一个公式:Fout = Fin * div /2。
这里我们需要的是1056M,Fin=24M(板载晶振写着24M),那么通过计算我们得到DIV_SELECT=1056/12=88
所以我们此参数配置为88,enable设为1。
【PLL经过开关切换的选择配置】:我们在想要改变PLL1的输出的过程中,我们需要先将系统的所需要的时钟进行切换。总结为:先让系统用别的时钟,再配置需要的时钟,再切换回需要的时钟。
这时我们就需要看PLL的其他路径,如图:

图中可以看出,PLL1的输出与CCSR寄存器有关。①处的数据选择器,选择了用PLL1主时钟or step_clk。②处选择了用OSC(也就是板载24M晶振)还是PFD时钟。③处选择了具体用哪个时钟。
我们的目的是:将PLL1(996M)改为1056M,我们可以
CCSR: pll1_sw_clk_sel = 0;
CCSR: step_sel = 0;
这样我们选择了 24M以供系统正常运行。
再配置CCM_ANALOG_PLL_ARMn寄存器,改变PLL1:
CCM_ANALOG_PLL_ARMn:ENABLE = 1;
CCM_ANALOG_PLL_ARMn:DIV_SELECT = 88;
最后切换回PLL1:
CCSR: pll1_sw_clk_sel = 1;
此时就用到了1056M的时钟。接下来配置二分频:

此图可以看出与CACRR寄存器相关,那我们找CACRR寄存器


他的信息如下,我们只要让后三位 = 001即可二分频。
至此,主时钟的配置完成,输出为1056/2 = 528M。