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

[求助]XD256时钟信号问题求助

[求助]XD256时钟信号问题求助

统一个PCB文件生产出两个板,烧写同样的程序,其中一块正常运行A板,另一块则无法正常运行B板。采用10M外部有源晶振输入,设置了clkout 4分频输出,PLL设置倍频为24M。用示波器观察发现B板的clkout引脚输出为1.25MHz,A板clkout为6MHz。显然有B板的PLL没有工作。连BDM查看,发现程序运行到

while(!CRGFLG_LOCK) ; /* Wait until the PLL is within the desired tolerance of the target frequency */

时无法跳出此循环,也就是说应该是自检时钟输入信号没通过。

但是看我附件附上用示波器测量两块板的时钟信号,几乎完全一样啊!!!请高人指点一二!!!

8mypmpgC.jpg
我碰到过和你差不多情况问题,我是如下方法解决,你可以试试:
1.上电后,用for做几十毫秒的延时,等待晶振稳定(此条不一定有效,但不防加上)
2.在主循环中加入如下查询:
if (!CRGFLG_LOCK)
{
CLKSEL_PLLSEL = 0;
}
else
{
CLKSEL_PLLSEL = 1;
}
你说你无法跳出while(!CRGFLG_LOCK) ; 死循环,我想不至于,如果是,先确认PLL配置是否有问题。可参如下:
void SetBusCLK_40M(void)
{
CLKSEL=0X00; //disengage PLL to system
PLLCTL_PLLON=1; //turn on PLL
SYNR=9;
REFDV=3; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;
_asm(nop); //BUS CLOCK=40M
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
}
查查 振荡电路的电容.
/********** 飞思卡尔交流QQ群:82738157 ************/

首先,感谢两位回复。

回2楼:

程序应该没问题,同一PCB文件生产出的另一块板烧同样程序后一切正常。关于你说的先加延时再来判断CRGFLG_LOCK也试过了无效。感觉是上电就进行了时钟品质检测,此位已经被操作,延时对它无效。

回3楼:

该如何检查呢?请稍微具体点?

查查PE7引脚连接的方式及高低电平。

/********** 飞思卡尔交流QQ群:82738157 ************/
还要检查下 XFC引脚的配置。
/********** 飞思卡尔交流QQ群:82738157 ************/

首先感谢fish1330的回复!!!

检查了PE7,我通过跳线将其通过下拉电阻3.3K接地了。

XFC脚配置请看看我的电路图。

tcpCZl0b.jpg

请再帮我分析下。谢谢!!!

恳请各位帮帮忙看下,俺实在是无计可施,不知道怎么下手了。急啊!!!
可以互换一下有源晶振试试,也可以互换一下MCU芯片试试。之前可以测量一下两个板子的上电和起振时间是否有较大的差别。
海纳百川  有容乃大
QUOTE:
以下是引用strongchen在2009-7-3 16:46:00的发言:
可以互换一下有源晶振试试,也可以互换一下MCU芯片试试。之前可以测量一下两个板子的上电和起振时间是否有较大的差别。

MCU已经换过一块了,还是一样。考虑换下晶振看看吧。

另外,俺也估计原来测的波形是稳定后的,差别不大,最有可能就是上电到起振到稳定的过程可能有问题。

这里俺引出一个问题就是,MCU自检时钟信号是上电后立刻开始的吗?能不能通过寄存器设置让他延时一点再检测时钟信号质量,然后操作CRGFLG_LOCK位。或者说可以屏蔽时钟信号质量检测?

可以对RESET信号进行控制,从而控制MCU的启动时间。
海纳百川  有容乃大
strongchen,你说的控制reset信号,延时启动MCU,会不会对仿真和烧写有影响呢?好像BDM通讯也要用到reset信号的吧。
试试这个:XFC连接的电容换22pF电容(2个电容都换)

[此贴子已经被作者于2009-7-15 10:49:53编辑过]

/********** 飞思卡尔交流QQ群:82738157 ************/
返回列表