首页 > 系统相关 >时钟系统,Linux系统中芯片时钟的基本原理

时钟系统,Linux系统中芯片时钟的基本原理

时间:2022-12-22 14:33:56浏览次数:41  
标签:芯片 系统 CCM 0XFFFFFFFF Linux PLL reg 时钟

第一:时钟系统分析

      每款芯片都有自己的主频,有的时候需要把主频设置到合适的值,才能发挥它的最大性能。

 

       可以看出,开发板的系统时钟来源于两个部分:32.768KHz和24MHz的晶振,其中32.768KHz晶振是RTC的时钟源,24MHz晶振是内核和其他外设的时钟源。

第二:7路PLL时钟源分析

      芯片的外设有很多,不同的外设时钟源不同, 先对这些外设的时钟源进行分组,一共有7组,这7组时钟源都是从24MHz晶振PLL而来的。每款芯片都有自己的时钟树,详细的时钟图如下:

 

     一共有三部分:CLOCK_SWITCHER、CLOCK ROOT GENERATOR 和 SYSTEM CLOCKS。左边的CLOCK_SWITCHER就是7路PLL和8路PFD,右边的是SYSTEM CLOCKS 就是芯片外设,中间的CLOCK ROOT GENERATOR 是最 复杂的!这一部分就像“月老”一样。芯片的时钟系统还是很复杂的,大家学习的时候要结合芯片的参考手册的结构图来学习,这里主要进行主频、PLL和一些总线时钟的设置。

第三:实验程序编写

       配置系统的时钟,可以自己设定相应的系统时钟,修改内容如下:

#include "bsp_clk.h"//使能所有的外设时钟void clk_enable(void) {   CCM->CCGR0 = 0XFFFFFFFF;   CCM->CCGR1 = 0XFFFFFFFF;   CCM->CCGR2 = 0XFFFFFFFF;   CCM->CCGR3 = 0XFFFFFFFF;   CCM->CCGR4 = 0XFFFFFFFF;   CCM->CCGR5 = 0XFFFFFFFF;   CCM->CCGR6 = 0XFFFFFFFF;}
//初始化系统时钟,按照手册推荐void imx6u_clkinit(void){ unsigned int reg = 0;     if((((CCM->CCSR) >> 2) & 0x1 ) == 0) /* pll1_main_clk */ {  CCM->CCSR &= ~(1 << 8); /* 配置 step_clk 时钟源为 24MHz OSC */  CCM->CCSR |= (1 << 2); /* 配置 pll1_sw_clk 时钟源为 step_clk */} CCM_ANALOG->PLL_ARM = (1 << 13) | ((88 << 0) & 0X7F); CCM->CCSR &= ~(1 << 2);/* 将 pll_sw_clk 时钟切换回 pll1_main_clk */  CCM->CACRR = 1; /* ARM 内核时钟为 pll1_sw_clk/2=1056/2=528Mhz */  /* 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 */  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 */}

    最终在main函数里面调用imx6u_clkinit来初始化时钟。

int main(void) {  int i = 0;  int keyvalue = 0;  unsigned char led_state = OFF;  unsigned char beep_state = OFF;     imx6u_clkinit(); /* 初始化系统时钟 */   clk_enable(); /* 使能所有的时钟 */   led_init(); /* 初始化 led */   beep_init(); /* 初始化 beep */   key_init(); /* 初始化 key */  /* 省略掉其它代码 */ }

总结:将代码烧录板子之后,明显的可以看到代码的执行速度加快。时钟树的底层控制,在芯片控制方面是非常重要的,熟悉它很有必要。

标签:芯片,系统,CCM,0XFFFFFFFF,Linux,PLL,reg,时钟
From: https://www.cnblogs.com/liuchaobaidu/p/16998609.html

相关文章