S5PV210的时钟系统

来源:互联网 发布:淘宝信用卡哪个好 编辑:程序博客网 时间:2024/05/01 08:48

般来讲,MCU 的主时钟来源主要是外部晶振或外部时钟,比较常见的是外部晶振。 一般情况, 系统内所使用的时钟都是高频率的时钟,外部晶振一般达不到那么高的频率,所以

一般使用锁相环电路(PLL)进行倍频,而 210 正是通过外接 24MHz 的外部晶振,通过一定的倍频达到更高的频率。


S5PV210 拥有三个时钟域, 分别是主系统时钟(MSYS) 、 显示系统时钟(DSYS) 、以及外设相关系统时钟(PSYS) 。MSYS 主要是给 Cortex A8 处理器、DRAM 内存

控制器、 3D、内部 SRAM、 INTC 以及配置接口 SPERI 用的,最高可达到 200MHz; DSYS主要是给显示相关的模块用的,如: FIMC、 FIMD、 JPEG 等,最高可达到 166MHz

PSYS 主要用于 IO 外设用的,如:GPIO 、I2C 、WDT 、UART 等。


S5PV210有 4 种 PLL 电路,分别是 APLL(主要驱动 MSYS 时钟域) 、MPLL(主要驱动 DSYS时钟域) 、 EPLL (主要用于产生 audio 时钟)、 VPLL (主要用于 video 系统时

钟)。

经典的频率参数:

freq(ARMCLK)      = 1000MHz
freq(HCLK_MSYS)     = 200MHz
freq(HCLK_IMEM)    = 100MHz
freq(PCLK_MSYS)    = 100MHz
freq(HCLK_DSYS)     = 166MHz
freq(PCLK_DSYS)    = 83MHz
freq(HCLK_PSYS)    = 133MHz
freq(PCLK_PSYS)     = 66MHz
freq(SCLK_ONENAND) = 133MHz,166MHz

系统时钟配置的一般步骤

①  设置系统锁相环电路(PLL)的锁定时间
②  配置 PLL
③  选择时钟源
④  配置 MDIV、PDIV、SDIV 的分频系数

S5PV210 的经典配置参数


这里是APLL参数的推荐值.具体计算公式:

Equation to calculate the output frequency: 
 FOUT = MDIV X FIN / (PDIV ×2^SDIV-1) 


参数直接配置是非常困难的,所以给出了一些常用的经典参数,直接查表用就可以了。具体公式和其他的推荐值都在210手册上面。

S5PV210 寄存器的配置

①  锁定时间需要配置 APLL_LOCK、MPLL_LOCK 寄存器,为什么需要配置锁定
时间?因 为 PLL 设置完成过程需要一个起振的过程,这段时间内 PLL 输
出的频率还不稳定。
②  xPLL 的配置需要设置 APLL_CON0、MPLL_CON 寄存器。
③  时钟源的选择需要设置 CLK_SRC0 寄存器。
④  时钟分频系需要配置 CLK_DIV0 寄存器。

