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

📄 pllset.c

📁 s3c2410 pll 计算程序
💻 C
字号:
//#include <dos.h>
#include <stdio.h>
#include <process.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>

void main(int argc,char *argv[])
{
    long pow2[]={1L,2L,4L,8L};
    char str[20];
    long mclk,clkXtal,tmpMclk,bMclk,fVco,max_fvco;
    long m,p,s,bm,bp;
    long temp;
    long tmp,freqDiff,freqDiffMin;
    float par1,par2,par3,par4;
    int pass;
	
    printf("     +---------------------------+\n");
    printf("     | PLL VALUE CALCULATER      |\n");
    printf("     |                  Ver 1.21 |\n");
    printf("     +---------------------------+\n");
    if (argc<4)
    {
	printf("Revision History:\n");
	printf("Usage:pllset <dev_id> <input freq> <output freq>\n");
	printf("dev_id:  1 :S3C44B0X,S3C44A0X\n");
	printf("         2 :S3C2400X/S3C2410X/S3CA400X\n");
	exit(0);
    }
    if(atoi(argv[1])==1)max_fvco=(long)(170000000*1.01); //S3C44B0X,S3C44A0X
    else if(atoi(argv[1])==2)max_fvco=(long)(600000000*1.01); //S3C2400
    else
    {
	printf("ERROR:unknown device ID.\n");
	return;
    }
    clkXtal=atol(argv[2]);
    mclk=atol(argv[3]);

    printf("Input XTAL0 Freq:%ld\n",clkXtal);
    printf("Output MCLK Freq:%ld\n",mclk);
    printf("M   ,P  ,S  |MCLK     |fvco|fi/P+2|PAR1<PAR2<PAR3|P|\n");    
	for(s=0L;s<4L;s++)
	{
	    for(p=0L;p<64L;p++)
	    {
		tmp=(p+2L)*pow2[s];
		freqDiffMin=500000L;
		bm=256L;
		for(m=0;m<256L;m++)
		{
		    tmpMclk=clkXtal*(m+8L)/tmp;
		    freqDiff=labs(mclk-tmpMclk);
		    if(freqDiff<freqDiffMin)
		    {
			fVco=tmpMclk*pow2[s];
			if(fVco<=max_fvco)
			{
			    freqDiffMin=freqDiff;
			    bm=m;
			    bMclk=tmpMclk;
			}
		    }
		}
		par1=clkXtal/(25*(p+2))/1000000.;
		par2=16700000./(bm+8)/1000000.;
		par3=clkXtal/(10*(p+2))/1000000.;
		par4=6.48/pow(bm+8,0.5); 
		pass=(par1<=par2)&&(par2<=par3)&&(bm>=4)&&(bm<=0x4e); 
		if(bm!=256L)
		    printf("%3lxh,%2lxh,%1lxh |%9ld|%3ldM| %4.1fM|%4.1f|%4.1f|%4.1f|%1d|\n",
			    bm,p,s,bMclk,fVco/1000000L,clkXtal/(p+2)/1000000.,
			    par1,par2,par3,pass);
	    }
	}
    
    printf("\n");
    printf("Selection Guide: choose the nearst one to this guide\n");
    printf(" 1) large SDIV value \n");
    printf(" 2) S3C44B0X: 1Mhz<= fin/(PDIV+2) <=2Mhz\n");
    printf(" 3) S3C2400X/S3CA400X/S3C2410X: Refer to user's manual.\n");
}

⌨️ 快捷键说明

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