看门狗的那个delay函数延时怎么不准的?

[复制链接]
 楼主| myitlover 发表于 2009-5-24 14:34 | 显示全部楼层 |阅读模式
程序如下:<br />void&nbsp;Delay(int&nbsp;time)&nbsp;<br />//&nbsp;time=0:&nbsp;adjust&nbsp;the&nbsp;Delay&nbsp;function&nbsp;by&nbsp;WatchDog&nbsp;timer.&nbsp;<br />//&nbsp;time&gt0:&nbsp;the&nbsp;number&nbsp;of&nbsp;loop&nbsp;time&nbsp;<br />//&nbsp;100us&nbsp;resolution.&nbsp;<br />{&nbsp;<br />int&nbsp;i,adjust=0;&nbsp;<br />if(time==0)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;time=200;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;adjust=1;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;delayLoopCount=400;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rWTCON=((PCLK/1000000-1)&lt&lt8)|(2&lt&lt3);&nbsp;//&nbsp;1M/64,Watch-&nbsp;dog,nRESET,interrupt&nbsp;disable&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rWTDAT=0xffff;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rWTCNT=0xffff;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rWTCON=((PCLK/1000000-1)&lt&lt8)|(2&lt&lt3)|(1&lt&lt5);&nbsp;//&nbsp;1M/64,Watch-dog&nbsp;enable,nRESET,interrupt&nbsp;disable&nbsp;<br />}&nbsp;<br /><br />for(;time&gt0;time--)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltdelayLoopCount;i++);&nbsp;<br /><br />if(adjust==1)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rWTCON=((PCLK/1000000-1)&lt&lt8)|(2&lt&lt3);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;i=0xffff-rWTCNT;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;delayLoopCount=8000000/(i*64);&nbsp;//400*100/(i*64/200)&nbsp;<br />}&nbsp;<br />}&nbsp;<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 />
 楼主| myitlover 发表于 2009-5-28 09:47 | 显示全部楼层

没人鸟啊,郁闷

世道啊…………
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

46

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部