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

📄 pll.c

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 C
字号:
/*****************************************
 NAME: PLL.C
 DESC: PLL test
 HISTORY:
 2003.04.12 : ver 0.0
******************************************/

#include <math.h>
#include <stdlib.h>

#include "def.h"
#include "option.h"
#include "24a0addr.h"
#include "24a0lib.h"
#include "24a0slib.h" 
#include "pll.h"

void Test_PLL(void)
{
    int i,j,k;    
    unsigned int saveCLKDIVN,saveMPLLCON;
    U32 mps[][6]={
    // 1:1:1
/*	50000000, 42,1,2,0,0, //FCLK,MDIV,PDIV,SDIV,HCLKdiv,PCLKdiv
   	56000000, 48,1,2,0,0, 
   	67000000, 59,1,2,0,0,
   	79000000, 71,4,1,0,0,
   	//84000000, 76,4,1,0,0,
        //90000000, 82,4,1,0,0,
*/        
    // 1:1:2                 
/*    
	84000000, 76,4,1,0,1,
	90000000, 82,4,1,0,1,
	96000000, 56,2,1,0,1,
	101000000, 93,4,1,0,1,
	113000000,105,4,1,0,1,
	118000000, 51,1,1,0,1,
	124000000, 54,1,1,0,1,
	135000000, 82,2,1,0,1,
*/	//147000000, 41,2,0,0,1,
	//152000000, 68,4,0,0,1,
	//158000000, 71,4,0,0,1,
    // 1:2:2                 
   	//84000000, 76,4,1,1,0,
   	//90000000, 82,4,1,1,0,
	//96000000, 56,2,1,1,0,
	//101000000, 93,4,1,1,0,
	//113000000,105,4,1,1,0,
	//118000000, 51,1,1,1,0,
	//124000000, 54,1,1,1,0,
	//135000000, 82,2,1,1,0,
	//147000000, 41,2,0,1,0,
	//152000000, 68,4,0,1,0,
	//158000000, 71,4,0,1,0,
	
    // 1:2:4

	152000000, 30,1,0,1,0,
	156000000, 31,1,0,1,0,
	160000000, 32,1,0,1,1,
	164000000, 33,1,0,1,1,
	168000000, 34,1,0,1,0,
	172000000, 35,1,0,1,0,
	176000000, 36,1,0,1,0,
	180000000, 37,1,0,1,0,
	184000000, 38,1,0,1,0,
	188000000, 39,1,0,1,0,
	192000000, 40,1,0,1,0,
	196000000, 41,1,0,1,0,
	200000000, 42,1,0,1,0,
/*	
	204000000, 43,1,0,1,0,
	208000000, 44,1,0,1,0,
	212000000, 45,1,0,1,0,
	216000000, 46,1,0,1,0,
	220000000, 47,1,0,1,0,
	224000000, 48,1,0,1,0,
	228000000, 49,1,0,1,0,
	232000000, 50,1,0,1,0,
	236000000, 51,1,0,1,0,
	240000000, 52,1,0,1,0,
	244000000, 53,1,0,1,0,
	248000000, 54,1,0,1,0,
	252000000, 55,1,0,1,0,
	256000000, 56,1,0,1,0,
	260000000, 57,1,0,1,0,
	264000000, 58,1,0,1,0,	
	268000000, 59,1,0,1,0,		
*/	
/*    
	170000000, 77,4,0,1,1,
	180000000, 82,4,0,1,1,
	186000000, 85,4,0,1,1,
	192000000, 56,2,0,1,1,
	202000000, 93,4,0,1,1,
	214000000, 99,4,0,1,1,
	220000000, 47,1,0,1,1,
	226000000,105,4,0,1,1,
	237000000, 71,2,0,1,1,
*/    
    };

    saveCLKDIVN=rCLKDIVN;
    saveMPLLCON=rMPLLCON;
    
    LcdEnvidOnOff(0);
    Uart_Printf("[PLL frequency change test]\n");
    Uart_TxEmpty(0);
    //rLOCKTIME=(3602<<16)|(0xfff<<0); // 3602 is about 300us at 12Mhz
    rLOCKTIME=0; // 3602 is about 300us at 12Mhz
    rCLKCON &= ~(1<<1);
    Uart_Printf("LOCKTIME:0x%x, CLKCON:0x%x\n", rLOCKTIME, rCLKCON);
    srand(0); //Set a random starting point

//    for(j=0;j<100000;j++)
     j=k=0;
     while(!Uart_GetKey())
    {
    	i=rand()/(float)RAND_MAX*(sizeof(mps)/24);
    	//Uart_Printf("\nFCLK=%d",mps[i][0]);
	Uart_TxEmpty(0);    	
	if((mps[i][4]==0)&&(mps[i][5]==0))
	{
	    ChangeMPllValue(mps[i][1],mps[i][2],mps[i][3]);	//Set MPS first
	    ChangeClockDivider(0,0); 	//And then set divider	
	}
	else
	{
	    ChangeClockDivider(mps[i][4],mps[i][5]); 
	    ChangeMPllValue(mps[i][1],mps[i][2],mps[i][3]);
	}
	Uart_Init((mps[i][0]/(mps[i][4]+1))/(mps[i][5]+1),115200); //PCLK, Baud Rate
	//Uart_Printf(".");
	j++;
	if(j==1000) {Uart_Printf("%d-th iteration!\n", k++); j=0;}
	//Uart_Printf("...I'm running in changed FCLK...\n");
    }  
    rCLKDIVN=saveCLKDIVN;
    rMPLLCON=saveMPLLCON;
    Uart_Init(PCLK,115200);
    LcdEnvidOnOff(1);    
 }


void ChangePLL(void)
{
    int i, pdiv, mdiv, sdiv, HCLKdiv, PCLKdiv, fclk;

    Uart_Printf("[Running change test of M/P/S value]\n");

    Uart_Printf("Input FCLK vlaue\n");
    fclk=Uart_GetIntNum();        
    Uart_Printf("Input M vlaue\n");
    mdiv=Uart_GetIntNum();        
    Uart_Printf("Input P vlaue\n");
    pdiv=Uart_GetIntNum();    
    Uart_Printf("Input S vlaue\n");
    sdiv=Uart_GetIntNum();

    Uart_Printf("Input HCLKdiv(0 or 1)\n");
    HCLKdiv=Uart_GetIntNum();
    Uart_Printf("Input PCLKdiv(0 or 1)\n");
    PCLKdiv=Uart_GetIntNum();
    
    Uart_Printf("fclk=%d,Mdiv=%d,Pdiv=%d,Sdiv=%d,HCLKdiv=%d,PCLKdiv=%d\n",fclk*1000000,mdiv,pdiv,sdiv,HCLKdiv,PCLKdiv);
    Uart_Printf("Now change PLL value\n");
    Uart_TxEmpty(0);

    PreChangeSdramParameter();
    if((HCLKdiv==0)&&(PCLKdiv==0))
    {
	ChangeMPllValue(mdiv,pdiv,sdiv);	//Set MPS first
	ChangeClockDivider(0,0);		//And then set divider  
    }
    else
    {
	ChangeClockDivider(HCLKdiv,PCLKdiv); 
	ChangeMPllValue(mdiv,pdiv,sdiv);
    }

    ChangeSdramParameter( fclk*1000000/(HCLKdiv+1) );
    Uart_Init((fclk*1000000/(HCLKdiv+1))/(PCLKdiv+1),115200); //PCLK, Baud Rate
    Uart_Printf("FCLK=%dMHz,HCLK=%dMHz,PCLK=%dMHz\n",fclk,(fclk/(HCLKdiv+1)),(fclk/(HCLKdiv+1))/(PCLKdiv+1));
    Uart_Printf("...I'm running in changed FCLK...\n");
    dhrystone21();
 }


void Test_PllOnOff(void)
{
    int i,j,k;
    unsigned int saveLCD,saveREFRESH;

    rLOCKTIME=(3602<<16)|(3602<<0); // 3602 is about 300us at 12Mhz
    Uart_Printf("[PLL On/Off test]\n");
    Uart_TxEmpty(0);	//To avoid being crushed the character
    LcdEnvidOnOff(0);

    for(j=0;j<1000;j++)
    {
	rCLKSRC=(0<<8)|(0<<7)|(1<<5)|(1<<4)|(0); // OnOSC_EN disable,U_PLL on,M_PLL off,External clk,Divider=0
	/* For safety
	rCLKSRC= (0<<8)|(0<<7)|(0<<5)|(0<<4)|(0); 
	rCLKSRC=(0<<8)|(0<<7)|(0<<5)|(1<<4)|(0); 
	rCLKSRC=(0<<8)|(0<<7)|(1<<5)|(1<<4)|(0); 
	*/
	saveREFRESH=rSDRAM_REFRESH;
	rSDRAM_REFRESH=7.8*(FIN/1000000); // Period= 7.8us
	//The other memory control register should be optimized for SLOW mode.
	//saveLCD=rLCDCON1;
	//rLCDCON1=rLCDCON1&~(0x3ff<<8)|(1<<8); // Change LCD CLKVAL
	rCLKSRC=(0<<8)|(0<<7)|(0<<5)|(1<<4)|(0); // OnOSC_EN disable,U_PLL on,M_PLL on,External clk,Divider=0
	for(i=0;i<2048;i++); //S/W MPLL lock-time
	//rLCDCON1=saveLCD;
	rSDRAM_REFRESH=saveREFRESH;
	rCLKSRC=(0<<8)|(0<<7)|(0<<5)|(0<<4)|(0); // OnOSC_EN disable,U_PLL on,M_PLL on,MPLL_clk,Divider=0
    	Uart_Printf(".");
	Uart_TxEmpty(0);	//To avoid being crushed the character    	
    }
}

⌨️ 快捷键说明

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