转自:coryxie.blogspot.com
CCM包括FPM(频率预乘)和PLL控制,时钟分布,复位信号产生,以及高级功耗管理等;
第一部分)FPM(频率预乘)和PLL控制
IMX31有3个独立的DPLL,利用PLL时钟源的频率产生3个独立的输出时钟频率,用于3个
不同的时钟域的时钟,包括MCU CLK,USB CLK,SERIAL CLK三个时钟域;时钟源
可以是外部直接的高频时钟(CKIH),或者对低频外部时钟(CKIL)通过FPM来产生高
频时钟源,这种选择是通过对DPLL的寄存器编程来完成的。这种选择可以通过外部管
脚ipp_clkss在复位时的状态或者通过设置CCMR寄存器的PRCS域值来完成。
第二部分)时钟分布
下面我们结合上图来详细分析IMX31的时钟分布情况。
1)CKIL可以是32 kHz, 32.768 kHz 或者 38.4 kHz 的crystal,一方面直接供给RTC时钟;
另一方面接FPM,产生1024*CKIL的输出,作为pll_ref_clk的选项之一。
2)MCU时钟域的关键是MCU Clock Domain Clock Source Switch Unit,该单元的输出
mcu_main_clk可能来自于pll_ref_clk,mpl_dpdgck_clk (MCU PLL output), and
spl_dpdgck_clk (SRPLL output)之一。在pll_ref_clk,mpl_dpdgck_clk之间的选择是通过
设置CCMR寄存器的MPE(使能MCU PLL)和MDS(时钟源选择)来完成的。通过DVFS
(dynamic voltage frequency scaling)的使能来进一步选择是否使用spl_dpdgck_clk作为mcu_main_clk输出。
A)mcu_clk (ipg_clk_arm),用于ARM核,
可达532MHz,用PDR0寄存器MCU_PODF
域来控制;
B)max_clk sub-domain (ipg_clk_ahb),
用于ARM的内部的外设,如十字开关;最大
133MHz,通过PDR0寄存器的MAX_PDOF
来控制;
C)hsp_clk is the clock for the IPU;最大
133MHz,通过PDR0寄存器的HSP_PDOF
来控制;
D)ipg_clk sub-domain clk用于片上的IP外设,
最大62.5MHz,用PDR0寄存器的IPG_PDOF
来控制;
E)nfc_clk (ipg_clk_nfc_20m)通过PDR0寄存器的NFC_PDOF来控制;
F)ckil_mcu_sync_ipg is for the peripheral modules,32-kHz clock。
G)ipg_clk_gacc_mbx_clk is for the MBX module. It is 1/2 of the ipg_ahb_clk,66 MHz.
3)USB 时钟域和SERIAL时钟域和MCU时钟域的分布方法类似,此处略去。