版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pengfei240/article/details/77540505
0. 前言
本文以Exynos4412芯片为例,介绍了CMU(Clock Management Unit)。CMU通过控制PLL产生系统时钟,总线时钟和外设时钟。
1. 时钟域
Exynos4412包含5个时钟域,如图所示:
- CMU_CPU:提供Cortex-A9 MPCore处理器,L2 cache控制器,and CoreSight(调试器)的时钟。
- CMU_DMC:提供DRAM内存控制器,安全子系统和通用中断控制器的时钟。
- CMU_LEFTBUS / CMU_RIGHTBUS:提供全局数据总线和全局外设总线的时钟,总线用于在DRAM和外设之间进行数据传输。
- CMU_TOP:给所有剩余的模块提供时钟,如TV,LCD,CAM等。
2. 时钟源
外部时钟
- XRTCXTI:提供RTC的时钟。
- XXTI:外部时钟源,一般接12MHz~50MHz的晶振。当前的硬件未使用该时钟源。
- XUSBXTI:外部时钟源,推荐为24MHz。当前的硬件使用该时钟源作为系统时钟。
内部时钟
- APLL:主要给CPU_BLK提供时钟,也可以作为MPLL的补充。
- MPLL:主要给DMC_CLK,LEFTBUS_CLK,RIGHTBUS_CLK和CMU_TOP提供时钟。
- EPLL:主要给音频提供时钟。
- VPLL:主要给视频提供时钟。
- USB PHY:给USB提供30MHz~48 MHz时钟。
- HDMI PHY:产生54MHz时钟。
时钟命名规则
- FIN~Xpll~:pll的输入时钟。
- FOUT~Xpll~:pll的输出时钟。
- MOUT~Xpll~:pll经过MUX的输出时钟。
- SCLK~Xpll~:PAD上的xpll时钟,可能经过了dividor,也可能就是MOUT~Xpll~。
- DOUT~xxx~:dividor的输出时钟。
其中’X’为A/M/E/V
3. 时钟组件
PLL
功能:把低频率的输入时钟提高后输出。
设置步骤:
1. 设置PLL的 P、M、S值,这是根据频率用公式计算出来的(寄存器为 XPLL_CON0)
2. 设置PLL的其他控制参数
3. 使能PLL
4. 等待一段时间使PLL稳定
5. 设置MUX ,选择PLL所输出的时钟
MUX
功能:多路复用,从多个输入源中选择一个作为输出。时钟复用器的配置寄存器被定义为CLK_SRC_XXX。
灰色的时钟复用器表示一种无干扰的时钟复用器,也就是说在改变时钟选区时不受干扰。
对该复用器需要在改变时钟时确保时钟源在工作。如果不能保证,这就表明了选择时钟的过程并没有完成,会导致未知的时钟输出状态。时钟复用器的状态寄存器被定义为CLK_MUX_STAT_XXX。白色的时钟复用器表示有干扰的时钟复用器,也就是说在改变时钟源时,要遭受脉冲信号。
对该复用器在改变时钟时可能有毛刺信号产生。因此建议在修改时钟复用器之前,先关闭这种复用器的输出功能。在完成选择的更换后,再重新使能复用的输出功能。时钟源屏蔽控制寄存器被定义为CLK_SRC_MASK_XXX。
divider
功能:时钟分频器,可以从其输入源来对时钟进行分频。时钟分频器的配置寄存器被定义为CLK_DIV_XXX。
4. 时钟配置
配置CMU_CPU
配置CMU_DMC
配置CMU_TOP
配置CMU_BUS
配置UART_BLK
配置FSYS_BLK
5. 代码
具体可参考:clock_init_exynos4412.c