2440无法实现微妙级延时吗?代码如下

kk02157882   2009-8-6 09:51 楼主
我用示波器测得时候总达不到微妙级延时示波器显示为2.5us - 7us范围,请帮分析一下?
void Delay_us(int time) //1us
{
        unsigned int val = (PCLK>>1)/1000000 - 1; //1us

        v_pPWMregs->rTCFG0 &= ~(0xff<<8);
        v_pPWMregs->rTCFG0 |= 0<<8;      //prescaler = 0+1
        v_pPWMregs->rTCFG1 &= ~(0xf<<12);
        v_pPWMregs->rTCFG1 |= 0<<12;     //Timer3 mux = 1/2

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

回复评论 (7)

你这些代码都是和硬件有关的,你不说明你的硬件平台,代码也没有足够的说明,看不懂。
点赞  2009-8-6 14:46
硬件平台s3c2440, 用它的定时器3做1us的延时,我同样的代码做1ms延时很准确,可是无论如何不能做1us的延时,请问这是为什么?
点赞  2009-8-6 15:39
实现微秒定时啊,那你甚至要计算每条指令的执行时间...
点赞  2009-8-7 11:46
裸奔就可以,wince下不是这么做的。
点赞  2009-8-7 11:52
请问楼上的你的延时是怎么做的呢?
点赞  2009-8-7 13:30
硬件定时器的时钟频率是否设置的够大,2440内部很多倍频和分频,注意要设置到给定时器的时钟频率是最大的。

我觉得2440达到定时1us应该没有问题。
点赞  2009-8-7 15:02
prescaler 设定 为 0,Timer3 mux = 1/2, 25000000时钟频率,1us 只能计数25次,看来是无法达到这个定时的目的,我理论上是这么做的,但是示波器看一点也不准
点赞  2009-8-7 16:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复