imx6ul 8 之主频和时钟配置

一、hw原理图
1、32.768kHz的晶振,供给rtc使用
imx6ul 8 之主频和时钟配置_第1张图片
2、在T16和T17两个io上面接了一个24MHz的晶振,整个系统的时钟由该时钟源提供
imx6ul 8 之主频和时钟配置_第2张图片
imx6ul 8 之主频和时钟配置_第3张图片
二、imx6ul系统时钟分析
1、7 路 PLL 时钟源 (都是来自 24 MHZ)(驱动外设)
为了方便生成时钟,6ul从24MHZ晶振生成了7路PLL,这7路PLL有的又生成

  • PLL1 :arm_pll,arm内核用
  • PLL2 : system_pll,固定528m,由24 * 22 = 528,固定22倍频不能修改。又叫做528_pll。此路PLL又分出了4路PFD。共同作为其它外设的根时钟源,如内部系统总线。
  • PLL3 : usb1_pll,可以供usb1phy和其它外设。固定是20倍频,为480MHz,也有四路PFD。pll3_pfd0 -> pll3_pfd3
  • PLL4 : audio_pll , 供音频使用
  • PLL5 : video_pll , 主供视频外设,图像处理有关的外设用,如rgb lcd
  • PLL6 : enet_pll , pll固定为 20 + 5/6 倍频,固定频率为500 MHz,主供网络外设使用
  • PLL7 : usb2_pll,固定频率为480m,固定倍频为20倍,无pfd

2、各路pll分出的pfd

3、时钟树

4、外设如何选择合适的时钟
比如esai的时钟选择
pll4,pll3的pfd2,pll5,pll3

5、要初始化的pll和pfd
PLL1
PLL2及其所有的pfd(528)
PLL3及其所有的pfd(428)
其它按实际需要配置
一般按照时钟树里面的值进行设置(开发指南 page 398)
常用外设时钟数值(参考手册 page 643)

三、imx6ul 时钟配置
1、系统时钟的配置
的撒旦

  • 需要528m,所以在2分频的话—PLL1应该设置为1056m
    分频因子可以是2,也可以配置成其他的值:1 - 8

imx6ul 8 之主频和时钟配置_第4张图片

  • PLL1 = 1056m ,pll1_sw_clk有两路可以选择,分别为pll1_main_clk 和 step_clk , 通过 CCSR 寄存器的pll1
    _sw_clk_sel 位来选择。为 0 的时候是 pll1_main _clk , 为 1 step_clk
  • 在修改PLL1也就是设置系统时钟的时候,需要给6ull一个临时的时钟,它就是step_clk。
    在修改PLL1的时候需要将 pll1_sw _clk 切换到 step_clk 上
  • 设置step_clk,step_clk有两路来源,由 CCSR 的 step_sel位(bit8)来设置,为0 是step_clk = 24MHz
  • 始终切换成功以后,就可以修改PLL1的值
  • PLL output frequency = Fref * DIV_SEL / 2
    fref = 24mhz
    通过CCM_ANALOG_PLL_ARM 寄存器的DIV_SELECT位(bit6 - 0 )来算
    1056 = 24 * DIV_SEL / 2 --------------> DIV_SEL = 88
    还要设置CCM_ANALOG_PLL_ARM寄存器的ENABLE位(bit13)为1,也就是使能输出。
  • 在切换回PLL1之前,设置CACRR寄存器的ARM_PODF = 1 , 也就是2分频
    (一开始的时钟是内部boot_rom初始化的

2、各个PLL时钟的配置
PLL2和PLL3。PLL2固定为528MHZ,PLL3固定为480MHZ,PLL3固定为 480 MHZ。

  • 1、初始化PLL2_PFD0 ~ PFD3。寄存器CCM_ANALOG_PFD_528用于设置4路PFD的时钟。比如 PFD0 = 528 * 18 / PFD0_FRAC。设置 PFD0_FRAC 位即可。比如,PLL2_FRAC 位即可。比如PLL2_PFD0 = 352M = 528 * 18 / PFD_FRAC。
    PFD_FRAC = 27.
  • 2、初始化PLL3_PFD0 ~ PFD3

3、其他外设时钟的配置
AHB_CLK_ROOT,PERCLK_CLK_ROOT,IPG_CLK_ROOT
因为PERCLK_CLK_ROOT,IPG_CLK_ROOT要用到AHB_CLK_ROOT,所以要初始化AHB_CLK_ROOT

  • 1、 AHB_CLK_ROOT
    AHB_CLK_ROOT = 132MHz
    设置CBCMR寄存器的PRE_PERIPH_CLK_SEL位
    设置CBCDR寄存器的PERIPH_CLK_SEL位为0
    设置CBCDR寄存器的AHB_PODF位为3分频,396 -> 132
    用它来生成下面两个时钟源
  • 2、IPG_CLK_ROOT = 66 MHz
    设置CDCSR寄存器IPG_PODF = 1,也就是二分频
    PERCLK_CLK_ROOT = 66 MHz
  • 3、PERCLK_CLK_ROOT
    设置CSCMR1寄存器的PERCLK_CLK_SEL位为0,选择时钟源来自ipg

-----
总结
先配置系统总时钟528MHz,PLL2,PLL3,然后配置它们的8路PFD,然后配置AHB_CLK,因为接下来的IPG_CLK和PERCLK要用到AHB_CLK,而这两个始终被很多外设用到。
其余外设的始终具体用到再具体配置。

你可能感兴趣的:(imx6ul 8 之主频和时钟配置)