我碰到过和你差不多情况问题,我是如下方法解决,你可以试试: 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; } |