1.系统时钟的来源:
目录
1.系统时钟的来源:
M控制单元
3.修改PLL1频率
1.RTC_XTAL,32.768khz.向RTC单元提供时钟。
2.24MHz的晶振,向整个系统提供时钟。
M控制单元
I.MX6UL,有7路的PLL倍频。每一路都有其主要的作用。
3.修改PLL1频率
PLL1作为系统的主频时钟,支持650 MHz to 1.3 GHz.的配置。配置公式如图:
主频时钟源,sw_clk,由CCSR,决定使用PLL1,还是晶振。
需要特别注意的是:在修改PLL1时,需要先切换到晶振为系统提供一个备用的时钟,才能保证系统的正常运行,并且继续对PLL1进行修改操作。
设置PLL1通过CCM_ANALOG_PLL_ARM寄存器的DEV_SELECT位(bit-6-0)来设置PLL1,公式为上图。(PLL output ..),同时使能CCM_ANALOG_PLL_ARM的ENABLE位(bit13),使能输出。 然后设置CACRR寄存器的ARM_PODF,在切换回原来的PLL1。
代码实例,将主频修改为528MHz。
// 判断当前时钟源if((((CCM->CCSR) >> 2) & 0x1 ) == 0) /* 当前pll1_sw_clk使用的pll1_main_clk*/{ CCM->CCSR &= ~(1 << 8); /* 配置step_clk时钟源为24MH OSC */ CCM->CCSR |= (1 << 2); /* 配置pll1_sw_clk时钟源为step_clk */}//PLL设置为1056Mhz =24*88/2;CCM_ANALOG->PLL_ARM = (1 << 13) | ((88 << 0) & 0X7F); /* 配置pll1_main_clk=1056MHz */CCM->CACRR = 1;/*设置2分频*/CCM->CCSR &= ~(1 << 2);/* 将pll_sw_clk时钟重新切换回pll1_main_clk */
配置剩余时钟,PLL2,和PLL3,使用默认配置。主要配置各个PFD,AHB,PERCLK,IPGCLK。
/* 2、设置PLL2(SYS PLL)各个PFD */reg = CCM_ANALOG->PFD_528;reg &= ~(0X3F3F3F3F);/* 清除原来的设置 */reg |= 32<<24;/* PLL2_PFD3=528*18/32=297Mhz */reg |= 24<<16;/* PLL2_PFD2=528*18/24=396Mhz(DDR使用的时钟,最大400Mhz) */reg |= 16<<8;/* PLL2_PFD1=528*18/16=594Mhz */reg |= 27<<0;/* PLL2_PFD0=528*18/27=352Mhz */CCM_ANALOG->PFD_528=reg;/* 设置PLL2_PFD0~3 *//* 3、设置PLL3(USB1)各个PFD */reg = 0;/* 清零 */reg = CCM_ANALOG->PFD_480;reg &= ~(0X3F3F3F3F);/* 清除原来的设置 */reg |= 19<<24;/* PLL3_PFD3=480*18/19=454.74Mhz */reg |= 17<<16;/* PLL3_PFD2=480*18/17=508.24Mhz */reg |= 16<<8;/* PLL3_PFD1=480*18/16=540Mhz*/reg |= 12<<0;/* PLL3_PFD0=480*18/12=720Mhz */CCM_ANALOG->PFD_480=reg;/* 设置PLL3_PFD0~3 *//* 4、设置AHB时钟 最小6Mhz, 最大132Mhz (boot rom自动设置好了可以不用设置)*/CCM->CBCMR &= ~(3 << 18); /* 清除设置*/ CCM->CBCMR |= (1 << 18);/* pre_periph_clk=PLL2_PFD2=396MHz */CCM->CBCDR &= ~(1 << 25);/* periph_clk=pre_periph_clk=396MHz */while(CCM->CDHIPR & (1 << 5));/* 等待握手完成 *//* 5、设置IPG_CLK_ROOT最小3Mhz,最大66Mhz (boot rom自动设置好了可以不用设置)*/CCM->CBCDR &= ~(3 << 8);/* CBCDR的IPG_PODF清零 */CCM->CBCDR |= 1 << 8;/* IPG_PODF 2分频,IPG_CLK_ROOT=66MHz *//* 6、设置PERCLK_CLK_ROOT时钟 */CCM->CSCMR1 &= ~(1 << 6);/* PERCLK_CLK_ROOT时钟源为IPG */CCM->CSCMR1 &= ~(7 << 0);/* PERCLK_PODF位清零,即1分频 */