Tiny210---时钟系统

1.S5PV210时钟系统

如图1:

 

 

S5PV210中包含3大类时钟domain:

1)       MSYS(主系统时钟) 用来给cortex a8处理器,dram控制器,3D,IRAM,IROM,中断控制器等提供时钟。

2)       DSYS(显示相关的时钟) 用来给显示相关的部件提供时钟,包括FIMC, FIMD, JPEG, and multimedia IPs。

3)       PSYS(外围设备的时钟) 用来给外围设备提供时钟,如i2s, spi,i2c,uart等。

这三个区域都是AMBA总线,AMBA总线分为AHB和APB两种总线每种总线都有不同的时钟频率。如下图2:

 

AHB对应HCLK,APB对应PCLK,

FCLK   is used by ARM920T,内核时钟,主频。

HCLK   is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the LCD controller, the DMA and USB host block. 也就是总线时钟,包括USB时钟。

PCLK   is used for APB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMC interface, ADC, UART, GPIO, RTC and SPI.即IO接口时钟,例如串口的时钟设置就是从PCLK来的。

 

那么MSYS,DSYS,PSYS最少有6个时钟(实际上不止6个):HCLK_MSYS/PCLK_MSYS、HCLK_DSYS/PCLK_DSYS、HCLK_PSYS/PCLK_PSYS,再外加一个CPU要用的时钟ARMCLK,总共7个时钟频率。

 

由图3可知最后,总共有13个CLK提供出来。

由图4可以知道S5PV210共有4个倍频器即PLL,包括APLL,MPLL,EPLL,VPLL.

 P448

 

void clock_init() 

    // 1 设置各种时钟开关,暂时不使用PLL 
    CLK_SRC0 = 0x0; 
    // 2 设置锁定时间,使用默认值即可 
    APLL_LOCK = 0x0000FFFF; 
    MPLL_LOCK = 0x0000FFFF; 
    // 3 设置分频 
    CLK_DIV0 = 0x14131440; 
    // 4 设置PLL 
    APLL_CON0 = APLL_VAL;
    MPLL_CON = MPLL_VAL; 
    // 5 设置各种时钟开关,使用PLL 
    CLK_SRC0 = 0x10001111; 

 

第一步 、设置各种时钟开关,暂时不使用PLL。

首先我们需要选择使用外接24MHz晶振,由时钟系统图可知,APLL和MPLL的时钟源由“FINPLL”决定,在芯片手册中搜索“FINPLL”,可知相关寄存器为CLK_SRC0,

如图3

在未设置PLL和各种分频系数之前,我们不能使用PLL,为了保险起见,暂时直接使用频率较低的外接的24MHz晶振,待设置好PLL和分频系数后再重新设置各种时钟开关。所以设置为0x00。

 

第二步 、设置锁定时间
设置PLL后,时钟从Fin提升到目标频率时,需要一定的时间,即锁定时间。

第三步 、设置分频
与分频相关的寄存器是CLK_DIV0,见下图4:

 

第四步 、设置PLL

PLL即倍频器,用来放大运行频率。设置好分频后,我们就需要设置PLL了。APLL/MPLL的启动是通过设置APLL_CON0/MPLL_CON寄存器,我们逐个来设置。

ALPP_CON0负责设置APLL,FINPLL=24MHz,经过APLL后,我们将输 出FOUT=1000Mhz的时钟频率,FOUT的计算公式如下: FOUT=MDIV*FIN/(PDIV*2^(SDIV-1)) = 1000 MHz ,由于FIN=24MHz,FOUT=1000MHz,我们可以这样取值: MDIV= 0x7d,PDIV= 0x3,SDIV=1。这3个值并不是固定死的,只要能使FOUT=1000Mhz,任意搭配都是可以的。

MPLL_CON寄存器负责设置MPLL,经过MPLL后,我们将输出FOUT=667Mhz的时钟频率,FOUT的计算公式如下: FOUT=MDIV*FIN/(PDIV*2^SDIV) = 667 MHz 由于FIN=24MHz,FOUT=667MHz,我们可以这样取值: MDIV=0x29B, PDIV= 0xC,SDIV=1。这3个值并不是固定死的,只要能使FOUT=667Mhz,任意搭配都是可以的。

第五步 设置各种时钟开关

在时钟系统图中,所有的MUX都是用来选择时钟的,相关寄存器是CLK_SRC0

参考S5PV210时钟设置参考图,设置各种时钟开关: 
APLL_SEL=1,使用FOUTAPLL 
MPLL_SEL=1,使用FOUTMPLL 
EPLL_SEL=1,使用FOUTEPLL 
VPLL_SEL=1,使用FOUTVPLL 
MUX_MSYS_SEL=0,使用SCLKAPLL 
MUX_DSYS_SEL=0,使用SCLKMPLL 
MUX_PSYS_SEL=0,使用SCLKMPLL 
ONENAND_SEL=1,使用HCLK_DSYS 
所以CLK_SRC0=0x10001111;

posted @ 2014-11-17 18:23  风啊  阅读(238)  评论(0)    收藏  举报