zoukankan      html  css  js  c++  java
  • S3C44b0x通用延时函数,延时time个100us函数理解

    延时函数如下所示:
       
           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;">
     
    我是个初学者,在刚开始看到这个函数时甚是模糊,现在对这个函数有一定的认识,希望对初学者有一定的帮助,文中理解和表达方面有不足之处还请大家指出,不胜感激
  • 相关阅读:
    江湖盛传“阿里三板斧”,其实这才是全部真相!
    PHP算法之四大基础算法
    PHP实现的毫秒定时器,同时解决进程不重复堆积
    leetcode小题解析
    PHP算法之二分查找
    elastic学习笔记
    php中mysqli 处理查询结果集总结
    PHP中的 Iterator 与 Generator
    Laravel源码解析之反射的使用
    PHP下的异步尝试四:PHP版的Promise
  • 原文地址:https://www.cnblogs.com/qianggezhishen/p/7349446.html
Copyright © 2011-2022 走看看