P2020 clock 设置

SYSCLK是CPU CORE的时钟源,通过PLL倍频,可以得到CCB时钟频率,CCB通过倍频可以分别得到core0 和core1的时钟频率。U-BOOT的串口输出时显示的频率,是由上面提到的两个PLL倍数计数得到的。



这是一个只读寄存器,由硬件来配置各个倍频倍数。

Plat_Ratio 设定由SYSCLK倍频到CCB时钟的倍数

e500_1_Ratio设置由CCB时钟倍频到CPU core1时钟的倍数

e500_0_Ratio设置由CCB时钟倍频到CPU core0时钟的倍数

DDR_Ratio设置由DDRCLK倍频DDR Complex 时钟的倍数

以U-BOOT 2013.01版本为例,

U-Boot 2013.01 (Feb 11 2014 - 16:41:19)

CPU0:  P2020E, Version: 2.1, (0x80ea0021)
Core:  E500, Version: 5.1, (0x80211051)
Clock Configuration:
       CPU0:800  MHz, CPU1:800  MHz, 
       CCB:400  MHz,
       DDR:400  MHz (800 MT/s data rate) (Asynchronous), LBC:25   MHz

在一段启动的时候会通过初始化序列调用checkcpu函数,获得各个核的时钟频率,DDR时钟速率,LBC速率等时钟数值

	get_sys_info(&sysinfo);

	puts("Clock Configuration:");
	for_each_cpu(i, core, nr_cores, mask) {
		if (!(i & 3))
			printf ("\n       ");
		printf("CPU%d:%-4s MHz, ", core,
			strmhz(buf1, sysinfo.freqProcessor[core]));
	}
	printf("\n       CCB:%-4s MHz,\n", strmhz(buf1, sysinfo.freqSystemBus));


上面代码只是字符串的输出,字符串输出前会调用get_sys_info(&sysinfo)来计算实际的时钟数值
plat_ratio = (gur->porpllsr) & 0x0000003e;
plat_ratio >>= 1;
sysInfo->freqSystemBus = plat_ratio * CONFIG_SYS_CLK_FREQ;
我们关注的几个时钟的数值都是在上面函数技术出来的。

CONFIG_SYS_CLK_FREQ由板级头文件定义,在P2020RDB-PC中的定义为100M

#if defined(CONFIG_P2020RDB)
#define CONFIG_SYS_CLK_FREQ	100000000
#else
#define CONFIG_SYS_CLK_FREQ	66666666
#endif
#define CONFIG_DDR_CLK_FREQ	66666666



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值