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]   

     

     

     

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

  • 相关阅读:
    php数组的循环遍历
    Mysql中的字符串函数
    关于给居于网络里面的计算机发送消息的问题
    WINDOWS系统服务详解
    GET DATA
    无法移动或重命名“Documents and Settings”文件夹
    瑞星升级包 下载网站
    ARP本机绑定 批处理
    如何获得各个运行进程的id
    如何通过程序知道有哪些计算机与自己的电脑连接
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298870.html
Copyright © 2011-2022 走看看