⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock_pll.c

📁 基于s3c2410、2440的从SD卡引导Linux内核程序
💻 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 + -