您的位置 首页 制造

mini 2440 test 的Delay函数剖析

延迟程序DelayvoidDelay(inttime){U32val=(PCLK>>3)/1000-1;rTCFG0=~(0xff8);rTCFG0

推迟程序Delay
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>1);
};
}
1)计数器的输入时钟(CCLK)频率:PCLK/(预分频+1)/切割值
预分频值和切割值分别由TCFG0,TCFG1来确认。
rTCFG0 &= ~(0xff<<8);
rTCFG0 |= 3<<8;//prescaler = 3+1
rTCFG1 &= ~(0xf<<12);
rTCFG1 |= 0<<12; //mux = 1/2
预分频为3,切割值为2,又已知PCLK=50Mhz
因而可以核算出计数器输入时钟频率6.25Mhz。
2)初始值的设定了是由TCMPB3和TCNTB3来完结了
TCMPB3一定要小于TCNTB3。
TCMPB3在守时的过程中不变,然后TCNTB3开端减计数,直到与TCMPB3持平时触发中止,经过设定就可以从头转载TCNTB3。

U32 val = (PCLK>>3)/1000-1;
rTCNTB3 = val;
rTCMPB3 = val>>1;// 50%
咱们可以比较一下rTCNTB3与计数器的输入时钟,可以发现rTCNTB3的频率是输入时钟的1000分之一,(我们包含0)。因而咱们可以这样等价的以为rTCNTB3 = 1000CCLK,rTCMPB3=500CCLK。
然后咱们看上面的守时的时序,rTCNTB3开端减计数,直到减到500与rTCMPB3持平,触发中止,然后rTCNTB3再减一今后持续装载。
2)rTCON守时操控寄存器
rTCON[16,17,18,19]操控Timer3
rTCON &= ~(0xf<<16);
rTCON |= 0xb<<16;//interval, inv-off, update TCNTB3&TCMPB3, start timer 3
rTCON &= ~(2<<16); //clear manual update bit

3)完结推迟
我们Delay程序仅仅软件守时,因而规划了一个while循环来完结守时的功用。详细完结如下:
while(time–) {
while(rTCNTO3>=val>>1);
while(rTCNTO3>1);
};
最外层的WHILE仅仅DELAY的次数,然后看晒干的两个WHILE,TCNTO3是个BUFFER,用来读TCNTB3,其实也就等同于 TCNTB3,while(rTCNTO3>=val>>1);便是比及rTCNTO3此外前面程序设定rTCNTB3 = val;
而且rTCMPB3 = val>>1;
while(rTCNTO3>=val>>1)也就等同于
while(rTCNTO3>=rTCMPB3 );
所以,rTCNTB3开端减计数,当等于今后,再减1则进入下一个查办的while(rTCNTO3>1);明显此刻要主动转载TCNTO3为VAL下一个WHILE 为假,退出while。
然后开端下一个time–
4)完结的推迟时刻的核算
经过以上的剖析,可以得到推迟时刻的频率:CCLK/2
时刻是0.32ms

该文让我多少可以了解val = (PCLK>>3)/1000-1;一句中减1的理由,也许是

计数的时分要计上0,至于是否如此,未曾验证。

不过依我鄙意,delay函数的延时时刻并非网友所说的0.32ms,而是1ms,我

以为时钟频率为50M/3+1/2=6.25M没错,可是计数50M/8000次,那么计数周期应

该是1/6.25*50/8000=1ms才对。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/264482.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部