亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sysc.c

?? 三星 s3c6400測(cè)試代碼
?? C
?? 第 1 頁 / 共 4 頁
字號(hào):
/**************************************************************************************
* 
*	Project Name : S3C6400 Validation
*
*	Copyright 2006 by Samsung Electronics, Inc.
*	All rights reserved.
*
*	Project Description :
*		This software is only for validating functions of the S3C6400.
*		Anybody can use this software without our permission.
*  
*--------------------------------------------------------------------------------------
* 
*	File Name : sysc.c
*  
*	File Description : This file implements the API functons for system controller.
*
*	Author : Haksoo,Kim
*	Dept. : AP Development Team
*	Created Date : 2006/11/08
*	Version : 0.1 
* 
*	History
*	- Created(Haksoo,Kim 2006/11/08)
*	- Added sfr (Wonjoon.Jang 2007/01/08)
*  
**************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "option.h"
#include "library.h"
#include "sfr6400.h"
#include "system.h"

#include "gpio.h"
#include "sysc.h"


//
#define rAPLL_LOCK			(SYSCON_BASE+0x000)
#define rMPLL_LOCK			(SYSCON_BASE+0x004)
#define rEPLL_LOCK			(SYSCON_BASE+0x008)
#define rAPLL_CON			(SYSCON_BASE+0x00c)
#define rMPLL_CON			(SYSCON_BASE+0x010)
#define rEPLL_CON0			(SYSCON_BASE+0x014)
#define rEPLL_CON1			(SYSCON_BASE+0x018)
#define rCLK_SRC				(SYSCON_BASE+0x01c)
#define rCLK_DIV0			(SYSCON_BASE+0x020)
#define rCLK_DIV1			(SYSCON_BASE+0x024)
#define rCLK_DIV2			(SYSCON_BASE+0x028)
#define rCLK_OUT				(SYSCON_BASE+0x02c)
#define rHCLK_GATE			(SYSCON_BASE+0x030)
#define rPCLK_GATE			(SYSCON_BASE+0x034)
#define rSCLK_GATE			(SYSCON_BASE+0x038)
//
#define rAHB_CON0			(SYSCON_BASE+0x100)
#define rAHB_CON1			(SYSCON_BASE+0x104)
#define rAHB_CON2			(SYSCON_BASE+0x108)
#define rSDMA_SEL			(SYSCON_BASE+0x110)
#define rSW_RST				(SYSCON_BASE+0x114)
#define rSYS_ID				(SYSCON_BASE+0x118)
#define rMEM_SYS_CFG		(SYSCON_BASE+0x120)
#define rQOS_OVERRIDE0		(SYSCON_BASE+0x124)
#define rQOS_OVERRIDE1		(SYSCON_BASE+0x128)
#define rMEM_CFG_STAT		(SYSCON_BASE+0x12c)
//
#define rPWR_CFG			(SYSCON_BASE+0x804)
#define rEINT_MASK			(SYSCON_BASE+0x808)
#define rNORMAL_CFG			(SYSCON_BASE+0x810)
#define rSTOP_CFG			(SYSCON_BASE+0x814)
#define rSLEEP_CFG			(SYSCON_BASE+0x818)
#define rOSC_FREQ			(SYSCON_BASE+0x820)
#define rOSC_STABLE			(SYSCON_BASE+0x824)
#define rPWR_STABLE			(SYSCON_BASE+0x828)
#define rFPC_STABLE			(SYSCON_BASE+0x82c)
#define rMTC_STABLE			(SYSCON_BASE+0x830)
// 
#define rOTHERS				(SYSCON_BASE+0x900)
#define rRST_STAT			(SYSCON_BASE+0x904)
#define rWAKEUP_STAT		(SYSCON_BASE+0x908)
#define rBLK_PWR_STAT		(SYSCON_BASE+0x90c)
#define rINFORM0			(SYSCON_BASE+0xA00)
#define rINFORM1			(SYSCON_BASE+0xA04)
#define rINFORM2			(SYSCON_BASE+0xA08)
#define rINFORM3			(SYSCON_BASE+0xA0c)
#define rINFORM4			(SYSCON_BASE+0xA10)
#define rINFORM5			(SYSCON_BASE+0xA14)
#define rINFORM6			(SYSCON_BASE+0xA18)
#define rINFORM7			(SYSCON_BASE+0xA1c)


u8	g_System_Revision, g_System_Pass, g_SYNCACK;
u32	g_APLL, g_MPLL, g_ARMCLK, g_HCLKx2, g_HCLK, g_PCLK;




//////////
// Function Name : SYSC_ReadSystemID
// Function Description : This function reads system ID register
// Input : NONE 
// Output : NONE
// Version : 
void SYSC_ReadSystemID(void)
{
	u32 temp;

	temp = Inp32(rSYS_ID);

	g_System_Revision	=	(temp>>4)&0xf;
	g_System_Pass 	=	(temp)&0xf;

	return;
}

//////////
// Function Name : SYSC_GetClkInform
// Function Description : This function gets common clock information
// Input : NONE 
// Output : NONE
// Version : 
void SYSC_GetClkInform( void)
{
	u8 muxApll, muxMpll, muxSync;
	u8 divApll, divHclkx2, divHclk, divPclk;
	u16 pllM, pllP, pllS;
	u32 temp;
	
	////
	// clock division ratio	
	temp = Inp32(rCLK_DIV0);
	divApll = temp & 0xf;
	divHclkx2 = (temp>>9) & 0x7;
	divHclk = (temp>>8) & 0x1;
	divPclk = (temp>>12) & 0xf;

	////
	// Operating Mode
	temp = Inp32(rOTHERS);
	temp = (temp>>8)&0xf;
	if(temp)
	{
		g_SYNCACK = 1;
	}
	else
	{
		g_SYNCACK = 0;
	}
	
	////
	// ARMCLK
	muxApll = Inp32(rCLK_SRC) & 0x1;
	if(muxApll)	//FOUT
	{			
		temp = Inp32(rAPLL_CON);
		pllM = (temp>>16)&0x3ff;
		pllP = (temp>>8)&0x3f;
		pllS = (temp&0x7);

		g_APLL = ((FIN>>pllS)/pllP)*pllM;
	}
	else	//FIN
	{
		g_APLL = FIN;
	}
	
	g_ARMCLK = g_APLL/(divApll+1);
	
	////
	// HCLK
	muxSync = (Inp32(rOTHERS)>>7) & 0x1;
	if(muxSync)	//synchronous mode
	{
		g_HCLKx2 = g_APLL/(divHclkx2+1);
		
		temp = Inp32(rMPLL_CON);
		pllM = (temp>>16)&0x3ff;
		pllP = (temp>>8)&0x3f;
		pllS = (temp&0x7);

		g_MPLL = ((FIN>>pllS)/pllP)*pllM;
	}
	else
	{
		muxMpll = (Inp32(rCLK_SRC)>>1) & 0x1;
		if(muxMpll)	//FOUT
		{						
			temp = Inp32(rMPLL_CON);
			pllM = (temp>>16)&0x3ff;
			pllP = (temp>>8)&0x3f;
			pllS = (temp&0x7);

			g_MPLL = ((FIN>>pllS)/pllP)*pllM;
		}
		else	//FIN
		{
			g_MPLL = FIN;
		}
		g_HCLKx2 = g_MPLL/(divHclkx2+1);		
	}
	
	g_HCLK = g_HCLKx2/(divHclk+1);
	
	////
	// PCLK
	g_PCLK = g_HCLKx2/(divPclk+1);

	return;
	
}


//////////
// Function Name : SYSC_SetPLL
// Function Description : This function control PLL Output Frequency (APLL, MPLL:PLL9025X, EPLL:PLL9024X)
//				  Fout = (mdiv * Fin) / (pdiv x 2^sdiv),   Fout = ((mdiv+k/2^16) * Fin) / (pdiv x 2^sdiv)
// Input : 				ePLL  : APLL, MPLL, EPLL	
//						uMdiv : Mdiv Value ( 56 ~ 1023), ( 13 ~ 255)
//						uPdiv :  Pdiv Value ( 1~63)
//						uSdiv : Sdiv Value ( 0~5 )
//						uKdiv : PLL9025X (Not Used, 0), PLL9024X(0~65535)
// Output : NONE
// Version : 
void SYSC_SetPLL(PLL_eTYPE  ePLL, u32 uMdiv, u32 uPdiv, u32 uSdiv, u32 uKdiv)
{
	u32 temp, uRegValue;


	switch(ePLL)
	{
		case eAPLL: 
			// Check the Divider Value.
			if( uMdiv < 56 || uMdiv > 1023)
			{
				printf(" Wrong  Mdiv Value, Correct Value Range = (56 ~ 1023) (%d)\n", uMdiv);
			}
			if( uPdiv < 1 || uPdiv > 63)
			{
				printf(" Wrong  Pdiv Value, Correct Value Range = (1 ~ 63) (%d)\n", uPdiv);
			}
			if( uSdiv > 5)
			{
				printf(" Wrong  Sdiv Value, Correct Value Range = (0 ~ 5) (%d)\n", uSdiv);
			}
      			// Check the Fvco Range

      			temp = ((FIN/uPdiv)*uMdiv)/1000000;
			if( temp <1000 || temp > 2000)
			{
#if 0	//EVT1
				printf(" Please select the proper M,P,S divider value\n");
				printf(" Fvco Range = (1000MHz ~ 2000MHz),  Current Value is (%d)MHz\n", temp);
#endif
			}

			uRegValue = (u32)(((u32)(0x1<<31))|(uMdiv<<16)|(uPdiv<<8)|(uSdiv<<0));
			Outp32(rAPLL_CON, uRegValue);
			break;

		case eMPLL: 
			// Check the Divider Value.
			if( uMdiv < 56 || uMdiv > 1023)
			{
				printf(" Wrong  Mdiv Value, Correct Value Range = (56 ~ 1023) (%d)\n", uMdiv);
			}
			if( uPdiv < 1 || uPdiv > 63)
			{
				printf(" Wrong  Pdiv Value, Correct Value Range = (1 ~ 63) (%d)\n", uPdiv);
			}
			if( uSdiv > 5)
			{
				printf(" Wrong  Sdiv Value, Correct Value Range = (0 ~ 5) (%d)\n", uSdiv);
			}
      			// Check the Fvco Range

      			temp = ((FIN/uPdiv)*uMdiv)/1000000;
			if( temp <1000 || temp > 2000)
			{
#if 0 //EVT1
				printf(" Please select the proper M,P,S divider value\n");
				printf(" Fvco Range = (1000MHz ~ 2000MHz),  Current Value is (%d)MHz\n", temp);
#endif
			}

			uRegValue = (u32)(((u32)(0x1<<31))|(uMdiv<<16)|(uPdiv<<8)|(uSdiv<<0));
			Outp32(rMPLL_CON, uRegValue);	
			break;

		case eEPLL: 
			// Check the Divider Value.
			if( uMdiv < 13 || uMdiv > 255)
			{
				printf(" Wrong  Mdiv Value, Correct Value Range = (56 ~ 1023) (%d)\n", uMdiv);
			}
			if( uPdiv < 1 || uPdiv > 63)
			{
				printf(" Wrong  Pdiv Value, Correct Value Range = (1 ~ 63) (%d)\n", uPdiv);
			}
			if( uSdiv > 5)
			{
				printf(" Wrong  Sdiv Value, Correct Value Range = (0 ~ 5) (%d)\n", uSdiv);
			}
			if( uKdiv >65535)
			{
				printf(" Wrong  Kdiv Value, Correct Value Range = (0 ~ 65535) (%d)\n", uKdiv);
			}
		      // Check the Fvco Range

		       temp = ((FIN/uPdiv)*(uMdiv+uKdiv>>16))/1000000;
			if( temp <60 || temp > 250)
			{
				printf(" Please select the proper M,P,S divider value\n");
				printf(" Fvco Range = (60MHz ~ 250MHz),  Current Value is (%d)MHz\n", temp);
			}

			Outp32(rEPLL_CON1, uKdiv);
			uRegValue = (u32)(((u32)(0x1<<31))|(uMdiv<<16)|(uPdiv<<8)|(uSdiv<<0));
			Outp32(rEPLL_CON0, uRegValue);
			break;
		}

	// Get Information
	SYSC_GetClkInform();
}

//////////
// Function Name : SYSC_StopPLL
// Function Description : This function stop PLL.
//				  Fout = (mdiv * Fin) / (pdiv x 2^sdiv),   Fout = ((mdiv+k/2^16) * Fin) / (pdiv x 2^sdiv)
// Input : 				ePLL  : eAPLL,eMPLL, eEPLL
//
//						
// Output : NONE
// Version : 
void SYSC_StopPLL(PLL_eTYPE  ePLL)
{
	u32  uRegValue;


	switch(ePLL)
	{
		case eAPLL: 

			uRegValue = Inp32(rAPLL_CON);
			uRegValue = (uRegValue & ~(0x1<<31)); 
			Outp32(rAPLL_CON, uRegValue);
			break;

		case eMPLL: 
			uRegValue = Inp32(rMPLL_CON);
			uRegValue = (uRegValue & ~(0x1<<31)); 
			Outp32(rMPLL_CON, uRegValue);	
			break;

		case eEPLL: 
			uRegValue = Inp32(rEPLL_CON0);
			uRegValue = (uRegValue & ~(0x1<<31)); 
			Outp32(rEPLL_CON0, uRegValue);
			break;
		}

	
}

/////////
// Function Name : SYSC_RdLockDetect
// Function Description : This function reads Lock Detect bit of the A/MPLL (Hidden)
// Input : 		ePLL  : eAPLL, eMPLL
// Output :            TRUE/FALSE
// Version : 

bool  SYSC_RdLockDetect(PLL_eTYPE  ePLL)
{
	u32 uRegValue, uLockDetect;

	switch(ePLL)
	{
		case eAPLL: 

			uRegValue = Inp32(rAPLL_CON);
			uLockDetect = (uRegValue >>30)&(0x1); 
			break;

		case eMPLL: 
			uRegValue = Inp32(rMPLL_CON);
			uLockDetect = (uRegValue >>30)&(0x1); 
			break;

	}

	if(uLockDetect == 1)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}

	
}

//////////
// Function Name : SYSC_ChangeSYSCLK
// Function Description : This function control System Clock  
//				  Fout = (mdiv * Fin) / (pdiv x 2^sdiv),   Fout = ((mdiv+k/2^16) * Fin) / (pdiv x 2^sdiv)
// Input : 				eAPLLMPS  : APLL M,P,S Value
//						eMPLLMPS  : MPLL M,P,S Value  ( using at Async Mode )
//						uARM_Ratio : ARM Divider
//						uHCLKx2_Ratio : HCLKx2 Divider
//						uPCLK_Ratio : PCLK Divider
//						Other values are retained
// Output : NONE
// Version : 
void SYSC_ChangeSYSCLK(APLL_eOUT  eAPLLMPS, APLL_eOUT eMPLLMPS, u32 uARM_Ratio, u32 uHCLKx2_Ratio, u32 uPCLK_Ratio)
{
	u32 uRegValue, uRegValue_A;
	u32 uRegValue_M;//, uRegValue_E;
	u32 uMVAL, uPVAL, uSVAL;
	u32 uMVAL_M, uPVAL_M, uSVAL_M;
	u32 uTemp;
	
	uMVAL = (eAPLLMPS&0x3FF0000)>>16;
	uPVAL = (eAPLLMPS&0xFF00)>>8;
	uSVAL = eAPLLMPS&0x00FF;
	uRegValue_A = (u32)(((u32)(0x1<<31))|(uMVAL<<16)|(uPVAL<<8)|(uSVAL<<0));

	uMVAL_M = (eMPLLMPS&0x3FF0000)>>16;
	uPVAL_M = (eMPLLMPS&0xFF00)>>8;
	uSVAL_M = eMPLLMPS&0x00FF;


	uTemp = (Inp32(rOTHERS)>>8)&0xF;


	if(uTemp==0xF )		// Sync Mode
	{
	
		uRegValue_M = Inp32(rMPLL_CON);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久妇女6080| 亚洲人123区| 日韩你懂的电影在线观看| 欧美日韩综合一区| 欧美三级日韩三级国产三级| 精品视频免费在线| 欧美一区二区三区小说| 欧美岛国在线观看| 国产精品免费久久久久| 欧美韩日一区二区三区四区| 亚洲欧洲精品成人久久奇米网| 久久久久国产成人精品亚洲午夜| 久久精品夜夜夜夜久久| 久久久高清一区二区三区| 国产精品欧美一区喷水| 久久久久久久网| 日韩三级高清在线| 欧美一区二区人人喊爽| 欧美一级黄色片| 亚洲女人的天堂| 日韩中文字幕1| 99re热视频这里只精品| 日韩一区二区在线播放| 国产精品剧情在线亚洲| 中文字幕第一区二区| 欧美成人性战久久| 欧美国产精品劲爆| 日本va欧美va精品| 国产成人av电影免费在线观看| 欧美性受极品xxxx喷水| 欧美成人三级电影在线| 亚洲精品v日韩精品| av在线不卡电影| 久久久噜噜噜久噜久久综合| 日韩在线a电影| 欧美日韩国产高清一区二区| 亚洲欧美日韩在线播放| 成人av在线资源网站| 国产欧美精品在线观看| 韩国v欧美v日本v亚洲v| 久久午夜羞羞影院免费观看| 免费的成人av| 久久精品这里都是精品| 国产一区二区三区黄视频| 精品国产三级电影在线观看| 蜜桃视频第一区免费观看| 在线综合+亚洲+欧美中文字幕| 亚洲午夜视频在线观看| 欧美精品99久久久**| 天天影视色香欲综合网老头| 国产精品一区久久久久| 91精品国模一区二区三区| 午夜电影网一区| 欧美精品一区二区三区蜜桃| 国产福利精品一区二区| 亚洲精品少妇30p| 欧美日本一区二区三区| 国产麻豆一精品一av一免费 | 久久久久97国产精华液好用吗| 国模套图日韩精品一区二区| 久久精品一级爱片| 91黄视频在线观看| 麻豆成人免费电影| 亚洲激情第一区| 久久久精品影视| 欧美男生操女生| 不卡的av网站| 日本美女一区二区| 亚洲综合免费观看高清完整版在线 | 久久99久久久久| 亚洲精选视频免费看| 精品久久久久久久久久久久包黑料 | 中文字幕av资源一区| 欧美色图片你懂的| 成人av在线播放网站| 国产伦精品一区二区三区免费| 夜夜夜精品看看| 亚洲猫色日本管| 国产日产亚洲精品系列| 欧美大片一区二区| 欧美美女一区二区三区| 91丝袜高跟美女视频| 国产成人h网站| 国产精品18久久久久久久网站| 亚洲高清视频的网址| 亚洲综合丝袜美腿| 亚洲免费观看高清完整| 久久久综合视频| 久久伊人中文字幕| 久久久久成人黄色影片| 亚洲国产精品精华液2区45| 国产夜色精品一区二区av| 2017欧美狠狠色| 亚洲国产高清在线| 一区二区三区在线观看欧美 | 成人蜜臀av电影| 97久久精品人人做人人爽50路| 成人精品高清在线| 国产一区二区三区免费观看| 日韩电影免费在线观看网站| 亚洲国产日韩一区二区| 美国一区二区三区在线播放| 久久精品噜噜噜成人88aⅴ| www.亚洲色图.com| 欧美日韩一区二区三区不卡| 日韩精品一区二区三区四区| 亚洲国产精品成人久久综合一区| 日本一区二区三区电影| 亚洲成人手机在线| 福利电影一区二区三区| 欧美精品电影在线播放| 中文字幕中文字幕一区| 日韩国产欧美在线视频| 成人黄色小视频| 26uuu国产一区二区三区| 亚洲另类在线制服丝袜| 国产一区二区电影| 日韩精品一区二区三区四区视频 | 成人黄色网址在线观看| 日韩午夜中文字幕| 一区二区三区精品| 色欧美日韩亚洲| 欧美—级在线免费片| 亚洲欧洲精品天堂一级| 成人高清av在线| 国产视频一区二区在线| 亚洲成人精品一区二区| 精品一区二区三区免费毛片爱| 欧美做爰猛烈大尺度电影无法无天| 亚洲精品一区二区三区蜜桃下载| 亚洲第一搞黄网站| 在线观看91精品国产麻豆| 亚洲国产人成综合网站| 欧美亚洲图片小说| 亚洲国产综合人成综合网站| 色婷婷综合久色| 亚洲美女视频一区| 欧美中文一区二区三区| 一区二区三区美女视频| 欧美色区777第一页| 天天影视网天天综合色在线播放| 欧美精品在线一区二区| 首页欧美精品中文字幕| 日韩欧美色电影| 国产馆精品极品| 一卡二卡欧美日韩| 日韩精品影音先锋| 91亚洲资源网| 美日韩一区二区| 国产精品乱码妇女bbbb| 4438亚洲最大| 色综合久久久久久久| 五月综合激情日本mⅴ| 精品捆绑美女sm三区| 波多野结衣一区二区三区| 亚洲午夜激情av| 国产亚洲精品精华液| 欧美日韩国产综合久久 | www.欧美色图| 免费成人在线观看视频| 亚洲人成电影网站色mp4| 久久综合精品国产一区二区三区 | 国产精品毛片大码女人| 欧美一卡二卡在线| 色狠狠av一区二区三区| 国产suv精品一区二区883| 日本vs亚洲vs韩国一区三区 | 欧美日韩一区成人| 成人福利电影精品一区二区在线观看| 婷婷亚洲久悠悠色悠在线播放| 亚洲欧洲成人精品av97| 国产三级精品在线| 国产精品无圣光一区二区| 久久久久久久久久美女| 欧美xxx久久| 欧美岛国在线观看| 亚洲精品一区二区三区香蕉| 精品va天堂亚洲国产| 欧美成人女星排行榜| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美二区三区的天堂| 日韩欧美色综合网站| 亚洲精品在线观看网站| 国产午夜亚洲精品不卡| |精品福利一区二区三区| 国产精品不卡在线| 亚洲高清免费视频| 国产一区二区在线电影| 亚洲国产美国国产综合一区二区| 亚洲美女视频在线观看| 视频在线观看一区| 久久国产精品无码网站| 国产成人一区在线| 在线视频综合导航| 日韩欧美激情一区| 国产精品视频一二三区 | 99精品热视频| 91精品婷婷国产综合久久| 久久婷婷国产综合国色天香| 成人欧美一区二区三区小说|