IMX6U默认396Mhz主频 可以达到528Mhz
一、时钟来源及组成
1、时钟的来源都是晶振
32.768khz的晶振 给RTC使用
24MHz的晶振给系统来使用 接在T16和T17这两个IO上
2、芯片时钟构成
七路PLL 全都由24Mhz晶振产生 使用这些的原因是为了方便外设使用 倍频产生
①ARM PLL供给ARM内核的 可以使用650Mhz到1.3Ghz
②System PLL 固定为528Mhz 为 22倍频 供给系统使用 也叫作528PLL 此路PLL分出4路PFD
③ USB1 PLL 主要用于USB时钟 也分为4路PFD 20倍频 480Mhz 也叫作480PLL
④Audio PLL 主要供给音频使用 比如 spdif等音频外设
⑤Video PLL 主要供给视频使用 比如LCD这种 RGBLCD 和图像处理有关的
⑥ENET PLL 主要供给网络外审使用 可能单独给网络使用
⑦USB2 PLL 480Mhz 无PFD
3、常规使用需要初始化的PLL和PFD 一般按照时钟树里面的值进行设置
PLL1 内核使用
PLL2 以及他对应的PFD
PLL3 以及他对应的PFD
其余都为使用时再初始化 比如音视频 网络等
外设可以根据这个设置 来源IMX官方参考手册 这些都是最大值 设置请注意选择
二、配置方式 修改主频
1、PLL 经过二分频 得到频率给 ARM内核使用 PLL1最大为 1.3Ghz
①ARM 内核设置528mhz 可以设置cacrr的ARM_PIDF位位2分频 CACRR的bit0 3可以设置1-8分频
因此设置CACGRR的AMR_PODF=1;
②设置PLL1为1056Mhz
PLL1=pll1_sw_clk 有两路选择 分别为pll1_main_clk 和 step_clk 通过CCSR寄存器的pll1_sw_clk_set
(bit2 )位来选择bit2
③在修改系统时钟的时候 必须给一个临时的时钟 也就是step_clk 在修改PLL的时候需要将pll_sw_clk切换到
setp_clk上
④ 设置setp_clk
可以直接选择晶振 24Mhz –将CCSR(bit8)的setp_sel设置为0即可使用晶振
⑤ 时钟切换完成后 修改系统时钟
DIV_SEL是CCM_ANALOG_PLL_ARM的bit6-0来设置PLL1频率
通过公式可以算出 DIV_SEl等于88 也就是设置DIV_SEL=88即可 并且还要设置使能位
⑥设置CACRR的ARM_PODF=1;切记
⑦代码
void imx6u_clkinit(void)
{
if(((CCM->CCSR >> 2) & 0x1) == 0) //sense now clock used PLL1
{
CCM->CCSR &= ~(1 << 8); //set step_clk = osc_clk=24
CCM->CCSR |= ( 1<< 2); //pll1_sw_clk = step_clk=24MHz
}
CCM_ANALOG->PLL_ARM = (1 << 13) | ( (88 << 0) & 0x7F ) ;//set PLL1=1056 and enable this clock output;
CCM->CACRR = 1 ; //set two divided frequency
CCM->CCSR &= ~(1<<2); //set pll1_sw_clk=1056Mhz;
}