exynos 4412 时钟配置

/**

******************************************************************************

* @author ? ?Maoxiao Hu

* @version ? V1.0.0

* @date ? ? ? Jan-2015

******************************************************************************

* < COPYRIGHT 2015 ISE of SHANDONG UNIVERSITY >

******************************************************************************

**/

本文会不时完善和纠正一些小错误,还请到?http://www.cnblogs.com/humaoxiao?参考最新版本。

时钟初始化的一般方法和顺序,u-boot、普通裸机程序如果需要都可以使用。

?

—————————————————————————————-

本文解决的问题:

1、宏观上几个大模块的时钟配置顺序。

2、小模块的时钟选择、分频和一般的配置顺序。

3、对小模块来说,官方手册推荐的时钟源选择问题。

4、本文只以手册的“推荐配置”进行说明,“自由玩法”不保证稳定性。

—————————————————————————————-

多路选择器选择原则:

1、尽量保持默认配置不动。

2、尽量选择前端频率最高的源。

3、其它手册要求的特殊情况。

—————————————————————————————-

几个符号:

? ? ? ? 左边深色的:无抖动多路选择器,无抖动意味着在多路选择切换的瞬间,下游时钟就可以稳定下来。需要注意是在切换时要保证上游时钟已经存在并稳定,不然下游时钟状态不确定。

? ? ? ? 右边浅色的:有抖动多路选择器,意味着多路选择切换后,要经历一段时间的不稳定时间,但是有稳定后有相应寄存器标志位标示下游时钟已经稳定,这类指示寄存器器一般以CLK_MUX_STAT开头。

?—————————————————————————————-

全局约束条件:

1、无抖动多路选择器的时钟源需要存在并且稳定。

2、当某个PLL被设置为关闭状态,是不可以使用它的输出信号的。

?—————————————————————————————-

晶振说明:

由于一般USB IP核需要直接使用高精度时钟,所以在XUSBXTI引脚上接24M晶振,XXTI引脚就不需要接了。手册上说由于iROM代码是根据24M晶振频率设计的,所以24M的选择没什么好说的。

?—————————————————————————————-

一、时钟之源PLL配置

? ? ? 原因:根据全局约束条件2,如果PLL关闭那么不可以使用它的输出,再根据全局约束条件1,多路选择器此时只能选择外部时钟!而24M的时钟直接作为系统的时钟显然是不合适的!

? ? ? 4412有4个PLL:APLL, MPLL, EPLL, and VPLL。推荐使用24M外部晶振作为它们的时钟源。

理论上讲,4个PLL均可以在22 ~ 1400MHz之间自由设置,但是手册强烈推荐的频率范围为:

/*———————————————*/

APLL & MPLL:200 ~ 1400MHz

EPLL:90 ~ 416MHz

VPLL:100 ~ 440MHz

/*———————————————*/

1.0 设置PLL_LOCKTIME

原因:参考?http://bbs.eeworld.com.cn/thread-417491-1-1.html

? ? ? ? PLL频率从小变到指定频率需要一段时间(图中标红框的部分虽然不是PLL实际波形但可以参考着理解),当PLL频率在变化的时候,比如由复位后的初始的400MHz升到1000MHz, 这时,首先把CPU的频率锁定,因这此时CPU的频率是变化的,频率变化,CPU的状态就无法确定,所以,此时用 PLL_LOCKTIME 将CPU频率锁定一段时间,直到频率输出稳定为止。芯片手册上显示APLL最大的锁定时间为100us(Table 60 -9),如果外部晶振是24MHz,100us换算成tick就是2400个tick,所以

APLL_LOCK(Address:0x1004_4000)寄存器该写入0x960

MPLL_LOCK(Address:0x1004_0008)寄存器该写入0x190

EPLL_LOCK(Address:0x1003_C010)寄存器该写入0xBB8

VPLL_LOCK(Address:0x1003_C020)寄存器该写入0x190。

1.1 APLL & MPLL的倍频值:

设定对应寄存器的 P、M、S 三个值,不同的搭配最终频率不同,无须自己计算,系统推荐的搭配如下:

1.2 EPLL的倍频值:

设定对应寄存器的 P、M、S、K 四个值,不同的搭配最终频率不同,无须自己计算,系统推荐的搭配如下:

?

?

1.3 VPLL的倍频值

设定对应寄存器的 P、M、S、K?四个值,不同的搭配最终频率不同,无须自己计算,系统推荐的搭配如下:

?

?

?1.4 等待PLL稳定

如果PLL输出稳定了,那么PLL_CON0的Bit[29]会由0变1。

查询用汇编实现,以APLL为例:

/*———————————————————————*/

wait_pll_lock:

? ? ldr r1, [r0, r2]

? ? tst r1, #(1<<29)

? ? beq?wait_pll_lock

? ? mov pc, lr

?

ldr r0, =CMU_BASE /* 0x10030000 */

