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

📄 clock_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	//Choose Operating Mode.
	printf("\nChoose System Operating Mode : 0:Sync Mode, 1:Async Mode	     : ");
       uOPType = GetIntNum();

	//CLK_OUT Pad => HCLK
	SYSC_CtrlCLKOUT(eCLKOUT_APLLOUT, 9);
	

	uLockTime = 100;	
	SYSC_SetLockTime(eAPLL, uLockTime);
	SYSC_SetLockTime(eMPLL, uLockTime);
	// Test Point....
	GPIO_SetFunctionEach(eGPIO_N, eGPIO_9, 1);	// EINT9 : Output pad

	switch(uOPType)
	{
		case 0: 
			printf("[Selected Sync. Mode Operation]\n");
			SYSC_ChangeMode(eSYNC_MODE);

			uRegValue0_bk = Inp32SYSC(0xC);			// APLL_CON
			uRegValue1_bk = Inp32SYSC(0x10);			// MPLL CON
			uRegValue2_bk = Inp32SYSC(0x1C);			// Clock Source Register
			uRegValue3_bk = Inp32SYSC(0x20);			// Clock Divider value
			
			break;

		case 1: 
			printf("Selected Async Mode Operation\n");
			//SYSC_ChangeMode(eASYNC_MODE);

			uRegValue0_bk = Inp32SYSC(0xC);			// APLL_CON
			uRegValue1_bk = Inp32SYSC(0x10);			// MPLL CON
			uRegValue2_bk = Inp32SYSC(0x1C);			//Clock Source Register
			uRegValue3_bk = Inp32SYSC(0x20);			// Clock Divider value
			break;

	}


	uTestCount = 0;
	uTestErr=0;
	INTC_SetVectAddr(NUM_RTC_TIC,Isr_RTC_Tick1);
	INTC_Enable(NUM_RTC_TIC);

	uTemp = Inp32SYSC(0x20);
	uTemp = (1<<12)|(0<<9)|(1<<8)|(1<<4)|(0<<0);		// ARM:HCLKx2:HCLK:PCLK = 1:1:2:2
					
	uTemp1 = Inp32SYSC(0x1C);			//Clock Source Register
	uTemp1 = uTemp1 & ~(0x7) | 0x0;

	
	for(uMval=390; uMval<411; uMval++)
	{
		printf(" M-Div Value : %d \n", uMval);
		printf(" ============================ \n");
		UART_TxEmpty();
		uTestCount = 0;
		uTestErr=0;
	
	while(1)
		{
		if(UART_GetKey()!=0x0) 
			break;
		if(uTestCount>5000) 
		{
			printf("	End of test = M-Div Value : %d\n", uMval);
			printf("PLL ON/OFF Test - Test Count: %d,  Error: %d\n", uTestCount, uTestErr);
			break;
		}
		if(uTestErr>1000)
		{
			printf("	M-Div Value : %d\n", uMval);
			printf("PLL ON/OFF Fail - Test Count: %d,  Error: %d\n", uTestCount, uTestErr);
			break;	
		}
//		if ((uTestCount%100)==0)
		if ((uTestCount%100)==0)
		{
			DisplayLED(uTestCount/100);
			
		}
		if ((uTestCount%500)==0)
		{
			DisplayLED(uTestCount/100);
			SYSC_GetClkInform();		
			UART_InitDebugCh(0, 115200);
			Delay(10);
			printf("Test Count : %d,  Error: %d \n", uTestCount, uTestErr);
			UART_TxEmpty();

		}
			
	// ON&OFF Test
	//for(i=0;i<10000;i++) {
		//isplayLED(0x2);

		g_RTC_ALM =0;		


		Outp32SYSC(0x1C, uTemp1);			// Clock Source Change	
		Outp32SYSC(0x20, uTemp);			// Change Divide Value
		SYSC_StopPLL(eAPLL);
		//Outp32SYSC(0xC, 0x0);				// Temp Test
		//SYSC_StopPLL(eMPLL);
		//GPIO_SetDataEach(eGPIO_N, eGPIO_9, 0);
		
		//UART_Getc();
											// No Delay ~= 0.2ms
		Delay(10);							// Stop Time ~= 34ms
		//Delay(1);							// Stop Time ~=3.5ms
		//Delay(200);							//  Stop Time ~= 667ms
		//Delay(400);
		GPIO_SetDataEach(eGPIO_N, eGPIO_9, 0);
		//DisplayLED(0x8);
		
		
		///////////////////////  M Divider 
		SYSC_SetPLL(eAPLL, uMval, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 392, 3, 2, 0);		// 800MHz,  => Fail
		//SYSC_SetPLL(eAPLL, 393, 3, 2, 0);		// 800MHz   => Fail (1/8000)
		//SYSC_SetPLL(eAPLL, 394, 3, 2, 0);		// 800MHz   = PASS
		//SYSC_SetPLL(eAPLL, 395, 3, 2, 0);		// 800MHz    => PASS
		//SYSC_SetPLL(eAPLL, 396, 3, 2, 0);		// 800MHz   => PASS
		//SYSC_SetPLL(eAPLL, 397, 3, 2, 0);		// 800MHz => PASS
		//SYSC_SetPLL(eAPLL, 398, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 399, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 400, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 401, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 402, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 403, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 404, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 405, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 406, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 407, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 408, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 409, 3, 2, 0);		// 800MHz
		//SYSC_SetPLL(eAPLL, 410, 3, 2, 0);		// 800MHz

				
		//Delay(50);							// 1st Test ~=170ms
		//Delay(1);							//  Test = 3ms
		GPIO_SetDataEach(eGPIO_N, eGPIO_9, 1);
		
		Outp32SYSC(0x20, uRegValue3_bk);			// Change Divide Value
		Outp32SYSC(0x1C, uRegValue2_bk);			// Clock Source Change	

		Delay(100);								// 100us
		//UART_Getc();
		
		
		SYSC_GetClkInform();		
		UART_InitDebugCh(0, 115200);		

		RTC_SetCON(0,0,0,0,0,1);
		RTC_SetTime(InitYEAR,InitMONTH,InitDATE,InitDAY,InitHOUR,InitMIN,InitSEC);
		RTC_SetTickCNT(100);	
		RTC_SetCON(0,0,0,0,0,0);							// Tick Clock = 128Hz?
		RTC_ClearIntP(0);	
		
		StartTimer(0);
		RTC_SetCON(1,0,0,0,0,1);
		
		while(g_RTC_ALM==0);
		uTestTime=StopTimer(0);
		//printf("%d:  uTestTime = %d \n",uTestCount,  uTestTime);
		RTC_SetCON(0,0,0,0,0,0);

	#if  1
		if((uTestTime<3050)||(uTestTime>3150))
		//if((uTestTime<1000)||(uTestTime>1050))			
			{
			  // printf("\nTest Count : %d,  Error: %d \n", uTestCount, uTestErr);
			    uTestErr++;
			    DisplayLED(0xF);
			   // UART_Getc();
			}
	#endif
	
		//SYSC_GetClkInform();		
		//UART_InitDebugCh(0, 115200);		
		//MemoryRWTest();
		//  UART_Getc();
		uTestCount++;
		Delay(100);
		
		//GPIO_SetFunctionEach(eGPIO_F, eGPIO_14, 1);
  		
	}

	Outp32SYSC(0xC, uRegValue0_bk);
	Outp32SYSC(0x10, uRegValue1_bk);
	Outp32SYSC(0x20, uRegValue3_bk);
	Outp32SYSC(0x1C, uRegValue2_bk);

	SYSC_GetClkInform();		
	UART_InitDebugCh(0, 115200);	

}

/*
	Outp32SYSC(0xC, uRegValue0_bk);
	Outp32SYSC(0x10, uRegValue1_bk);
	Outp32SYSC(0x20, uRegValue3_bk);
	Outp32SYSC(0x1C, uRegValue2_bk);

	SYSC_GetClkInform();		
	UART_InitDebugCh(0, 115200);	
*/	
	
}




//////////
// File Name : Test_ManChangeCLKDivider
// File Description : This function is for the Clock Divider
//				 
// Input : 			
//
//						
// Output : NONE
// Version : 
void Test_ManChangeCLKDivider(void)  
{

	u32 uRegValue0_bk;
	u32 uARatio, uHx2Ratio, uPRatio;
	u32 i, uTestType,uTestCount;
		
	SYSC_CtrlCLKOUT(eCLKOUT_HCLK, 9);	
	printf("[Clock Dividerl Change - This is only for test..]\n");
	// Current Clock Information
	SYSC_GetClkInform();
	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");


	// Save Clock Divider Value
	uRegValue0_bk = Inp32SYSC(0x20);			// Clock Divider value
	// CLK Output PAD Enable
	GPIO_SetFunctionEach(eGPIO_F, eGPIO_14, 3);
	
	printf("\nEnter the  APLL_Ratio Value( 0~7) :  ");
       uARatio = GetIntNum();

	printf("\nEnter the  HCLKx2 Ratio Value(HCLKx2=APLL_OUT/HCLKx2_Ratio)( 0~7) :  ");
       uHx2Ratio = GetIntNum();

	printf("\nEnter the  PCLK Ratio Value (PCLK=HCLKx2/PCLK_Ratio)(Odd Number 1~15) :  ");
       uPRatio = GetIntNum();

	
      printf("\nSelect Test Type : 0:1time change, 1:repeat test	: ");
      uTestType = GetIntNum();

	if(uTestType == 0)
	{
		// Debug GPIO Setting
	GPIO_SetPullUpDownEach(eGPIO_F, eGPIO_15, 0);
	GPIO_SetFunctionEach(eGPIO_F,eGPIO_15,1);
	GPIO_SetDataEach(eGPIO_F,eGPIO_15,1);
	
	printf("\npress any key	\n");
	while(!UART_GetKey());	
	
	GPIO_SetDataEach(eGPIO_F,eGPIO_15,0);
	SYSC_SetDIV0(uARatio, 1, 1, uHx2Ratio,  uPRatio, 1, 1,0, 1, 0);  // MPLL Ratio : 1 , HRatio : 1 (HCLKx2 /2) )

	SYSC_GetClkInform();
	UART_InitDebugCh(0, 115200);

	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");
	printf("press 'q' key to exit\n");	

	
		while(UART_GetKey()!='q')
		{
		DisplayLED(9);
		for(i=0;i<3000000;i++);
		DisplayLED(6);
		for(i=0;i<3000000;i++);
		}

	}
	else if(uTestType == 1)
	{
		while(1) 
		{
		if(UART_GetKey()!=0x0) 
			break;
		if(uTestCount>100000) 
			break;
		if ((uTestCount%1000)==0)
		{
		
			SYSC_GetClkInform();		
			UART_InitDebugCh(0, 115200);
			Delay(100);
			printf("\n%d \n", uTestCount);

		}
		if(uTestCount%2) 
		{
			DisplayLED(0x8);
			SYSC_SetDIV0(uARatio, 1, 1, uHx2Ratio,  uPRatio, 1, 1,0, 1, 0);
			Delay(100);			
		} 
		else 
		{		
			DisplayLED(0x3);
			Outp32SYSC(0x20, uRegValue0_bk);
			Delay(100);
		}
		
		uTestCount++;
		}	
	}
	
	// Return the pre test value
	Outp32SYSC(0x20, uRegValue0_bk);

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


//////////
// File Name : Test_CLKOUT
// File Description : This function is for the Clock output
//				 
// Input : 			
//
//						
// Output : NONE
// Version : 
void Test_CLKOUT(void)  
{

	u32 uRegValue0_bk;
	u32 uDiv, uSEL, uDDiv, uDCMP, uDSEL;
	u32 i, uDclk;
		
	printf("[Clock Output Test - rCLK_OUT  & DCLK ]\n");
	// Current Clock Information
	SYSC_GetClkInform();
	// Save CLK_OUT Register
	uRegValue0_bk = Inp32SYSC(0x2C);			// Back-up CLK_OUT Register Value
	// CLK Output PAD Enable
	GPIO_SetFunctionEach(eGPIO_F, eGPIO_14, 3);
		
	printf("\n CLK Out Select  : 0:APLL Out/2, 1:EPLL Out, 2:HCLK, 3:CLK48M, 4:CLK27M, 5:RTC, 6: Tick, 7: DOUT    :  ");
       uSEL = GetIntNum();
	
	printf("\nEnter the  CLK_Out Dividing Value(0~15) :  ");
       uDiv = GetIntNum();

	SYSC_CtrlCLKOUT((CLKOUT_eTYPE)uSEL,  uDiv);

	if(uSEL == 7 )
	{
		printf("\n Choose DCLK Source Clock  : 0:PCLK, 1:48MHz     :  ");
       	uDSEL = GetIntNum();

       	printf("\n Enter the DCLKDIV (0~15) \n");
       	uDDiv = GetIntNum();

       	printf("\n Enter the DCLKCMP (0~15, <DCLKDIV) \n");
       	uDCMP = GetIntNum();

       	SYSC_CtrlDCLK(uDCMP, uDDiv, uDSEL, 1);

		if(uDSEL==0)
		{
			uDclk = (unsigned int) ((float)g_PCLK/(float)(uDDiv+1));
		}
		else if(uDSEL==1)
		{
			uDclk = (unsigned int) ((float)(48000000)/(float)(uDDiv+1));
		}

		printf("\n [DCLK: % 4.1f MHz]\n", (float) uDclk/1.0e6);
       	printf("High level duration : %d \n", uDDiv-uDCMP);
       	printf("Low level duration : %d \n",  uDCMP + 1);

	
	}
 

	printf("press 'q' key to exit\n");	
	while(UART_GetKey()!='q')
	{
		DisplayLED(9);
		for(i=0;i<100000;i++);
		DisplayLED(6);
		for(i=0;i<100000;i++);
	}

	// Return the pre test value
	Outp32SYSC(0x2C, uRegValue0_bk);
		
	
}


//////////
// File Name : Test_ChangeOPMode
// File Description : This function is for the changing operating mode.
//				 
// Input : 			
//
//						
// Output : NONE
// Version : 

// Only Test Mode.....
void Test_ChangeOPMode(void)  
{
	u32 i, uTestCount;

	printf("Operating mode Change Test\n");

	SYSC_CtrlCLKOUT( eCLKOUT_APLLOUT, 9); // for clock test, jangwj
	//SYSC_ChangeSYSCLK_1(eAPLL480M, eAPLL266M ,  0, 1,3);	



	SYSC_ChangeMode(eASYNC_MODE);
	SYSC_GetClkInform();
	UART_InitDebugCh(0, 115200);
	printf("\n\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("SYNC Mode : %d\n", g_SYNCACK);
	printf("\n");    


	SYSC_ChangeMode(eSYNC_MODE);
	SYSC_GetClkInform();
	UART_InitDebugCh(0, 115200);
	printf("\n\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("SYNC Mode : %d\n", g_SYNCACK);
	printf("\n");    

	uTestCount=0;
 
	printf("press 'q' key to exit\n");	
	while(UART_GetKey()!='q')
	{

		if(UART_GetKey()!=0x0) 
			break;
		if(uTestCount>100000) 
			break;
		if ((uTestCount%1000)==0)
		{
			DisplayLED(uTestCount>>10);
			SYSC_GetClkInform();		
			UART_InitDebugCh(0, 115200);
			Delay(100);
			printf("\n%d \n", uTestCount);

		}

		//DisplayLED(i%15);
		SYSC_ChangeMode(eASYNC_MODE);
		SYSC_GetClkInform();
		UART_InitDebugCh(0, 115200);

		Delay(10);
		
		SYSC_ChangeMode(eSYNC_MODE);
		SYSC_GetClkInform();
		UART_InitDebugCh(0, 115200);

		uTestCount++;
	
		if ((uTestCount%1000)==0)
		{
				DisplayLED(i>>10);
		}
		
		/*
		DisplayLED(9);
		for(i=0;i<30000000;i++);
		DisplayLED(6);
		for(i=0;i<30000000;i++);
		*/
	}
		
	
}





//////////
// Function Name : Insert_Seed
// Function Description : This function generate random number using  information of the RTC
//					 
// Input : 	
// Output : 	
//			
// Version : v0.1
void Insert_Seed(void)
{
	u32 uBCDDAY, uBCDHOUR, uBCDMIN, uBCDSEC;

	uBCDDAY 	=	Inp32(0x7E005080);
	uBCDHOUR    =	Inp32(0x7E005078);

⌨️ 快捷键说明

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