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

📄 clock_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	uBCDMIN		=	Inp32(0x7E005074);
	uBCDSEC	=	Inp32(0x7E005070);
	
	g_iSeed = (uBCDDAY*24*60*60)+(uBCDHOUR*60*60)+(uBCDMIN*60)+uBCDSEC;
	srand(g_iSeed);	
}


//////////
// Function Name : Select_PMS_Random
// Function Description : This function generate P,M,S Value.
//					 
// Input : 	
// Output : 	
//			
// Version : v0.1
// PMS Value must be changed~~~
void Select_PMS_Random(void)
{
	g_iRandom_PMS = rand()%18;

	DisplayLED(g_iRoop3/10);
	g_iRoop3++;
	switch ( g_iRandom_PMS )
	{
		case 0:
			g_iPvalue = 6;
			g_iMvalue = 800;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 200;
			break;
		case 1:
			g_iPvalue = 6;
			g_iMvalue = 880;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 220;
			break;
		case 2:
			g_iPvalue = 6;
			g_iMvalue = 960;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 240;
			break;
		case 3:
			g_iPvalue = 3;
			g_iMvalue = 260;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 260;
			break;
		case 4:
			g_iPvalue = 3;
			g_iMvalue = 280;
			g_iSvalue= 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 280;
			break;			
		case 5:
			g_iPvalue = 3;
			g_iMvalue= 300;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 300;
			break;			
		case 6:
			g_iPvalue = 3;
			g_iMvalue = 320;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 320;
			break;			
		case 7:
			g_iPvalue = 3;
			g_iMvalue= 340;
			g_iSvalue= 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 340;
			break;			
		case 8:
			g_iPvalue = 3;
			g_iMvalue = 360;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 360;
			break;			
		case 9:
			g_iPvalue = 3;
			g_iMvalue = 380;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 380;
			break;			
		case 10:
			g_iPvalue = 3;
			g_iMvalue = 400;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 400;
			break;			
		case 11:
			g_iPvalue = 3;
			g_iMvalue = 420;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 420;
			break;			
		case 12:
			g_iPvalue = 3;
			g_iMvalue = 440;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 440;
			break;			
		case 13:
			g_iPvalue = 3;
			g_iMvalue = 460;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 460;
			break;			
		case 14:
			g_iPvalue = 3;
			g_iMvalue = 480;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 480;
			break;			
		case 15:
			g_iPvalue = 3;
			g_iMvalue = 500;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 520;
			break;			
		case 16:
			g_iPvalue = 6;
			g_iMvalue = 520;
			g_iSvalue = 1;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 520;
			break;			
		case 17:
			g_iPvalue = 6;
			g_iMvalue = 540;
			g_iSvalue = 1;
			g_iCompare_1 = g_iRandom_PMS;
			g_iAPLL = 540;
			break;			
		default :

			break;
	}
}

// PMS Value must be changed~~~
void Select_PMS_Random_M(void)
{
	g_iRandom_PMS = rand()%18;

	DisplayLED(g_iRoop3/10);
	g_iRoop3++;
	switch ( g_iRandom_PMS )
	{
		case 0:
			g_iPvalue = 6;
			g_iMvalue = 800;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 200;
			break;
		case 1:
			g_iPvalue = 6;
			g_iMvalue = 880;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 220;
			break;
		case 2:
			g_iPvalue = 6;
			g_iMvalue = 960;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 240;
			break;
		case 3:
			g_iPvalue = 3;
			g_iMvalue = 260;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 260;
			break;
		case 4:
			g_iPvalue = 3;
			g_iMvalue = 280;
			g_iSvalue= 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 140;
			break;			
		case 5:
			g_iPvalue = 3;
			g_iMvalue= 300;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 150;
			break;			
		case 6:
			g_iPvalue = 3;
			g_iMvalue = 320;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 160;
			break;			
		case 7:
			g_iPvalue = 3;
			g_iMvalue= 340;
			g_iSvalue= 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 170;
			break;			
		case 8:
			g_iPvalue = 3;
			g_iMvalue = 360;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 180;
			break;			
		case 9:
			g_iPvalue = 3;
			g_iMvalue = 380;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 190;
			break;			
		case 10:
			g_iPvalue = 3;
			g_iMvalue = 400;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 200;
			break;			
		case 11:
			g_iPvalue = 3;
			g_iMvalue = 420;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 210;
			break;			
		case 12:
			g_iPvalue = 3;
			g_iMvalue = 440;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 220;
			break;			
		case 13:
			g_iPvalue = 3;
			g_iMvalue = 460;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 230;
			break;			
		case 14:
			g_iPvalue = 3;
			g_iMvalue = 480;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 240;
			break;			
		case 15:
			g_iPvalue = 3;
			g_iMvalue = 500;
			g_iSvalue = 3;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 260;
			break;			
		case 16:
			g_iPvalue = 6;
			g_iMvalue = 520;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 260;
			break;			
		case 17:
			g_iPvalue = 6;
			g_iMvalue = 532;
			g_iSvalue = 2;
			g_iCompare_1 = g_iRandom_PMS;
			g_iMPLL = 266;
			break;			
		default :

			break;
	}
}