ldr r2, =APLL_CON0_OFFSET /* 0x14100 */

bl wait_pll_lock

/*———————————————————————*/

二、主要模块的初始化顺序

??虽然官方文档中并没有强制按下面的顺序初始化,但是按照逻辑来讲,是应该使用这个顺序的。

?1、CLK_DIV_CPU0[31:0] = target value0

?? 2、CLK_DIV_DMC0[31:0] = target value1

?? 3、CLK_DIV_TOP[31:0] = target value2

?? 4、CLK_DIV_LEFTBUS[31:0] = target value3

?? 5、CLK_DIV_RIGHTBUS[31:0] = target value4

?

上个直观点的图:

?

?

三、上游多路选择器的配置

上游多路选择器决定下游模块的时钟源,CMU_CPU有4个MUX,CMU_DMC有四个MUX,CMU_TOP有14个MUX,CMU_LEFTBUS有2个MUX,CMU_RIGHTBUS有2个MUX。

当然下游还有其它非常多的MUX,先搁置一下暂且不说。

3.1 CMU_CPU MUXs配置

?

CMU_CPU有4个MUX,配置寄存器CLK_SRC_CPU,基地址0x1004_4200。配置完成后,最靠近PLL的两个MUX均切换时钟源至PLL。

?

3.2 CMU_DMC MUXs配置

CMU_DMC有8个MUX,配置寄存器CLK_SRC_DMC,基地址0x1004_0200。配置完成后,最靠近PLL的一个MUX切换时钟源至PLL。

?

3.3 CMU_TOP MUXs配置

CMU_TOP有13个MUX,配置寄存器CLK_SRC_TOP0 CLK_SRC_TOP1,基地址0x1003_C210 0x1003_C214。

3.4 CMU_LEFTBUS & CMU_RIGHTBUS MUXs配置

CMU_LEFTBUS & CMU_LEFTBUS各有2个MUX,配置寄存器CLK_SRC_LEFTBUS?CLK_SRC_RIGHTBUS,基地址0x1003_4200?0x1003_8200。

四、分频器的配置

分频器的位置一般在MUX之后,通常是一个MUX,但如果需要旁路时钟输出,可能需要两个或更多个分频器级连来获取最终的频率。

分频器设置的前提条件(手册并无强制要求,根据各种约束条件获得,有疑问留言讨论):

1、如果分频器上级还有分频器,请首先保证上级分频器频率已稳定,一直确认到上级是MUX为止。

2、确认上级级连的一个或多个MUX已使能且输出稳定,一直确认到上级是APLL MPLL EPLL VPLL这四个PLL为止。

3、确认APLL MPLL EPLL VPLL已使能且输出稳定。

分频器设置时,必然会影响与它相连的所有IP核,所以个人认为设置分频器时,应保证下游IP核停止工作,待分频器稳定后再重新初始化下游IP核。

?

五、举例

按照PLL -> MUX ->分频器的顺序举例说明。

5.1 PLLLOCKTIME

APLL_LOCK(Address:0x1004_4000)寄存器该写入0x00000960

MPLL_LOCK(Address:0x1004_0008)寄存器该写入0x00000190

EPLL_LOCK(Address:0x1003_C010)寄存器该写入0x00000BB8

VPLL_LOCK(Address:0x1003_C020)寄存器该写入0x00000190

?

5.2 PLL

APLL 1000MHz?0x10044100寄存器 写入 0x807D0300

MPLL 800MHz?0x10040108寄存器 写入 0x80640300

EPLL 400MHz 0x1003C110寄存器 写入 0x80640301 / 0x1003C114 寄存器 写入0x66010000/0x1003C118 寄存器 写入0x00000080

VPLL 100MHz?0x1003C120寄存器 写入 0x80640303 / 0x1003C124 寄存器 写入0x66016000/0x1003C128 寄存器 写入0x00000080

5.3 MUX

按照3.1 - 3.4节配置后的通路。

CMU_CPU:0x10044200 寄存器写入 0x01000001

CMU_DMC:0x10040200 寄存器写入 0x00011000

CMU_TOP:0x1003C210 寄存器写入 0x00000110/0x1003C214 寄存器写入?0x00011000

CMU_LEFTBUS:0x10034200 寄存器写入?0x00000010

CMU_RIGHTBUS:0x10038200 寄存器写入?0x00000010

5.4 分频器

5.4.1 LEFTBUS

0x10034500 寄存器写入?0x00000013,这样ACLK_GDL = 200MHz ACLK_GPL = 100MHz。

5.4.2 RIGHTBUS

0x10038500 寄存器写入?0x00000013,这样ACLK_GDR = 200MHz ACLK_GPR = 100MHz。

5.4.3 DMC

0x10040500 寄存器写入?0x00111113/0x10040504 寄存器写入?0x01011113。

这样,

ACLK_ACP = 200MHz

PCLK_ACP = 100MHz

SCLK_DPHY = 400MHz

