首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

如下S12X的PLL设置是否正确?

如下S12X的PLL设置是否正确?

main()函数中依此执行如下PLL设置命令:

DisableInterrupts ;
CLKSEL &= 0x7f;//set OSCCLK as sysclk
PLLCTL =PLLCTL&0x8F;//Disable PLL circuit
CRGINT &= 0xDF;
SYNR=3; //PLLCLK=2*16M*(1+SYNR)/(1+REFDV)
REFDV=3;
PLLCTL |= 0x70;//Enable PLL circuit
while(!(CRGFLG&0x08)); //PLLCLK is Locked already?
CLKSEL |= 0x80;//set PLLCLK as sysclk

硬件上已经将Vregen上拉,因此VDDPLL使用内部2.5V供电(已测电压正常),外接电容阻分别为0.47nF,4.7K,5nF(稳定度28ppm,抑制1.21),分频值SYNR=3,REFDV=3,外接16M晶振(22pf),并将PE7上拉。

现在情况是 while(!(CRGFLG&0x08)); //PLLCLK is Locked already? 无法跳出,即LOCK始终为0,不能正常锁住该倍频时钟。

有接触这方面的XDJM帮忙指点问题出在什么地方。

[此贴子已经被作者于2009-8-12 17:01:00编辑过]

没头没尾的,什么芯片啊?
飞思卡尔8/16/32位多功能开发板/下载器:
网站:http://www.lqist.cn,
淘宝店:http://shop36265907.taobao.com

没见过你说的情况,过几天我也要调板子,看我的成不成。程序大家都差不多的。

3# slyang1314
  void Set_PLL(void)              //初始化PLL子程序,总线时钟为PLL的2分频
{
   
   SYNR=0x02;
   REFDV=0x01;
   while (!(CRGFLG & 0x08));     //等待时钟频率已稳定锁相环频率已锁定
   CLKSEL_PLLSEL=1;              //选定所相环时钟
晶振是外部加入的时钟,系统内部有个锁相环可以倍频你的晶振频率。
倍数由SYNR和REFDV寄存器的值来控制


根据公式PLLCLK = 2 x OSCCLK x [SYNR + 1]/[REFDV + 1]
PLLCLK(锁相环频率)
OSCCLK(振荡器频率,即你的晶振)


而BUS CLOCK是由PLLCLK二分频得到的,即BUS CLOCK = PLLCLK/2

当你选择倍频时(PLLSEL=1),你的系统频率是等于锁相环频率(PLLCLK),

当你不选择倍频时(PLLSEL=0),你的系统频率是等于振荡器频率(OSCCLK),而你的总线频率(Bus Clock)是始终等于你系统频率的1/2
返回列表