mini2440test的Delay函数分析 soapui test delay

延迟程序Delay
void Delay(int time)
{
U32val = (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);
};
}
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
mini2440test的Delay函数分析 soapui test delay
因此可以计算出计数器输入时钟频率6.25Mhz。
2)初始值的设定了是由TCMPB3和TCNTB3来完成了
TCMPB3一定要小于TCNTB3。
TCMPB3在定时的过程中不变,然后TCNTB3开始减计数,直到与TCMPB3相等时触发中断,通过设定就可以重新转载TCNTB3。

U32val = (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<val>>1);
};
最外层的WHILE只是DELAY的次数,然后看里面的两个WHILE,TCNTO3是个BUFFER,用来读TCNTB3,其实也就等同于TCNTB3,while(rTCNTO3>=val>>1);就是等到rTCNTO3<val时,执行下一个WHILE,
此外前面程序设定rTCNTB3 = val;
并且rTCMPB3 = val>>1;
while(rTCNTO 3>=val>>1)也就等同于
while(rTCNTO3>=rTCMPB3 );
所以,rTCNTB3开始减计数,当等于以后,再减1则进入下一个语句的while(rTCNTO3<val>>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才对。

第一次写这种文章,未知我分析是否正确,还望高手赐教。

转载自:http://826891.blog.163.com/blog/static/86376932010711523155/

  

爱华网本文地址 » http://www.413yy.cn/a/25101015/245875.html

更多阅读

有关砭石颜色的几点分析 拔火罐颜色分析图

有关砭石颜色的几点分析——简介近年来,随着消费者对砭石这一事物关注度的提高,许多商家也瞄准了砭石市场,于是各种颜色的砭石产品涌现出来,而越来越多的人对砭石的颜色产生了疑问。有关砭石颜色的几点分析——工具/原料砭石的主要成分

当代大学生恋爱观的调查与分析 当代大学生恋爱观

当代大学生恋爱观的调查与分析摘要:在学海里苦苦奋斗了十二个春秋的学子们,终于披着荣耀跨进了大学这个神圣的殿堂,成为天之骄子。然而,随之而来的寂寞却常常让他们不知所措;于是,在这象牙塔里便多了许多浪漫的

Crect的成员函数 类的静态成员函数

CRect类(矩形类)无基类【说 明】CRect类与Windows系统中表示矩形RECT结构相似,并且它还提供了操作RECT结构的成员函数。在传递LPRECT,LPCRECT或RECT结构作为参数的任何地方,都可以传递CRect类的对象。注意,这个类是从tagRECT结构派

声明:《mini2440test的Delay函数分析 soapui test delay》为网友亚蒙夫分享!如侵犯到您的合法权益请联系我们删除