SCLK_DMC (DDR时钟) = 400MHz

ACLK_DMCD = 200MHz

ACLK_DMCP = 100MHz

SCLK_G2D_ACP = 200MHz

SCLK_C2C = 400MHz

ACLK_C2C = 200MHz

SCLK_PWI = 12MHz?

5.4.4 CPU

0x10044500寄存器写入0x01143730/0x10044504寄存器写入?0x00000004。

这样:

5.4.5 TOP

0x1003C510 寄存器写入 0x01205473。

?

至此,时钟所有配置结束。

?

经过整理后的JLink时钟初始化脚本,会放到这里《JLink V8初始化exynos4412脚本》

参考资料:《Exynos 4412 SCP User’s Manual Rev 0.10》。

?

感谢:迅为u-boot相关代码。

时间: 2024-10-06 13:51:51

exynos 4412 时钟配置的相关文章

exynos 4412 eMMC配置及使用方法

/** ****************************************************************************** * @author ? ?Maoxiao Hu * @version ? V1.0.0 * @date ? ? ? Feb-2015 ****************************************************************************** * < COPYRIGHT 2015 IS

jLink V8调试exynos 4412 u-boot的几点补充

/** ****************************************************************************** * @author ? ?Maoxiao Hu * @version ? V1.0.0 * @date ? ? ? Dec-2014 ****************************************************************************** * < COPYRIGHT 2014 IS

LPC1768菜鸟学习之时钟配置

LPC1768的时钟源可以来自三个: 1)内部RC振荡器 内部振荡器可看作看门狗定时器的时钟源,也可作PLL0和cpu的时钟源,但是无法作为usb的时钟源,因为精度达不到.而且如果CAN波特率高于100kb/s,则也不适用了.在系统上电时,LPC1768都使用内部振荡器,直到软件将其切换为另一种可用的时钟源. 2)主振荡器 主振荡器可作为CPU的时钟源,需要通过分频和倍频进行配置使用.基本会使用主振荡器作为时钟源 3)RTC振荡器 RTC振荡器可提供1Hz-32kHz的RTC时钟输出,可用作PL

四轴飞行器1.2.3 STM32F407时钟配置和升级标准库文件

原创文章,欢迎转载,转载请注明出处 这个星期进度比较慢哈,只有周末和晚上下班回来才能做,事件不连续,琐碎的事情又比较多,挺烦的,有多琐碎呢?           1.本人有点小强迫症哈,虽然RTT将文件夹已经分类的很好了,但是在一个项目跟目录下这样放着看起来还是很不舒服的哈,于是强迫症范了,要整理下它.按照以前做项目的习惯,将程序分为四个层次,硬件层,驱动层,系统层和应用层,我们就整理下,对三个文件夹,其中硬件层和驱动层放在BSP文件夹里面,BSP文件里面再分硬件和驱动的文件夹,同时添加一个库文

STM32F407VG (四)时钟配置

1.STM32 F407VG 的starup_stm32f40_41xxx.s的例如以下位置调用 IMPORT SystemInit,之后调用main函数,所以 进入main函数时候就已经自己主动完毕有关时钟配置了. 2.在SystemInit函数里面完毕时钟配置,配上图和例如以下凝视就不须要多解释了,一目了然. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGl0empt/font/5a6L5L2T/fontsize/400/fill/I0JBQk

STM8S时钟配置CLK_HSIPrescalerConfig与CLK_SYSCLKConfig区别

STM8S的时钟配置通过:CLK_CKDIVR寄存器,而CLK_CKDIVR一个是配置HSI分频,另一个是配置CPU的分频 static void CLK_Config(void){ CLK_DeInit(); /* Clock divider to HSI/1 */ CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);  // 只配置HSI分频率,CPU分频率1 /* Output Fcpu on CLK_CCO pin */ CLK_CCOConfig

如何在Ubuntu下使用TF/SD 卡制作Exynos 4412 u-boot启动盘

/** ****************************************************************************** * @author ? ?Maoxiao Hu * @version ? V1.0.0 * @date ? ? ? Feb-2015 ****************************************************************************** * < COPYRIGHT 2015 IS

LPC1768时钟配置

购买LPC1768已经有一段时间了,但是由于之前工作比较忙,一直没有来得及学习,所以搁置了一段时间. 最近终于有一些时间来学习了,板子上的资源其实还是蛮丰富的,cortex-m3有的,基本上在这个板子上都引出来了, 而且学习的帮助文档也不少,所以学习起来比较方便. 板子的样子如下图所示,具体的详细资源,各位可以自行去查找. 应该来说,板子的学习,肯定会逃不过时钟的配置,因此下面将我配置时钟的过程一一记录下来,以便后期工作需要. 其实LPC1768的时钟配置过程还是比较清晰的. LPC1768的时

STM32F4系统时钟配置及描述

STM32F4系统时钟配置及描述 stm32f407时钟配置方法(感觉很好,分享一下)