打印

关于2440中delay函数的小问题

[复制链接]
1486|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Rain_ning|  楼主 | 2010-11-16 14:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于delay函数中的val计算
请问这里的delay函数中在设置val的时候为什么要减去1啊 初学 不理解 麻烦指教 谢谢
void Delay(int time)
{
        U32 val = (PCLK>>3)/1000-1;
        
        rTCFG0 &= ~(0xff<<8);
        rTCFG0 |= 3<<8;                        //prescaler = 3+1
        rTCFG1 &= ~(0xf<<12);
        rTCFG1 |= 0<<12;                //mux = 1/2

        rTCNTB3 = val;
        rTCMPB3 = val>>1;                // 50%
        rTCON &= ~(0xf<<16);
        rTCON |= 0xb<<16;                //interval, inv-off, update TCNTB3&TCMPB3, start timer 3
        rTCON &= ~(2<<16);                //clear manual update bit
        while(time--) {
                while(rTCNTO3>=val>>1);
                while(rTCNTO3<val>>1);
        };
}

相关帖子

沙发
Rain_ning|  楼主 | 2010-11-17 16:35 | 只看该作者
自己顶一下。。。。
我只是知道   定时器的频率为=pclk/(prescaler+1)/divider 那么就直接是pclk/4/2即 pclk>>3   
已知pclk=50MHz 也就是定时器频率为50M>>3
那么如果要计时1ms的话 val*(50M>>3)=1000
即val=(50M>>3)/1000
可是为什么后面要减去1呢 麻烦哪位兄弟说一下啊

使用特权

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

本版积分规则

个人签名:低调 低调~

0

主题

78

帖子

1

粉丝