程序如下:<br />void Delay(int time) <br />// time=0: adjust the Delay function by WatchDog timer. <br />// time>0: the number of loop time <br />// 100us resolution. <br />{ <br />int i,adjust=0; <br />if(time==0) <br />{ <br /> time=200; <br /> adjust=1; <br /> delayLoopCount=400; <br /> rWTCON=((PCLK/1000000-1)<<8)|(2<<3); // 1M/64,Watch- dog,nRESET,interrupt disable <br /> rWTDAT=0xffff; <br /> rWTCNT=0xffff; <br /> rWTCON=((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); // 1M/64,Watch-dog enable,nRESET,interrupt disable <br />} <br /><br />for(;time>0;time--) <br /> for(i=0;i<delayLoopCount;i++); <br /><br />if(adjust==1) <br />{ <br /> rWTCON=((PCLK/1000000-1)<<8)|(2<<3); <br /> i=0xffff-rWTCNT; <br /> delayLoopCount=8000000/(i*64); //400*100/(i*64/200) <br />} <br />} <br /><br />这段程序的本意是延时(time*100us)<br />但是我测试中发现调用delay(0)校准以后<br />传进来的time=10000,也就是让它延时1S的时候<br />它根本就没有延时1s,差不多就延时了1/30s左右<br />也就是必须传300000左右,才能真正的延时1s<br /><br />我用的是2440的cpu,跑400MHz和300MHz的时候延时基本差不多(校准过)<br />400M的时候,PCLK=50MHz,最终delayLoopCount=0x93<br />大侠给看看<br /> |
|