注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

男儿当自强的博客

每天进步一点

 
 
 

日志

 
 
 
 

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

2010-10-03 14:46:50|  分类: windows CE 驱动 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

上接:http://blog.csdn.net/chinesedragon2010/archive/2010/09/20/5895956.aspx

1.2 关闭所有的CPU中断

通过对INTMSK,INTSUBMSK寄存器特定为设置为1来屏蔽中断源的中断请求,接着通过对中断模式寄存器INTMOD清零来把中断设置为IRQ模式。

 

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,也就是ARMCLK、HCLK、PCLK、DDRCLK等时钟的基准时钟,下图可以很清楚描述这些时钟的关系

现在我们知道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=1,Startup_PCLKdiv=1,根据下表可知HCLK:DDRCLK:PCLK=4:2:8,可以得到HCLK=ARMCLK/4,PCLK=ARMCLK/8

这些关系会在bsp_cfg.h中对FCLK、PCLK和HCLK中得到体现。

下面接着看对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是用于读取控制寄存器C1到R0中,也知道C1在系统复位后C1控制寄存器除了V位之外的所有控制位都为0,见下图

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

 

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

R1_iA            EQU        (1<<31)

R1_nF            EQU        (1<<30)

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

 

1.5    设置CLKOUT0和CLKOUT1的时钟源

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

ldr          r0,=MISCCR

       ldr          r1,[r0]

       bic         r1,r1, #0x770

       orr          r1,r1,#0x320

       str          r1,[r0]

       配置GPH13和GPH14分别为CLKOUT0与CLKOUT1。

       ldr          r0,=GPHCON

       ldr          r1,[r0]

       bic         r1,r1, #0x3C000000

       orr          r1,r1, #0x28000000

       str          r1,[r0]   

  评论这张
 
阅读(779)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018