uboot-step 7 时钟初始化

uboot-step 7 时钟初始化

上篇文章已经点亮了led,但是我们所用的时钟频率还只是外部时钟的频率12M,比较慢,这篇文章将会介绍下s3c6410的时钟体系,并对如何配置时钟作详细的说明

s3c6410 的时钟体系说明

uboot-step 7 时钟初始化_第1张图片
9.2.png

如上图所示,s3c6410主要有三个锁相环pll,分别为APLL,MPLL,EPLL

  • APLL :主要为CPU的工作提供工作时钟 ARMCLOCK,也可以配置为对系统总线AHB,APB总线等提供时钟 HCLK2 ,HCLK PCLK
  • MPLL: 主要为系统工作如串口,音频等提供工作时钟,同时也可以配置为对系统总线AHB,APB总线等提供时钟
  • EPLL: 为USB等设备提供特殊的工作时钟
    其中,APLL与MPLL都可以为系统总线AHB,APB提供时钟,这里我们选择了APLL来提供
    如下图所示,是我们所配置的时钟流向,从外部时钟晶体输入12M的工作时钟,经过APLL与MPLL之后,频率提升到了533M(APLL和MPLL的倍频倍数可以更改),其中APLL输出的时钟经过DIVarm(1)到达ARMCLK,为cpu工作提供时钟,APLL的另一支向下经过SYNCMUX和DIVHclk2(1)到达HCKx2为系统总线提供时钟,MPLL输出的时钟则经过DIVmpll来为其它部件如串口和音频等提供工作时钟


    uboot-step 7 时钟初始化_第2张图片
    9.1.png

如何进行时钟的配置

对处理器任何的设置最终都反映在相应寄存器的读写,对于时钟的配置主要有以下几点:

  • APLL与MPLL 倍频频率的设置,可以通过APLLCON/MPLLCON寄存器来进行配置
  • MUXapll与MUXmpll时钟源的选择,需要配置为选择PLL输出时钟,可以通过CLK_SRC寄存器来配置
  • SYNCMUX选择系统总线时钟的时钟源是APLL还是MPLL,同步还是异步(不懂)模式,可以通过配置OTHERS寄存器来设置
  • 还要配置DIVarm,DIVhclk2,DIVHclk,DIVpclk等分频值,通过配置CLK_DIV0 寄存器来设置
APLL与MPLL配置
pllcon0.png

uboot-step 7 时钟初始化_第3张图片
pllcon.png

uboot-step 7 时钟初始化_第4张图片
pllcon1.png

我们设定输出频率为533M,参照上图进行相关的设置就可以了

CLK_DIV0配置
clk_div0.png

uboot-step 7 时钟初始化_第5张图片
clk_div.png

这里我们的寄存器设置如下:

  • ARM_RATIO=0
    • ARMCLK=533/(0+1)=533M
  • MPLL_RATIO=0
    • DOUTmpll=533/(0+1)=533
  • HCLK_RATIO=1
    • HCLK=HCLKX2/(1+1)=HCLKX2/2=133M
  • HCLKx2_RATIO=1
    • HCLKX2=HCLKX2in(533)/(1+1)=266M
  • PCLK_RATIO=3
    • PCLK=HCLKX2(266)/(3+1)=66.5M

OTHERS寄存器配置
others0.png

uboot-step 7 时钟初始化_第6张图片
others1.png

这里我们设置为同步模式,选用APLL输出作为系统总线时钟


CLK_SRC选择时钟源
clk_src.png
clk_src1.png

设置APLL,EPLL,MPLL输出使能

代码实现

#define CLK_DIV0 0x7e00f020
#define OTHERS 0x7e00f900
#define MPLL_CON 0x7e00f010
#define APLL_CON 0x7e00f00c
#define CLK_SRC 0x7e00f01c
#define DIV_VAL ((0x0<<0)|(0x1<<9)|(0x1<<8)|(0x3<<12))
#define PLL_VAL ((1<<31)|(266<<16)|(3<<8)|(1<<0))

init_clock:
ldr r0, =CLK_DIV0
ldr r1, =DIV_VAL
str r1, [r0] 

ldr r0, =OTHERS
ldr r1, [r0]
bic r1,r1,#0xc0  @同步模式,总线时钟由APLL提供
str r1, [r0]

ldr r0, =APLL_CON
ldr r1, =PLL_VAL @使能pll,输出为533M
str r1, [r0]

ldr r0, =MPLL_CON
ldr r1, =PLL_VAL
str r1, [r0]

ldr r0, =CLK_SRC
mov r1, #0x3  @配置使用pll时钟输出
str r1, [r0]

mov pc, lr

此去经年
zhaiyk@sina.cn
August 2, 2016

你可能感兴趣的