嵌入式Linux学习记录之IMX6U时钟
记录一下2020未来的广交大的Linux学习过程--简化笔记
32.768khz晶振 给RTC使用
6U的T16和T17两个IO接上了24Mhz的晶振
7路PLL-----数据手册18章
从24Mhz晶振生出来7路PLL,7路PLL有的又生出来PFD
PLL1----ARM PLL 供给ARM内核 最高1.3Ghz
PLL2 ----System PLL 528Mhz = 24Mhz*22
分出4路PFD,分别位PFD2_PLL0~3
PLL3---- USB1 PLL 24Mhz*20=480Mhz
分出4路PFD,分别位PFD3_PLL0~3
PLL4----Audio PLL, 主供给音频SAI
PLL5 ----Video PLL ,主供给视频外设,和图像处理有关的
PLL6 --- ENET PLL ,主供给网络外设
PLL7----USB2 480Mhz 无PFD
必须初始化的PLL和PFD
PLL1
PLL2 、 PLL2_PFD0~PFD3
PLL3 、 PLL3_PFD0~PFD3
数据手册643页 设置参考各种不同的最高时钟频率
I.MX6U系统配置
PLL output frequency = Fref * DIV_SEL/2
1、系统主频的配置 P630\648\
1.设置ARM 内核主频为528Mhz ,设置CACRR寄存器(665页)的ARM_PODF位为2分频,然后设置PLL1=1056Mhz即可。CACRR的bit3~0为ARM_PODF位,可设置0~7,分别对应1~8分频。应该设置CACRR寄存器的ARM_PODF=1
2.设置PLL1=1056Mhz,PLL1=pll1_w_clk,有两路可以选择,分别为pll1_main_clk,step_clk , 通过CCSR寄存器的pll1_sw_clk_sel位来选择,为0选择pll1_main_clk, 为1选择step_clk
3.修改PLL1时,设置系统时钟时需要给6ULL一个临时时钟,就是step_clk。在修改PLL1时需要切换pll1_sw_clk到step_clk。
4.设置step_clk也有两路来源,有CCSR的bit8来设置,为0时是osc=24Mhz
5.时钟切换成功后就可以修改PLL1的值
通过 CCM_ANALOG_PLL_ARM寄存器的DIV_SELECT位(bit6-0)设置PLL1的频率,公式为:
Output =fref*DIV_SEL/2 1056=24*DIV_SEL/2=>DIEV_SEL=88
设置DIV_SELECT位=88,PLL1=1056MHz
还要设置CCM_ANALOG_PLL_ARM寄存器的ENABLE位(bit13)为1,使能输出
在切换回PLL1之前,设置CACRR寄存器的ARM_PODRF=1 !!
2、各个PLL时钟的配置
PLL2固定为528MHz
PLL3固定为480MHz
1、初始化PLL2_PFD0~3。寄存器CCM_ANALOG_PFD_528用于设置4路PFD的时钟。比如PFD0=528*18/PFD0_FRAC,设置 PFD0_FRAC位即可。
比如PLL2_PFD0=352M=528*18/PFD0_FRAC,因此FPD0_FRAC=27。
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=132MHz
设置CBCMR寄存器的PRE_PERIPH_CLK_SEL位
设置CBCDR寄存器的[PERIPH_CLK_SEL]位为0 即pll2
设置 CBCDR寄存器的[AHB_PODF]位为 2 即 3分频, 396/3
等待AHB_PODF_BUSY 不忙的握手信号
2、PERCLK_CLK_ROOT=IPG_CLK_ROOT=66MHz
设置 CBCDR寄存器的IPG_PODF=1,也就是2分频
3、PERCLK_CLK_ROOT
设置CSCMR1寄存器的PERCLK_CLK_SEL位 为0 ,表示PERCLK时钟源为IPG
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