#include"clock.h"/*S5PV210有三个时钟域:主系统时钟(MSYS) 显示系统时钟(DSYS),外设相关时钟(PSYS);有4路PLL时钟APPL(驱动MSYS),MPLL(驱动DSYS时钟域),EPLL(产生audio时钟),VPPL(主要video时钟);FOUT=MDIV*FIN/(PDIV*2^(SDIV-1))时钟关系:MSYS:    -freq(ARMCLK)    =freq(MOUT_MSYS)/N(1<N<8);    -freq(HCLK_MSYS)    =freq(ARMCLK)/N(1<N<8);    -freq(PCLK_MSYS)    =freq(HCLK_MSYS)/N(1<N<8);    -freq(HCLK_IMEM)    =freq(HCLK_MSYS)/2;DSYS:    -freq(HCLK_DSYS)  =freq(MOUT_DSYS)/N(1-16);    -freq(PCLK_DSYS)  =freq(HCLK_DSYS)/N(1-8);PSYS:    freq(HCLK_PSYS)=freq(MOUT_PSYS)/N(1<N<16)    freq(PCLK_PSYS)=freq(HCLK_PSYS)/N(1<N<8);    freq(PCLK_ONENAND)=freq(HCLK_PSYS)/N(1<N<8);*//* *sys_clock_init()函数的总体设置时钟情况如下: *ARMCLK=1000MHz, HCLKM=200MHz, HCLKD=166.75MHz *HCLKP =133.44MHz, PCLKM=100MHz, PCLKD=83.375MHz, *PCLKP =66.7MHz */ /*配置步骤: 1.设置系统锁相环电路(PLL)的锁定时间 2.配置PLL 3.选择时钟源 4.配置MDIV,PDIV,SDIV的分频系数。 每个时钟为了方便配置都给了写推荐值 例如: APLL:    FIN TargetFout P   M   S   FOUT (MHZ)    24   1000      3  125  1   1000    FOUT=125*24/(3*2^(1-1))=1000;void sys_clock_init(){/* * 由Fin通过PLL上升到一定的频率所需要的锁定时间 */APLL_LOCK = 0xFFFF;MPLL_LOCK = 0xFFFF;/* *使能APLL控制器,使能锁标志位,MDIV = 0x7d,PDIV = 0x3,SDIV = 0x1 *FOUTapll = MDIV * FIN / (PDIV*2^(SDIV-1)) * = 0x7d*24/(0x3*2^(0x1-1)) * = 125*24/(3*2) = 1000MHz */  /*  bit[31]:使能位;  bit[29]:锁定位;  bit[25:16]:MDIV;  bit[13:8]:PDIV;  bit[2:0]:SDIV;*/APLL_CON0 = (1 << 31)|(1 << 29)|(0x7d << 16)|(0x3 << 8)|(0x1 << 0);/* * 使能MPLL控制器,使能锁标志位,MDIV = 0x29b,PDIV = 0xc,SDIV = 0x1 *FOUTmpll = MDIV * FIN / (PDIV*2^SDIV) * = 0x29b*24/(0xc*2^1) * = 667*24/(12*2) = 667MHz */MPLL_CON = (1 << 31)|(1 << 29)|(0x29b << 16)|(0xc << 8)|(0x1 << 0);/* *  时钟源的设置 *ONENAND_SEL  = HCLK_DSYS  高位 *MUX_PSYS_SEL = SCLKMPLL *MUX_DSYS_SEL = SCLKMPLL   /|\ *MUX_MSYS_SEL = SCLKAPLL    | *VPLL_SEL     = FOUTVPLL    | *EPLL_SEL     = FOUTEPLL    | *MPLL_SEL     = FOUTMPLL *APLL_SEL     = FOUTAPLL   低位 */CLK_SRC0 = (1 << 28)|(1 << 12)|(1 << 8)|(1 << 4)|(1 << 0);    /* *   设置系统时钟分频系数 * PCLK_PSYS_RATIO = 0x1    高位     *   HCLK_PSYS_RATIO = 0x4     *   PCLK_DSYS_RATIO = 0x1 /|\     *   HCLK_DSYS_RATIO = 0x3  |     *   PCLK_MSYS_RATIO = 0x1  |     *   HCLK_MSYS_RATIO = 0x4  |     *   A2M_RATIO  = 0x4     *   APLL_RATIO = 0x0低位 */CLK_DIV0 = (0x1 << 28)|(0x4 << 24)|(0x1 << 20)|(0x3 << 16)|(0x1 << 12)|(0x4 << 8)|(0x4 << 4)|(0 << 0);}/*①  MOUT_MSYS = FOUTapll = 1000MHz 而 ARMCLK 根据经典值为 1000 ,所以APLL_RATIO = 0;②  SLKA2M = HCLK_MSYS = 200MHz,而 SCLKAPLL = 1000,所以 A2M_RATIO = 4;③  HCLK_MSYS = 200MHz,而 ARMCLK = 1000,所以 HCLK_MSYS_RATIO = 4;④  MOUT_DSY  来自 SCLKmpll 即 FOUTmpll = 667MHz,而 HCLK_DSYS 按照经典设置应为 166MHz 所以,HCLK_DSY_RATIO 约为 3;⑤  按照 5.1 节讲的经典值设置可知 PCLK_DSYS = 166MHz,HCLK_DSYS=83MHz,故PCLK_DSYS_RATIO = 1;⑥  由图 5.3 可知, MOUT_PSYS 与 MOUT_DSYS 的来源是一样的,故也是 FOUTmpll = 667MHz,而 HCLK_PSYS = 133,故 HCLK_PSYS_RATIO = 4;⑦  按照 5.1 节讲的经典值设置可知 PCLK_PSYS = 66MHz,HCLK_PSYS=133MHz,故PCLK_PSYS_RATIO = 1;*/







0 0