//////////
// Function Name : Apply_PMS
// Function Description : This function 
//					 
// Input : 	
// Output : 	
//			
// Version : v0.1 - 070228
void Apply_PMS(void)
{
	u32 uRegValue_APLL;
	u32 uRet;
	//u32 uRegValue_DIV0, uRegValue_SRC, uTemp, uTemp1;
	
	//EVT0, Using External Clock.
	

	uRegValue_APLL =  (u32)(((u32)(0x1<<31))|(g_iMvalue<<16)|(g_iPvalue<<8)|(g_iSvalue<<0));
	
	// Clock Divider Change 1:2:2
	//uRegValue_DIV0 = Inp32SYSC(0x20);
	//uTemp = (uRegValue_DIV0&~(0xFFFF))|(1<<12)|((0<<9)|(1<<8)|(1<<4)|(0<<0));		// ARM:HCLKx2:HCLK:PCLK = 1:1:2:2

	//uRegValue_SRC = Inp32SYSC(0x1C);
	//uTemp1 = (uRegValue_SRC&~(0x7))|0x0;

#if 0	//EVT0
	Outp32SYSC(0x1c, uTemp1);	// Clock Source Change
	Outp32SYSC(0x20, uTemp);	// Change Clock Divider
#endif

	//PLL Change
	Outp32SYSC(0xc, uRegValue_APLL);

	while(((Inp32SYSC(0xc)>>30)&0x1)==0);

#if 0	//EVT0
	// Change Divider Value
	Outp32SYSC(0x20, uRegValue_DIV0);
	// Change Clock SRC
	Outp32SYSC(0x1c, uRegValue_SRC);
#endif

	SYSC_GetClkInform();
	UART_InitDebugCh(0, 115200);
	Delay(100);

	uRet = MemoryRWTest1(0x52000000, 0x52100000);

	if(uRet == false)
		{
		printf("Memory Read write Test is failed\n");
	 	printf("============================ \n");
		printf("Current Clock Information \n");
		printf("ARMCLK: %.2fMHz  HCLKx2: %.2fMHz  HCLK: %.2fMHz  PCLK: %.2fMHz\n",(float)g_ARMCLK/1.0e6, (float)g_HCLKx2/1.0e6, (float)g_HCLK/1.0e6, (float)g_PCLK/1.0e6);
		printf("============================ \n");
		}

#if 0
	printf("============================ \n");
	printf("Current Clock Information \n");
	printf("ARMCLK: %.2fMHz  HCLKx2: %.2fMHz  HCLK: %.2fMHz  PCLK: %.2fMHz\n",(float)g_ARMCLK/1.0e6, (float)g_HCLKx2/1.0e6, (float)g_HCLK/1.0e6, (float)g_PCLK/1.0e6);
	printf("============================ \n");
#endif	
		
}


void Apply_PMS_M(void)
{
	u32 uRegValue_MPLL;
	u32 uRet;
	//u32 uRegValue_DIV0, uRegValue_SRC, uTemp, uTemp1;
	
	//EVT0, Using External Clock.
	

	uRegValue_MPLL =  (u32)(((u32)(0x1<<31))|(g_iMvalue<<16)|(g_iPvalue<<8)|(g_iSvalue<<0));
	
	// Clock Divider Change 1:2:2
	//uRegValue_DIV0 = Inp32SYSC(0x20);
	//uTemp = (uRegValue_DIV0&~(0xFFFF))|(1<<12)|((0<<9)|(1<<8)|(1<<4)|(0<<0));		// ARM:HCLKx2:HCLK:PCLK = 1:1:2:2

	//uRegValue_SRC = Inp32SYSC(0x1C);
	//uTemp1 = (uRegValue_SRC&~(0x7))|0x0;

#if 0	//EVT0
	Outp32SYSC(0x1c, uTemp1);	// Clock Source Change
	Outp32SYSC(0x20, uTemp);	// Change Clock Divider
#endif

	//PLL Change
	Outp32SYSC(0x10, uRegValue_MPLL);

	while(((Inp32SYSC(0x10)>>30)&0x1)==0);

#if 0	//EVT0
	// Change Divider Value
	Outp32SYSC(0x20, uRegValue_DIV0);
	// Change Clock SRC
	Outp32SYSC(0x1c, uRegValue_SRC);
#endif

	SYSC_GetClkInform();
	UART_InitDebugCh(0, 115200);
	Delay(100);

	uRet = MemoryRWTest1(0x52000000, 0x52100000);

	if(uRet == false)
		{
		printf("Memory Read write Test is failed\n");
	 	printf("============================ \n");
		printf("Current Clock Information \n");
		printf("ARMCLK: %.2fMHz  HCLKx2: %.2fMHz  HCLK: %.2fMHz  PCLK: %.2fMHz\n",(float)g_ARMCLK/1.0e6, (float)g_HCLKx2/1.0e6, (float)g_HCLK/1.0e6, (float)g_PCLK/1.0e6);
		printf("============================ \n");
		}

#if 0
	printf("============================ \n");
	printf("Current Clock Information \n");
	printf("ARMCLK: %.2fMHz  HCLKx2: %.2fMHz  HCLK: %.2fMHz  PCLK: %.2fMHz\n",(float)g_ARMCLK/1.0e6, (float)g_HCLKx2/1.0e6, (float)g_HCLK/1.0e6, (float)g_PCLK/1.0e6);
	printf("============================ \n");
#endif	
		
}

