美文网首页嵌入式单片机学习
uboot-step 7 时钟初始化

uboot-step 7 时钟初始化

作者: 2625K | 来源:发表于2016-08-03 23:05 被阅读48次

uboot-step 7 时钟初始化

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

s3c6410 的时钟体系说明

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来为其它部件如串口和音频等提供工作时钟


    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
pllcon.png
pllcon1.png

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

CLK_DIV0配置
clk_div0.png
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
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

相关文章

  • uboot-step 7 时钟初始化

    uboot-step 7 时钟初始化 上篇文章已经点亮了led,但是我们所用的时钟频率还只是外部时钟的频率12M,...

  • uboot-step 8 内存初始化

    uboot-step 8 内存初始化 内存的初始化相比前面的那些步骤略微的麻烦了些,为了能够比较清楚地说明下内存的...

  • uboot-step 6 点亮指路灯

    uboot-step 6 点亮指路灯 led原理图 现在我们已经做了一些基本的初始化,终于可以来点亮我们的led了...

  • uboot-step 10 C语言环境初始化

    uboot-step 10 C语言环境初始化 主要有两个工作需要完成: 1.设置堆栈 2.清BSS段 3.跳转到C...

  • 9.25总结

    今天老师给我们讲了Systick 系统时钟、 运用系统时钟。下午总结了之前所学的知识( GPIO初始化、NVIC初...

  • RTT笔记-线程

    继续按照程序流程前进,前面提到的时钟初始化,堆初始化都还未跳出板级初始化rt_hw_board_init函数 然后...

  • 时钟初始化配置函数

    在前面推文的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,然后进入主函数ma...

  • 裸板程序记录之时钟初始化-s3c2440

    时钟初始化 首先需要选择时钟源的来源,jz2440选择的是00,使用晶振的模式 时钟相关的寄存器设置 3.注意事项...

  • S3C2440移植uboot之支持NAND启动

      上一节S3C2440移植uboot之新建单板_时钟SDRAM串口移植uboot初始化了时钟,配置了支持串口,这...

  • 从零开始构建bootloader(基于韦东山JZ2440V3开发

    从零开始构建bootloader 项目步骤: 第一阶段: ​ 1、关看门狗;​ 2、时钟初始化;​ 3、内存初始化...

网友评论

    本文标题: uboot-step 7 时钟初始化

    本文链接:https://www.haomeiwen.com/subject/nyhcsttx.html