u-boot-2012.04.01移植(四)修改CPU时钟及分频系数

本文分析了在编译烧写U-Boot过程中遇到的串口无输出问题,详细探讨了代码中时钟配置与内存控制器设置的顺序冲突,并提供了修改建议,包括调整MPLL设置和分频系数,以及根据自定义时钟频率调整内存控制器参数。

编译烧写u-boot发现,串口没有输出信息

 

分析start.S

1、设置分频系数1:2:4

2、然后在cpu_init_crit中调用lowlevel_init,按照60MHz 的HCLK来设置内存控制器

3、随后设置栈,调用C函数board_init_f,在board_early_init_f中设置时钟

这样的先后顺序是有问题的,因为设置内存控制器时CPU时钟是12MHz,HCLK达不到60MHz

另外分析代码可以知道,这个u-boot暂时只支持nor flash启动,不支持nand flash启动,所以现在只能用把u-boot烧写到nor flash上测试

 

修改代码:

1、删除board_early_init_f中对PLL、MPLL的设置

/*
	writel(0xFFFFFF, &clk_power->locktime);

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

	pll_delay(4000);
*/


2、删除start.S对分频系数的设置

/*
	ldr	r0, =CLKDIVN
	mov	r1, #3
	str	r1, [r0]
*/

 

3、在start.S文件调用cpu_init_crit之前添加对MPLL的设置以及、对分频系数的设置

#define S3C2440_MPLL_400MHZ     ((0x5c<<12)|(0x01<<4)|(0x01))
	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]

	mrc p15, 0, r1, c1, c0, 0		/* 读出控制寄存器 */ 
	orr r1, r1, #0xc0000000 		/* 设置为“asynchronous bus mode” */
	mcr p15, 0, r1, c1, c0, 0		/* 写入控制寄存器 */

	ldr r0, =0x4c000004
	ldr r1, =S3C2440_MPLL_400MHZ
	str r1, [r0]

	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

 

4、根据自己设置的时钟频率,修改lowlevel_init中初始化内存控制器使用的参数

/*
    .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
    .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
    .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
    .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
    .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
    .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
    .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
    .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
    .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
    .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
    .word 0x32
    .word 0x30
    .word 0x30
*/
	.long 0x22011110	 //BWSCON
	.long 0x00000700	 //BANKCON0
	.long 0x00000700	 //BANKCON1
	.long 0x00000700	 //BANKCON2
	.long 0x00000700	 //BANKCON3  
	.long 0x00000700	 //BANKCON4
	.long 0x00000700	 //BANKCON5
	.long 0x00018005	 //BANKCON6
	.long 0x00018005	 //BANKCON7
	.long 0x008C04F4	 // REFRESH
	.long 0x000000B1	 //BANKSIZE
	.long 0x00000030	 //MRSRB6
	.long 0x00000030	 //MRSRB7

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值