📄 clock.c
字号:
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 + -