智能车制作

标题: 两个锁相环程序 [打印本页]

作者: 法布里加斯    时间: 2009-3-16 20:08
标题: 两个锁相环程序
程序一:

void SET_PLL(  )
  {
    REFDV=0X01;
    SYNR=0X02;
    asm{
     BRCLR CRGFLG,#$08,*
     BSET   CLKSEL,#$80
           }
   }

程序二:

  void SET_PLL( )
  {
       CLKSEL=0X00;
       PLLCTL=0xe1;
       SYNR=2;
       REFDV=1;
       PLLCTL=0X60;
       asm  NOP;
       asm  NOP;
       asm  NOP;
       while((CRGFLG&0X08)==0);
       CLKSEL=0X80;
   }

我的理解:这两个程序其实是一样的,都是将频率倍频至24M,其中第一个程序中的两条汇编指令的含义就是第二个程序中最后两条语句的含义。

我的疑问:1.既然两条汇编指令的含义是最后两条语句的含义,那为什么第二个程序会多出,多出来的部分能否不写     (CLKSEL=0X00; PLLCTL=0XE1;   PLLCTL=0X60;这三句)??
               2.上面两段程序执行起来是否一样,那个效率更高??

我的说法里如果有什么不正确的地方,望高手能指出来,最好能分析一下这两程序,基本的我都懂。谢谢
作者: 50833713    时间: 2009-3-16 21:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: 法布里加斯    时间: 2009-3-16 22:27
谢谢,我的意思不是在空指令,呵呵
作者: shibf    时间: 2009-5-14 20:34
SYNR,REFDV只有在CLKSEL_PLLSEL=0的情况下才能写入。
作者: 跳跃的心    时间: 2009-5-16 17:29
SYNR,REFDV只有在CLKSEL_PLLSEL=0的情况下才能写入。
shibf 发表于 2009-5-14 20:34

不过系统默认的就是CLKSEL_PLLSEL=0。
作者: 20074978    时间: 2009-12-22 21:40
有没有说有教程
作者: chenrunshe_007    时间: 2009-12-25 00:20
本帖最后由 chenrunshe_007 于 2009-12-25 00:22 编辑

回复 1# 法布里加斯
第一种:如果程序跑飞复位,那我就不知道原来设定锁环相关寄存器的值是多少了。
第二种:即使程序跑飞,或者看门狗复位,程序重新运行相关的寄存器也能正常的初始化。
不过一般如果你建立工程时选的是寄存器初始化为系统默认。那都差不多,只不过第二种更专业一点(书上是这样写的),而第一种更简洁。
作者: verify    时间: 2009-12-26 15:41
按Datasheet 来就可以了
作者: zhangjiarui    时间: 2010-11-16 15:59
学习
作者: 读懂你的心    时间: 2011-3-14 20:33
我认为是上面的
作者: gaoxueze    时间: 2011-3-30 23:27

作者: pangyuo    时间: 2011-4-11 16:27
一个前辈告诉我 因为锁相环调节需要时间,所以那个空语句是延时用的,保证工作稳定
作者: chengqing    时间: 2011-4-11 17:16





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2