Board logo

标题: 关于在u-boot汇编中设置与初始化时钟频率的解析 [打印本页]

作者: look_w    时间: 2017-10-24 20:42     标题: 关于在u-boot汇编中设置与初始化时钟频率的解析

本文主要针对S3C2440分析
S3C2440的主时钟源来自外部晶振(XTIPLL)或外部时钟(EXTCLK)。S3C2440有两个PLLphase locked loop)一个是MPLL,一个是UPLLMPLL用于CPU及其他外围器件,UPLL用于USB

1,MPLL, 用于产生FCLKHCLKPCLK三种频率, 这三种频率分别有不同的用途:
     FCLKCPU提供的时钟信号。
     HCLK是为AHB总线提供的时钟信号, Advanced High-performance Bus,主要用于高速外设,比如内存控制器,中断控制器,LCD控制器, DMA 等。S3C2440DataSheet里可以看到,S3C2440最大支持400MHz的主频,但是这并不意味着一定工作在400MHz下面,可以通过设定MPLL, UPLL寄存器来设定CPU的工作频率。
     PCLK是为APB总线提供的时钟信号,Advanced Peripherals Bus,主要用于低速外设,比如看门狗,UART控制器, IIS, I2CSDI/MMC, GPIORTC and SPI等。
2,UPLL,专门用于驱动USB host/Device。并且驱动USB host/Device的频率必须为48MHz

如果要设置MPLLUPLL,要注意它们的先后顺序,MPLLUPLL的设定是有前后顺序的,必须先设定UPLL,然后才能设定MPLL,而且中间需要大约7个空指令(NOP)的间隔。



S3C2410 CPU默认的工作主频为12MHz(Fin),使用PLL电路可以产生更高的主频供CPU及外围器件使用。
通过MPLL会产生三个部分的时钟频率:FCLK、HCLK、PLCK。FCLK用于CPU核,HCLK用于AHB总线的设备(比如SDRAM),PCLK用于APB总线的设备(比如UART)。


时钟电路相关寄存器总共有7个,下面分别介绍。
MPLLCON(0X4C00 0004)和UPLLCON(0X4C00 0008)
这两个寄存器用来设置主锁相环产生的时钟和USB锁相环产生的时钟。
/*
Mpll = (2 * m * Fin) / (p * 2s)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV

Upll = (m * Fin) / (p * 2s)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV

MDIV =PLLCON[19:12];  PDIV=PLLCON[9:4];  SDIV=PLLCON[1:0];
*/

P,M范围:1<=P<=62,1<=M<=248
注意:MDIV[19:12],PDIV[9:4],SDIV[1:0],当设置MPLL和UPLL值的时候,需要先设置UPLL再设置MPLL。
例如:MPLLCON = (92<<12) | (1<<4) |(1);//FCLK=400M
这里MDIV=92,PDIV=1,SDIV=1,那么m=100,p=3,s=1,且Fin=12M,所以FCLK=400M




所以u-boot的设置代码如下:








附:







欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0