WINCE6.0+S3C2443的启动过程---eboot2

1.3系统时钟设置

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

 

WINCE6.0+S3C2443的启动过程---eboot2_第1张图片

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

Startup_Mdiv      EQU    81

Startup_Pdiv      EQU    2

Startup_Sdiv      EQU    1

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

 

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

WINCE6.0+S3C2443的启动过程---eboot2_第2张图片

 

现在我们知道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

 

WINCE6.0+S3C2443的启动过程---eboot2_第3张图片

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

WINCE6.0+S3C2443的启动过程---eboot2_第4张图片

 

那么就是上电复位后,控制寄存器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]   

 

 

 

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

 

你可能感兴趣的:(WINCE6.0+S3C2443的启动过程---eboot2)