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