📄 clock_pll.c
字号:
#include "2440addr.h"
#include "Clock_PLL.h"
//#define S3C2440 1 //It's S3C2440
#define S3C2440 0 //It's S3C2410
unsigned int FIN = 12000000; //12MHz
unsigned int FCLK,cpu_freq;
unsigned int HCLK;
unsigned int PCLK;
unsigned int UCLK;
//*************************[ MPLL ]*******************************
void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
{
rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
}
//*************************[ UPLL ]*******************************
void ChangeUPllValue(int mdiv,int pdiv,int sdiv)
{
rUPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
}
void Get_cpu_bus_clk(void)
{
unsigned int val;
unsigned char m, p, s;
val = rMPLLCON;
m = (val>>12)&0xff;
p = (val>>4)&0x3f;
s = val&0x03;
//(m+8)*FIN*2 不要超出32位数!
#if S3C2440
FCLK = ((m+8)*FIN*2)/((p+2)*(1<<s));
val = rCLKDIVN;
m = (val>>1)&3;
p = val&1;
val = rCAMDIVN;
s = val>>8;
#else //S3C2410
FCLK = ((m+8)*FIN)/((p+2)*(1<<s));
val = rCLKDIVN;
m = (val>>1)&1;
p = val&1;
#endif
switch(m)
{
case 0:
HCLK = FCLK;
break;
case 1:
HCLK = FCLK>>1;
break;
#if S3C2440
case 2:
if(s&2)
HCLK = FCLK>>3;
else
HCLK = FCLK>>2;
break;
case 3:
if(s&1)
HCLK = FCLK/6;
else
HCLK = FCLK/3;
break;
#endif
}
if(p)
PCLK = HCLK>>1;
else
PCLK = HCLK;
#if S3C2440
if(s&0x10)
cpu_freq = HCLK;
else
cpu_freq = FCLK;
#endif
val = rUPLLCON;
m = (val>>12)&0xff;
p = (val>>4)&0x3f;
s = val&3;
val = ((m+8)*FIN)/((p+2)*(1<<s));
#if S3C2440
UCLK = (rCLKDIVN&8)?(val>>1):val;
#else
UCLK = val;
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -