现在的位置: 首页 > 综合 > 正文

44b0 pllset.exe 代码

2013年09月12日 ⁄ 综合 ⁄ 共 2565字 ⁄ 字号 评论关闭

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

int 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        Ver 1.21+ |/n");
    printf("     | Fixed for S3C2400X/S3C2410X/S3CA400X  |/n");
    printf("     +---------------------------------------+/n");
    if (argc<2)
    {
 printf("Revision History:/n");
 printf("Usage:pllset <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;
    //}
    max_fvco = (long)(600000000*1.01);
    clkXtal= 12000000; //atol(argv[1]);
    mclk=atol(argv[1]);

    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|PAR4|/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|%4.1f|/n",
       bm,p,s,bMclk,fVco/1000000L,clkXtal/(p+2)/1000000.,
       par1,par2,par3,pass,par4);
     }
 }
   
    printf("/n");
    printf("Selection Guide: choose the nearst one to this guide/n");
    printf(" 1) large SDIV value /n");
  printf(" 2) P == 1/n");
  printf(" 3) 0.7 < PAR4 < 1.8/n");
  printf(" 4) fvcp < 330M/n");

}
 今天下午写44B0串口和PC机通信的程序 本以为相当EASY  看了看DATASHEET  很快把代码写了出来 可是TX0引脚死活不出波形,既然UART0不行就去试试UART1,结果TX1一直为高,后来以为是UBRDIV0设置的不对,又去查看系统时钟MCLK  按照DATASHEET将MCLK设成了40M  UBRDIV设成21,结果还是不行,然后怀疑是MAX3232电路的问题 因为以前有同学根我说网上流传的44B0的PCB有一个版本的串口有问题  而且TX1和TX0的电平都不一样  看了看原理图 觉得好像有问题  将两个MAX3232都焊了下来 结果还是那样 TX1为高 TX0为低  其他办法想了很多 都无济于事  一下午就这么过去了

晚上回来准备上网去查  一个帖子提醒了我  其实RX0 TX0 RX1 TX1都是多种功能的引脚  是不是我把它初始化成了别的功能 于是去查原理图,这两个脚还有GPIO的功能   然后就恍然大悟了  因为板子上有几个LED 和一个BEEP  分别属于GPC 和GPE  我在UART初始化时用了一下这几个LED和BEEP 于是这几个引脚都变成了GPIO 当然就不会有波形出来

明天再去试试  应该没问题了

抱歉!评论已关闭.