zoukankan      html  css  js  c++  java
  • WINCE6.0+S3C2443的启动过程eboot2

    1.3系统时钟设置

    我的另一篇博客介绍了S3C2443的时钟管理http://blog.csdn.net/chinesedragon2010/archive/2010/09/24/5903553.aspx

     

    这些红色字体的值在S3C2443.inc文件中定义,

    Startup_Mdiv      EQU    81

    Startup_Pdiv      EQU    2

    Startup_Sdiv      EQU    1

    这些值的实际意义是什么呢?我们先来看看上图的第188行到190行对MPLLCON寄存器的设置,结合下表

     

    可知FOUT=534MHZ,这就是MSysClk,也就是ARMCLKHCLKPCLKDDRCLK等时钟的基准时钟,下图可以很清楚描述这些时钟的关系

     

    现在我们知道FOUT=534MHZ了,S3C2443.inc文件中定义

    Startup_ARMCLKdiv      EQU             0                  

    Startup_PREdiv         EQU             0x1              

    Startup_HCLKdiv            EQU             0x1              

    Startup_PCLKdiv             EQU             1    

    那么这些值代表的意义是什么呢?

    其中Startup_ARMCLKdiv=0,根据CLKDIVO寄存器对ARMDIV位的定义可知ARMCLK=MSysClk=534MHZ,也就是ARM内核的主频是534MHZ

    Startup_PREdiv=1,根据上图,可知MSysClkPreDiv= MSysClk/2

    Startup_HCLKdiv=1Startup_PCLKdiv=1,根据下表可知HCLK:DDRCLK:PCLK=4:2:8,可以得到HCLK=ARMCLK/4PCLK=ARMCLK/8

    这些关系会在bsp_cfg.h中对FCLKPCLKHCLK中得到体现。

     

    下面接着看对CLKSRC寄存器的设置

    ldr          r0,=CLKSRC                    ;      Select MPLL clock out for SYSCLK

    ldr          r1,[r0]

    orr          r1,r1,#0x50

    str          r1,[r0]   

    上面代码主要是选择MPLL输出作为MSysClk的基准时钟,选择EPLL输出作为ESYSCLK的基准时钟。

     

    1.4    设置CPU的总线模式

    通过调用函数MMU_SetAsyncBusMode来把CPU的总线模式设置为同步模式

    bl           MMU_SetAsyncBusMode

    此函数体定义如下

    MMU_SetAsyncBusMode

            mrc     p15,0,r0,c1,c0,0

            orr     r0,r0,#R1_nF:OR:R1_iA

            mcr     p15,0,r0,c1,c0,0

            mov    pc, lr

     

    通过上图我们可知mrc     p15,0,r0,c1,c0,0是用于读取控制寄存器C1R0中,也知道C1在系统复位后C1控制寄存器除了V位之外的所有控制位都为0,见下图

     

    那么就是上电复位后,控制寄存器C1iAnF位,也即iAnF位这两位的值也为0,下表是iAnF位这两位组合的定义

     

     

    结合上面这些图表及下面的定义

    R1_iA            EQU        (1<<31)

    R1_nF            EQU        (1<<30)

    所以orr     r0,r0,#R1_nF:OR:R1_iA的意义就是先判断R1_nF是否为1,如为1,则对C1nF位做或运算,也即把CPU的时钟模式设置为Synchronous模式;如为0,则对C1iA位做或运算,也即把CPU的时钟模式设置为FastBus模式,接着通过mcr     p15,0,r0,c1,c0,0语句把运算后的结果写回C1控制寄存器。

     

    1.5    设置CLKOUT0CLKOUT1的时钟源

    设置CLKOUT0的时钟源为PCLK,设置CLKOUT1的时钟源为HCLK

    ldr          r0,=MISCCR

           ldr          r1,[r0]

           bic         r1,r1, #0x770

           orr          r1,r1,#0x320

           str          r1,[r0]

           配置GPH13GPH14分别为CLKOUT0CLKOUT1

           ldr          r0,=GPHCON

           ldr          r1,[r0]

           bic         r1,r1, #0x3C000000

           orr          r1,r1, #0x28000000

           str          r1,[r0]   

     

     

     

    -------------------------------->

  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298870.html
Copyright © 2011-2022 走看看