关于S3C44B0X中的延时校准程序

[复制链接]
3540|10
 楼主| alist2005 发表于 2008-7-24 16:49 | 显示全部楼层 |阅读模式
我所买的ARM开发板中附带了一段测试程序,其中有一段一直没弄明白,按注解的意思应该是一段延时校准程序,但我不明白其中的原理,哪位高人帮我一下,谢谢。代码如下:<br />void&nbsp;Delay(int&nbsp;time)<br />//&nbsp;time=0:&nbsp;adjust&nbsp;the&nbsp;Delay&nbsp;function&nbsp;by&nbsp;WatchDog&nbsp;timer.<br />//&nbsp;time&gt0:&nbsp;the&nbsp;number&nbsp;of&nbsp;loop&nbsp;time&nbsp;100us&nbsp;resolution.<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,adjust=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(time==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;time=200;<br />&nbsp;&nbsp;&nbsp;&nbsp;adjust=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delayLoopCount=400;<br />&nbsp;&nbsp;&nbsp;&nbsp;rWTCON=((MCLK/1000000-1)&lt&lt8)|(2&lt&lt3);&nbsp;&nbsp;//&nbsp;1M/64,Watch-dog,nRESET,interrupt&nbsp;disable<br />&nbsp;&nbsp;&nbsp;&nbsp;rWTDAT=0xffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;rWTCNT=0xffff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rWTCON=((MCLK/1000000-1)&lt&lt8)|(2&lt&lt3)|(1&lt&lt5);&nbsp;//&nbsp;1M/64,Watch-dog&nbsp;enable,nRESET,interrupt&nbsp;disable&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;for(;time&gt0;time--)<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltdelayLoopCount;i++);<br /><br />//这下面的部分尤其不明白是干什么用的???<br />&nbsp;&nbsp;&nbsp;&nbsp;if(adjust==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;rWTCON=((MCLK/1000000-1)&lt&lt8)|(2&lt&lt3);<br />&nbsp;&nbsp;&nbsp;&nbsp;i=0xffff-rWTCNT;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;1count/16us?????????<br />&nbsp;&nbsp;&nbsp;&nbsp;delayLoopCount=8000000/(i*64);&nbsp;&nbsp;&nbsp;&nbsp;//400*100/(i*64/200)&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />这个程序主要是最后一部分我不知道是什么意思,为什么要这样做?如何实现校准的?谢谢
dld2 发表于 2008-7-24 17:05 | 显示全部楼层

相当于

相当于用watchdogtimer测量了<br />for(;time&gt0;time--)<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltdelayLoopCount;i++);<br />的运行时间。<br /><br />然后修改delayLoopCount。
 楼主| alist2005 发表于 2008-7-24 17:16 | 显示全部楼层

谢谢啊,不过可以说的稍微详细点吗?不明白

  
 楼主| alist2005 发表于 2008-7-24 19:21 | 显示全部楼层

没人知道了?

没人知道了?<br />帮帮俺这个新手啊,谢谢
dld2 发表于 2008-7-24 19:48 | 显示全部楼层

rWTCON=((MCLK/1000000-1)<<8)|(2<<3);

按这样设置,WT的一个周期是多少us啊?<br /><br />i=0xffff-rWTCNT;<br />i个周期是多少时间?<br />假设为T.<br /><br />当delayLoopCount为400时,那个循环的运行时间为T。<br />那么当delayLoopCount为多少时,运行时间为100us呢?<br /><br /><br /><br />
 楼主| alist2005 发表于 2008-7-24 20:41 | 显示全部楼层

谢谢,我算出来了

  
飞行一族 发表于 2011-11-25 10:49 | 显示全部楼层
大侠,我的开发板也是44b0.但是我也不会算这个函数是如何延时100us的,能给我详细讲一下?
飞行一族 发表于 2011-11-25 10:50 | 显示全部楼层
大侠,我的开发板也是44b0.但是我也不会算这个函数是如何延时100us的,能给我详细讲一下?
飞行一族 发表于 2011-11-25 10:50 | 显示全部楼层
大侠,我的开发板也是44b0.但是我也不会算这个函数是如何延时100us的,能给我详细讲一下?
vans88 发表于 2014-1-11 17:45 | 显示全部楼层
这段程序在使用之前 需要使用Delay(0) 进行校准
vans88 发表于 2014-1-11 17:46 | 显示全部楼层
上面的程序看梦狗的递减时间为128us
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部