void Select_Random_DIVN_PMS(void)
{
	//u32 iARMCLK=0, iHCLK=0, iPCLK=0;
	float fARMCLK=0 ,fHCLKx2=0, fHCLK=0, fPCLK=0;
	float fARMCLK_0=0 ,fHCLKx2_0=0, fHCLK_0=0, fPCLK_0=0;	
	u32 u_iHCLK_DIVN_R = 1;
	
	while(1)
	{

		g_iARMCLK_DIVN_R  = ( rand()%16 );
		g_iHCLKx2_DIVN_R    = ( rand()%8 );
		g_iPCLK_DIVN_R    = (( rand()%15 )+1);   // 1~15
		
		fARMCLK = (float)(g_iAPLL   /  (g_iARMCLK_DIVN_R+1));
		fHCLKx2   = (float)(g_iAPLL /  (g_iHCLKx2_DIVN_R+1));
		fHCLK   =(float)(fHCLKx2   / (u_iHCLK_DIVN_R +1));
		fPCLK   = (float)(fHCLKx2  / (g_iPCLK_DIVN_R+1));
		
		
		if ( fARMCLK<=540 & fHCLK <= 133 & fPCLK <= 66.5 )		
		//if ( fARMCLK<=540 & fHCLK <= 133 & fPCLK <= 40 )
		{
		 	g_iRoop ++;
			
			if ( g_iRoop3 >= 2 )
			{
				fARMCLK_0 = (float)(g_iAPLL_0   /  (g_iARMCLK_DIVN_R+1));
				fHCLKx2_0   = (float)(g_iAPLL_0 /  (g_iHCLKx2_DIVN_R+1));
				fHCLK_0	 = (float)(fHCLKx2_0 / (u_iHCLK_DIVN_R+1));
				fPCLK_0   = (float)(fHCLKx2_0   / (g_iPCLK_DIVN_R+1));

				if ( fARMCLK_0 <=540 & fHCLK_0 <= 133 & fPCLK_0 <= 66.5 )		
				{
				 	g_iFCLK = g_iAPLL*1000000;
					printf("Previous PLL Freauency = %dMhz\n", g_iAPLL_0);
					//UART_TxEmpty(1);
				 	g_iAPLL_0 = g_iAPLL;				
				 	break;
				}
			}
			else 
			{
				g_iAPLL_0 = g_iAPLL;		
				g_iFCLK = g_iAPLL*1000000;
				break;
				
			}
		}
	}
}



void Compare_PMS_Logic(void)
{
	if ( g_iRoop3 >= 2 )
	{	
		iCompare_PMS[g_iCompare_0] = iCompare_PMS[g_iCompare_0] & (~(1<<g_iCompare_1)) ; 
		g_iSum = 0;
		for ( g_iRoop1 = 0 ; g_iRoop1 < 18 ; g_iRoop1++ )
		{
			g_iSum = g_iSum + iCompare_PMS[g_iRoop1];
		}
		if ( g_iSum == 0 )
		{
			printf(" \nTest End!!! -> %d Rotation Testing\n " , g_iRoop3 );
			printf(" \nTest End!!! -> %d th Test \n " , g_iRoop6 );
			g_iRoop6++;

			for ( g_iRoop4 = 0 ; g_iRoop4 < 18 ; g_iRoop4++ )
			{
				iCompare_PMS[g_iRoop4] = 0x3ffff;
			}
			//if ( g_iRoop6 == 4 )
			if( g_iRoop6 == 5)
			{
				//printf( " 3th Test END !! \n");
				printf( " 4th Test END !! \n");
				g_TestEnd = 1;
				//UART_Getc();	
			}
		}
		g_iCompare_0 = g_iCompare_1;
	}
	else
	{
		g_iCompare_0 = g_iCompare_1;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -