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

📄 clock.c

📁 三星2413芯片的测试代码,对进行驱动开发很有帮助.
💻 C
📖 第 1 页 / 共 2 页
字号:
void Test_DIVN_Value_Cange(void)
{

	printf("If You Start Test, Press Any Key!!!\n");
	printf("Press 'x' : Stop Test\n\n");
	getchar();

	while (1)
	{
		printf("*********** TEST ************\n");
		printf("Input Operation MPLL Clock (266Mhz or 200Mhz) = ");
		iMPLL = GetIntNum();
		printf("\n");
		
		if ( iMPLL == 200 )
		{
			Data_Compare_Init();
			break;
		}
		
		if (iMPLL == 266 )
		{
			Data_Compare_Init_266();
			Setting_PMS_266();
			break;
		}
	}
	
	Insert_Seed();
		
	while(!Uart_GetKey())
   	{
 		Test_Random_DIVN();
   	}	

   	Return_Condition();
}

void Test_Random_DIVN(void)
{
		Select_Random_DIVN();

		PreChangeSDRAMParameter();
		SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
		SystemCLK();
		ChangeSDRAMParameter(HCLK);
		iFCLK = iMPLL * 1000000;
		Uart_Init_FCLK(115200);
		printf( " ARMCLK_DIVn=%d, HCLK_DIVn=%d, PCLK_DIVn=%d\n", iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R );
		Uart_TxEmpty(1);		
		Delay(1000);
		
		Compare_Logic_DIVN();
}

void Select_Random_DIVN(void)
{
	U32 iARMCLK=0, iHCLK=0, iPCLK=0;
	float fARMCLK=0 , fHCLK=0, fPCLK=0;
	
	iMPLL_0 = iMPLL;
	
	while(1)
	{
		iARMCLK_DIVN_R  = ( rand()%2 );
		iHCLK_DIVN_R    = ( rand()%4 );
		iPCLK_DIVN_R    = ( rand()%2 );
		
		fARMCLK = (float)(iMPLL   /  (iARMCLK_DIVN_R+1));
		fHCLK   = (float)(fARMCLK /  (iHCLK_DIVN_R+1));
		fPCLK   = (float)(fHCLK   / (iPCLK_DIVN_R+1));
		
		if ( fARMCLK<=266 & fHCLK <= 133 & fPCLK <= 66.5 )		
		{
		 	iRoop ++;
			break;  
		}
	}
}

void Compare_Logic_DIVN(void)
{
	if ( iRoop == 1 )
	{
		iCompare_0 = iDivn[iARMCLK_DIVN_R][iHCLK_DIVN_R][iPCLK_DIVN_R];
	}
	else 
	{
		iCompare_1 = iDivn[iARMCLK_DIVN_R][iHCLK_DIVN_R][iPCLK_DIVN_R] ;
	}

	if ( iRoop >= 2 )
	{	
		iCompare_R[iCompare_0] = iCompare_R[iCompare_0] & (~(1<<iCompare_1)) ; 
		iSum = 0;
		for ( iRoop1 = 0 ; iRoop1 < 11 ; iRoop1++ )
		{
			iSum = iSum + iCompare_R[iRoop1];
		}
		if ( iSum == 0 )
		{
			printf( "\n------------------> Test End!!! %d Rotation \n " , iRoop );
			iRoop5++;
			for ( iRoop1 = 0 ; iRoop1 < 11 ; iRoop1++ )
			{
				iCompare_R[iRoop1] = 0x7ff;
			}
			printf ( "------------------> %d th Test OK \n", iRoop5);
			if ( iRoop5 == 10 )
			{
				getchar();
				printf("Change and Retest another Chip\n");
				iRoop5 = 0;
			}
		}
		iCompare_0 = iCompare_1;
	}
	
}


void Data_Compare_Init(void)
{
	iDivn[0][1][1] = 0;
	iDivn[0][2][1] = 1;
	iDivn[0][3][0] = 2;
	iDivn[0][3][1] = 3;
	iDivn[1][0][1] = 4;
	iDivn[1][1][0] = 5;
	iDivn[1][1][1] = 6;
	iDivn[1][2][0] = 7;
	iDivn[1][2][1] = 8;
	iDivn[1][3][0] = 9;
	iDivn[1][3][1] = 10;
	
}

void Data_Compare_Init_266(void)
{
	iDivn[0][1][1] = 0;
	iDivn[0][2][1] = 1;
	iDivn[0][3][0] = 2;
	iDivn[0][3][1] = 3;
	iDivn[1][0][1] = 4;
	iDivn[1][1][0] = 5;
	iDivn[1][1][1] = 6;
	iDivn[1][2][0] = 7;
	iDivn[1][2][1] = 8;
	iDivn[1][3][0] = 9;
	iDivn[1][3][1] = 10;
	
}

void Select_DIVN_Check(void)
{
	printf("ARMDivn = 0 , HCLKDivn = 1 , PCLKDivn = 1\n");
	iARMCLK_DIVN_R  = 0;
	iHCLK_DIVN_R    = 1;
	iPCLK_DIVN_R    = 1;
	PreChangeSDRAMParameter();
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);		
 	printf("Push Any Key and then Check !\n");
	
	getchar();
	 	
	printf("ARMDivn = 0 , HCLKDivn = 2 , PCLKDivn = 1\n");
	iARMCLK_DIVN_R  = 0;
	iHCLK_DIVN_R    = 2;
	iPCLK_DIVN_R    = 1;
	PreChangeSDRAMParameter();
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);		
 	printf("Push Any Key and then Check !\n");
	getchar(); 	
	
	printf("ARMDivn = 0 , HCLKDivn = 3 , PCLKDivn = 0\n");
	iARMCLK_DIVN_R  = 0;
	iHCLK_DIVN_R    = 3;
	iPCLK_DIVN_R    = 0;
	PreChangeSDRAMParameter();
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);		
 	printf("Push Any Key and then Check !\n");
	getchar();

	printf("ARMDivn = 0 , HCLKDivn = 3 , PCLKDivn = 1\n");
	
	iARMCLK_DIVN_R  = 0;
	iHCLK_DIVN_R    = 3;
	iPCLK_DIVN_R    = 1;

	PreChangeSDRAMParameter();
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);		

 	printf("Push Any Key and then Check !\n");

	getchar();
	printf("ARMDivn = 1 , HCLKDivn = 0 , PCLKDivn = 1\n");
	
	iARMCLK_DIVN_R  = 1;
	iHCLK_DIVN_R    = 0;
	iPCLK_DIVN_R    = 1;

	PreChangeSDRAMParameter();
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);		

 	printf("Push Any Key and then Check !\n");
	getchar(); 	
	printf("ARMDivn = 1 , HCLKDivn = 1 , PCLKDivn = 0\n");
	
	iARMCLK_DIVN_R  = 1;
	iHCLK_DIVN_R    = 1;
	iPCLK_DIVN_R    = 0;

	PreChangeSDRAMParameter();
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);		

 	printf("Push Any Key and then Check !\n");
	getchar();
	printf("ARMDivn = 1 , HCLKDivn = 1 , PCLKDivn = 1\n");
	
	iARMCLK_DIVN_R  = 1;
	iHCLK_DIVN_R    = 1;
	iPCLK_DIVN_R    = 1;

	PreChangeSDRAMParameter();
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);		

 	printf("Push Any Key and then Check !\n");
	getchar(); 	
	printf("ARMDivn = 1 , HCLKDivn = 2 , PCLKDivn = 0\n");
	
	iARMCLK_DIVN_R  = 1;
	iHCLK_DIVN_R    = 2;
	iPCLK_DIVN_R    = 0;

	PreChangeSDRAMParameter();
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);		

 	printf("Push Any Key and then Check !\n");
	getchar(); 	
	printf("ARMDivn = 1 , HCLKDivn = 2 , PCLKDivn = 1\n");
	
	iARMCLK_DIVN_R  = 1;
	iHCLK_DIVN_R    = 2;
	iPCLK_DIVN_R    = 1;

	PreChangeSDRAMParameter();
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);		

 	printf("Push Any Key and then Check !\n");
	getchar(); 	
	printf("ARMDivn = 1 , HCLKDivn = 3 , PCLKDivn = 0\n");
	
	iARMCLK_DIVN_R  = 1;
	iHCLK_DIVN_R    = 3;
	iPCLK_DIVN_R    = 0;

	PreChangeSDRAMParameter();
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);		

 	printf("Push Any Key and then Check !\n");
	getchar(); 	
	printf("ARMDivn = 1 , HCLKDivn = 3 , PCLKDivn = 1\n");
	
	iARMCLK_DIVN_R  = 1;
	iHCLK_DIVN_R    = 3;
	iPCLK_DIVN_R    = 1;

	PreChangeSDRAMParameter();
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);		

	printf("Push Any Key and then Check !\n");
	getchar();

}

void Test_DVS(void)
{

	save_rGPHCON=rGPHCON;			// GPIO Configuration Backup
	save_rGPHDAT=rGPHDAT;
	save_rGPHDN=rGPHDN;

	rLOCKTIME = 0xffff0fff;

	rGPHCON = 0x280aaa;
	rGPHDN = 0x7fff;
	rMISCCR = (rMISCCR&~(3<<8)) | (2<<8);
	rMISCCR = (rMISCCR&~(7<<4)) | (3<<4);	

	iPvalue = 4;
	iMvalue = 125;
	iSvalue = 1;

	iARMCLK_DIVN_R = 1;
	iHCLK_DIVN_R   = 1;
	iPCLK_DIVN_R   = 0;

	PreChangeSDRAMParameter();
	SetMPLL( iMvalue, iPvalue, iSvalue );
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);	
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);

	printf("Check FCLK 133Mhz, HCLK 66.5Mhz\n");
	getchar();

	rCLKDIVN = rCLKDIVN | (1<<4);

	printf("Check FCLKOUT = 66.5Mhz\n");
	getchar();

	rCLKDIVN = rCLKDIVN & ~(1<<4);

	printf("Check FCLKOUT = 66.5Mhz\n");
	getchar();

		
	rGPHCON=save_rGPHCON;	// GPIO Configuration Recovery
	rGPHDAT=save_rGPHDAT;
	rGPHDN=save_rGPHDN;
	
}

void Uart_Init_FCLK(int baud)
{
	int i;
	
	// Uart clock divider source selection
	rCLKSRC |= (1<<8);
	
	// select UART function
	rGPHCON	&= ~((0xf<<12)|(0xf<<8)|(0xf<<4)|(0xf<<0));
	rGPHCON	|=  ((0xa<<12)|(0xa<<8)|(0xa<<4)|(0xa<<0));
	
	
 
    rUFCON0 = 0x0;   //UART channel 0 FIFO control register, FIFO disable
    rUFCON1 = 0x0;   //UART channel 1 FIFO control register, FIFO disable
    rUFCON2 = 0x0;   //UART channel 2 FIFO control register, FIFO disable
    rUMCON0 = 0x0;   //UART chaneel 0 MODEM control register, AFC disable
    rUMCON1 = 0x0;   //UART chaneel 1 MODEM control register, AFC disable
//UART0
    rULCON0 = 0x3;   //Line control register : Normal,No parity,1 stop,8 bits
     //    [10]       [9]     [8]        [7]        [6]      [5]         [4]           [3:2]        [1:0]
     // Clock Sel,  Tx Int,  Rx Int, Rx Time Out, Rx err, Loop-back, Send break,  Transmit Mode, Receive Mode
     //     0          1       0    ,     0          1        0           0     ,       01          01
     //   PCLK       Level    Pulse    Disable    Generate  Normal      Normal        Interrupt or Polling
    rUCON0  = 0xe45;   // Control register
    rUBRDIV0=( (int)(iFCLK/16./baud+0.5) -1 );   //Baud rate divisior register 0
//   rUBRDIV0 = 0;
    rUDIVSLOT0 = 0;
  
//UART1
    rULCON1 = 0x3;
    rUCON1  = 0xe45;
    rUBRDIV1=( (int)(iFCLK/16./baud+0.5) -1 );
//    rUBRDIV1 = 0xc;
    rUDIVSLOT1 = 0;
//UART2
    rULCON2 = 0x3;
    rUCON2  = 0xe45;
    rUBRDIV2=( (int)(iFCLK/16./baud+0.5) -1 );    

    for(i=0;i<100;i++);   
}

void Return_Condition(void)
{

	
	iPvalue = 1;
	iMvalue = 42;
	iSvalue = 1;
	
	iARMCLK_DIVN_R = 0;
	iHCLK_DIVN_R   = 1;
	iPCLK_DIVN_R   = 1;

	PreChangeSDRAMParameter();
	SetMPLL( iMvalue, iPvalue, iSvalue );
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);	
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	iFCLK = 200000000 ;
	Uart_Init_FCLK(115200);
	printf(" Re Back_UP\n");
	
	for ( iRoop1 = 0 ; iRoop1 < 11 ; iRoop1++ )
	{
		iCompare_R[iRoop1] = 0x7ff;
	}
	for ( iRoop4 = 0 ; iRoop4 < 18 ; iRoop4++ )
	{
		iCompare_PMS[iRoop4] = 0x3ffff;
	}
	
	iMPLL   = 200;
	iMPLL_0 = 200;
	iCompare_0 = 0;
	iCompare_1 = 0;
	iSum = 0;
	iRoop = 0;
	iRoop1 = 0;
	iRoop2 = 0;
	iRoop3 = 0;
	iRoop4 = 0;
	iRoop5 = 0;
	iRoop6 = 0;
	iRoop7 = 0;
		
	Delay(1000);

}

void Setting_PMS_266(void)
{
	iPvalue = 4;
	iMvalue = 125;
	iSvalue = 1;
	
	iARMCLK_DIVN_R = 0;
	iHCLK_DIVN_R   = 1;
	iPCLK_DIVN_R   = 1;

	PreChangeSDRAMParameter();
	SetMPLL( iMvalue, iPvalue, iSvalue );
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);	
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	iFCLK = 266000000 ;
	Uart_Init_FCLK(115200);
	printf(" 266Mhz Setting OK!\n");
	
	
}

void Setting_266Mhz(void)
{
	iPvalue = 4;
	iMvalue = 125;
	iSvalue = 1;
	
	iARMCLK_DIVN_R = 0;
	iHCLK_DIVN_R   = 1;
	iPCLK_DIVN_R   = 1;

	PreChangeSDRAMParameter();
	SetMPLL( iMvalue, iPvalue, iSvalue );
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);	
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);
	Delay(100);
	printf(" 266Mhz Setting OK!\n");		
	Uart_TxEmpty(1);
}

void Setting_200Mhz(void)
{
	iPvalue = 1;
	iMvalue = 42;
	iSvalue = 1;
	
	iARMCLK_DIVN_R = 0;
	iHCLK_DIVN_R   = 1;
	iPCLK_DIVN_R   = 1;

	PreChangeSDRAMParameter();
	SetMPLL( iMvalue, iPvalue, iSvalue );
	SetCLKDIV( iARMCLK_DIVN_R, iHCLK_DIVN_R, iPCLK_DIVN_R);	
	SystemCLK();
	ChangeSDRAMParameter(HCLK);
	Uart_Init(115200);
	Delay(100);
	printf(" 200Mhz Setting OK!\n");				
	Uart_TxEmpty(1);	
}

⌨️ 快捷键说明

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