S3C44b0x通用延时函数,延时time个100us函数理解

本文解析了一个用于嵌入式系统的延时函数实现原理,包括通过调整循环次数和利用看门狗定时器来达到精确延时的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

延时函数如下所示:
   
       void  Delay(int time)
      {
          int i,adjust=0;
          if(time==0)
          {
             time=200;
             adjust=1;
             delayLoopCount=400;
             rWTCON=((MCLK/1000000-1)<<8)|(2<<3);
             rWTDAT=0xffff;
             rWTCNT=0xffff;
             rWTCON=((MCLK/1000000-1)<<8)|(2<<3)|(1<<5);
          }
          for(;time>0;time--)
             for(i=0;i<delayloopcount;i++) ;<="" div="" style="word-wrap: break-word;">
          if(adjust==1)
          {
             rWTCON=((MCLK/1000000-1)<<8)|(2<<3);
             i=0xffff-rWTCNT;
             delayLoopCount=8000000/(i*64);
          }
      }
s3c44b0x看门狗定时器模块在作为定时器使用时计数器是倒计时的,定时器的频率(产生中断或者复位信号的周期)计算公式如下:

    f=MCLK/(Prescaler +1 )/除法因子

rWTCON=((MCLK/1000000-1)<<8)|(2<<3); 设置预分频值为MCLK/1000000-1),设置除法因子为1/64,此时看门狗定时器的时钟频率为1/64MHZ,关闭复位功能,关闭中断。 

delayLoopCount=8000000/(i*64)=400*100/(i*64)/200;
当time=0时,执行第一个if条件函数,给time,delayLoopCount赋值,并开启看门狗定时器,该函数执行完之后,便向下执行两层嵌套的for循环,循环执行完毕便转入第二个if条件函数,该函数首先关闭看门狗定时器,然后计算在执行完两层嵌套的for循环的时间内看门狗计数器所计数的个数,最后计数出
当 for(i=0;i<delayloopcount;i++) ;="" 语句耗时100us时delayloopcount的值。所以在main()函数开始的语句中应先设置delay(0);以后在用到dealy(int="" time);="" 时time的值便是延时time个100us的时间。<="" div="" style="word-wrap: break-word;">
 
我是个初学者,在刚开始看到这个函数时甚是模糊,现在对这个函数有一定的认识,希望对初学者有一定的帮助,文中理解和表达方面有不足之处还请大家指出,不胜感激
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值