2440超详细uboot移植笔记(五)------设置时钟

你好!这里是风筝的博客,

欢迎和我一起交流。


通过代码分析,我们知道,uboot里先以60MHZ的时钟计算参数来设置内存控制器,但是此时MPLL还未设置,所以我们先修改一下:

 

a. 进入C函数board_early_init_f(路径:board\samsung\smdk2440.c),把

writel(0xFFFFFF, &clk_power->locktime);
writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,&clk_power->mpllcon);

 

这两句是关于时钟的,先注释掉

 

b.将

# if defined(CONFIG_S3C2410)

修改成

# if defined(CONFIG_S3C2440)

因为我们配置的是2440文件

//根据评论里反馈,我添加以下说明,这操作是在start.S 中进行,# if defined(CONFIG_S3C2440)是用来进行条件编译的,因为我们配置的是2440,所以你也可以这么来看,不管是在哪个文件,只要看到2410字样,都可以修改为2440,不管哪里,因为2440和2410架构是一样的,2410可以使用的代码,那2440也是可以的。

 

c.将start.S里设置时钟比例部分去掉:

/*FCLK:HCLK:PCLK = 1:2:4 */
/*default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]

 

d.在下面添加配置时钟:

/*2. 设置时钟 */
ldr r0, =0x4c000014
//mov r1, #0x03;  // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1
mov r1, #0x05;  // FCLK:HCLK:PCLK=1:4:8
str r1, [r0]
/* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
mrc p15, 0, r1, c1, c0, 0/* 读出控制寄存器 */ 
orr r1, r1, #0xc0000000/* 设置为“asynchronous bus mode” */
mcr p15, 0, r1, c1, c0, 0/* 写入控制寄存器 */
#define S3C2440_MPLL_400MHZ     ((0x5c<<12)|(0x01<<4)|(0x01))
/* MPLLCON = S3C2440_MPLL_200MHZ */
ldr r0, =0x4c000004
ldr r1, =S3C2440_MPLL_400MHZ
str r1, [r0]
/* 启动ICACHE */
mrc p15, 0, r0, c1, c0, 0 @ read control reg
orr r0, r0, #(1<<12)
mcr p15, 0, r0, c1, c0, 0   @ write it back

 

 

这样就可以了.

 

 

 

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值