赞
踩
本文主要针对IMX6ULL芯片的时钟系统进行分析,并没有针对哪款开发板,毕竟是芯片的问题。
对于IMX6ULL芯片有两个时钟源,我使用的开发板是百问网IMX6ULL,其他IMX6ULL开发板应该也是如此,两个时钟源如下图所示,
1. 32.768KHz的晶振是供给RTC使用。
2. 24MHz的晶振接到了开发板的T16和T17引脚供给给开发板使用,作为初始时钟,IMX6ULL后面的一系列时钟都是围绕着这颗24MHz的晶振展开。
IMX6U时钟系统是一个相对复杂的系统,由于IMX6U的外设系统相当丰富,也就会涉及到不同的外设会使用到不同的时钟。IMX6U芯片为了方便生成时钟,IMX6U从24MHz的晶振中生出来了7路PLL,每个PLL对应一种时钟。另外,这7路的PLL中有的又会生出来PFD,同样也对应着不同频率的时钟。
根据IMX6ULL芯片的参考手册,可以看到,芯片已经对生出来的7路PLL进行了安排。
后面也会结合时钟树来说明,PLL的作用是什么,现在我们只需要知道,我们从24MHz的晶振倍频后生出了7路不同频率的时钟。
PLL1时钟也可以称为ARM PLL时钟,该锁相环是从24MHz的参考时钟合成的低抖动时钟。ARM PLL锁相环范围的输出频率从650MHz到1.3GHz。而输出频率是由7位寄存器字段CCM_ANALOG_PLL_ARM[DIV_SELECT]来确定的。
ARM PLL输出频率的计算公式: PLL output frequency = Fref * DIV_SEL/2
System PLL只能在528MHz的默认频率下运行。此 PLL 分出了 4 路 PFD,分别为: PLL2_PFD0~PLL2_PFD3,这 4 路 PFD 和 528_PLL共同作为其它很多外设的根时钟源。通常 528_PLL和这4路PFD是I.MX6U 内部系统总线的时钟源,比如内处理逻辑单元、 DDR 接口、 NAND/NOR 接口等等。
USB PLL的输出频率是480MHz,是固定的 20 倍频,该PLL应该使用该默认频率。
根据IMX6ULL的参考手册,我们可以知道,PFD是在PLL的基础之上再一次进行分频而产生的,目前只有PLL2与PLL3会产生有PFD。
其实PLL与PFD是一样的,都是产生时钟用的。
IMX6U的时钟树是相对复杂的,毕竟有这么多的外设呢。但将时钟树拆开来看,并没有想象中的复杂。根据上面的图,将时钟树分成了三个部分,就是上面用红色框框出来的部分,CLOCK SWITCHER,CLOCK ROOT GENERATOR,SYSTEM CLOCKS这三个部分。其中左边的 CLOCK_SWITCHER 就是我们上一小节讲解的那 7 路 PLL 和8 路 PFD,右边的 SYSTEM CLOCKS 就是芯片外设,中间的 CLOCK ROOT GENERATOR 是最复杂的!这一部分就像“月老”一样, 给左边的CLOCK_SWITCHER和右边的SYSTEM CLOCKS进行牵线搭桥。外设时钟源是有多路可以选择的, CLOCK ROOT GENERATOR 就负责从 7 路PLL 和 8 路 PFD 中选择合适的时钟源给外设使用。
具体操作肯定是设置相应的寄存器,我们以ESAI 这个外设为例,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。