目录
一.基本概念
1.变频
使用的芯片imx6ull是无源晶振,表示在工作时不需要额外电压,

下图为该芯片的时钟配置


PLL1为内核配置时钟,PLL2为外设配置时钟,PLL3为USB设备配置时钟,一共7个PLL,8个PFD。
2.时钟树

时钟根产生器:负责对不同频率设备牵线

分频器,2位分频器表示从1到4的分频,3位则表示1到8

OSC晶振,24Mhz
3.基本流程
配置步骤如下:
1.配置ARM时钟为528MHZ
2.配置PLL2下的4个PFD和PLL3下的4个PFD
3.配置三大根时钟(132MHZ,66MHZ,66MHZ)
二.具体实现
1.配置ARM时钟
在配置频率时,先将cg门关闭,配置频率稳定后再打开cg门传给外设,否则若当外设频率较低时,打开cg门,将高频传给外设,由于频率急剧升高,可能导致外设死机,而由于ARM没有配置cg门,所以要更改ARM的时钟频率应特殊处理,如下:

先采用step_clk路,通过选通门选择osc_clk或者下面的时钟频率,先将ARM的工作频率切换为24MHZ,再配置PLL,设置二分频率,待稳定后切换为pll1_main_clk传给ARM.
1.CCSR寄存器
选通线路

2.CCM_ANALOG->PLL_ARM寄存器
设置PLL频率为1056

3.CACRR
设置PLL1为二分频

unsigned int t = 0;
// 1. 配置ARM时钟
CCM->CCSR &= ~(1 << 8);//1,选择24MHZ
CCM->CCSR |= (1 << 2);//2,切换step_clk
t = CCM_ANALOG->PLL_ARM;//3,设置频率1056
t &= ~(3 << 14);
t |= (1 << 13);
t |= (88 << 0);
CCM_ANALOG->PLL_ARM = t;
CCM->CACRR |= (1 << 0); //设置二分频
CCM->CCSR &= ~(1 << 2);//4.切换回pll1_main
2.配置PLL2和PLL3
按照下图配置

PLL2锁倍频,所以参考手册没有,只需修改PLL2下的4个PFD



可见,只需修改FRAC域配置PFD倍频因子,CLKGATE打开cg门
// 2. 配置PLL2 PFD
t = CCM_ANALOG->PFD_528;
t &= ~((0x3F << 0) | (0x3F << 8) | (0x3F << 16) | (0x3F << 24));//先将倍频因子位清零
t &= ~((1 << 7) | (1 << 15) | (1 << 23) | (1 << 31));//打开4个PFD的cg门
t |= (27 << 0) | (16 << 8) | (24 << 16) | (32 << 24);//配置倍频因子,由图中公式528*18/对应频率得到
CCM_ANALOG->PFD_528 = t;
// 3. 配置PLL3 PFD,同上
t = CCM_ANALOG->PFD_480;
t &= ~((0x3F << 0) | (0x3F << 8) | (0x3F << 16) | (0x3F << 24));
t &= ~((1 << 7) | (1 << 15) | (1 << 23) | (1 << 31));
t |= (12 << 0) | (16 << 8) | (17 << 16) | (19 << 24);
3.配置三大根时钟
按照下图时钟树红线走向配置相应的寄存器


设置为最大频率,运行速度快
1.CBCMR寄存器
选中PLL2具体所对应的哪个PFD

2.CBCDR寄存器
选中PLL2,设置AHB倍频因子,IPG倍频因子



3.CSCMR1寄存器
选中PERCLK根时钟,配置一分频因子

// 4. 配置三个根时钟
t = CCM->CBCMR;
t &= ~(3 << 18);
t |= (1 << 18); //选中PFD2
CCM->CBCMR = t;
t = CCM->CBCDR;
t &= ~(1 << 25); //选通PLL2
t &= ~((7 << 10) | (3 << 8)); //清空分频因子位
t |= (1 << 11) | (1 << 8); //设置分频因子,bit11为设置AHB_CLK3分频,bit8位为设置二分频给IPG_CLK
CCM->CBCDR = t;
CCM->CSCMR1 &= ~(1 << 6);//设置PERCLK继承来自IPG_CLK
CCM->CSCMR1 &= ~(0x3F << 0);//设置一分频
6万+



被折叠的 条评论
为什么被折叠?



