您的位置:首页 > 运维架构 > Linux

Linux 时钟模块分析1

2016-10-02 17:50 288 查看
1.硬件相关信息

NanoPC-T2用的是saumung 的S5P4418,所以参考 SEC_Users_Manual_S5P4418_Users_Manual_Preliminary_Ver.0.10.pdf 134页

PLL的结构示意图



2.  源码分析

PHY_BASEADDR_CLKPWR_MODULE 是寄存器基地址,  在 arch/arm/mach-s5p4418/prototype/base/nx_chip.h中定义

#define PHY_BASEADDR_CLKPWR_MODULE 0xC0010000

static struct NX_CLKPWR_RegisterSet * const clkpwr =
(struct NX_CLKPWR_RegisterSet *)IO_ADDRESS(PHY_BASEADDR_CLKPWR_MODULE);

static unsigned int pll_get_rate(unsigned int pllN, unsigned int xtal)
{
unsigned int val, val1, nP, nM, nS, nK;
val = clkpwr->PLLSETREG[pllN];
val1 = clkpwr->PLLSETREG_SSCG[pllN];
xtal /= 1000; /* Unit Khz */

nP= (val >> 18) & 0x03F;
nM= (val >> 8) & 0x3FF;
nS= (val >> 0) & 0x0FF;
nK= (val1>> 16) & 0xFFFF;

if(pllN < 2)
return (unsigned int)(((nM * xtal)/nP)>>nS)*1000;
else
return (unsigned int)((((nM * xtal)/nP)>>nS)+((((nK * xtal)/nP)>>nS)>>16))*1000;
}PLLL0 和PLL1是non-dithered PLL,计算公式入下:



PLLL0 和PLL1是dithered PLL,计算公式入下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: