打印

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

[复制链接]
2160|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
myitlover|  楼主 | 2009-5-24 14:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下:
void Delay(int time) 
// time=0: adjust the Delay function by WatchDog timer. 
// time>0: the number of loop time 
// 100us resolution. 

int i,adjust=0; 
if(time==0) 

    time=200; 
    adjust=1; 
    delayLoopCount=400; 
    rWTCON=((PCLK/1000000-1)<<8)|(2<<3); // 1M/64,Watch- dog,nRESET,interrupt disable 
    rWTDAT=0xffff; 
    rWTCNT=0xffff; 
    rWTCON=((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); // 1M/64,Watch-dog enable,nRESET,interrupt disable 


for(;time>0;time--) 
    for(i=0;i<delayLoopCount;i++); 

if(adjust==1) 

    rWTCON=((PCLK/1000000-1)<<8)|(2<<3); 
    i=0xffff-rWTCNT; 
    delayLoopCount=8000000/(i*64); //400*100/(i*64/200) 



这段程序的本意是延时(time*100us)
但是我测试中发现调用delay(0)校准以后
传进来的time=10000,也就是让它延时1S的时候
它根本就没有延时1s,差不多就延时了1/30s左右
也就是必须传300000左右,才能真正的延时1s

我用的是2440的cpu,跑400MHz和300MHz的时候延时基本差不多(校准过)
400M的时候,PCLK=50MHz,最终delayLoopCount=0x93
大侠给看看

相关帖子

沙发
myitlover|  楼主 | 2009-5-28 09:47 | 只看该作者

没人鸟啊,郁闷

世道啊…………

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

46

帖子

0

粉丝