使用IO口中断测量脉冲频率时应该注意的问题

情景描述:
外部脉冲接到OKI482的IO口中断,使用IO中断测量脉冲频率(周期)。
配置一个16位的定时器,定时器定时周期为1s,定时器时钟源为32768Hz。
在IO中断中读取定时器计数器的值TM1C和TM0C,脉冲到来的时间为 (TM1D*256 + TM0D + 系统秒*32768),单位为1/32768秒。
在调试中发现程序计算得到的结果(时间值)和TM1D、TM0D的值相差20。程序如下:
1. c = TM1C;
2. c <<= 8; 3. c += TM0C; 4. temp = time1*32768; 5. c += temp; 原因在于程序第三行读取TM0C的值的时候该寄存器的值已经发生了变化。所以应该进入中断后首先读取寄存器的值,然后在进行处理。而且,应该先读取TM0D,后读取TM1D,因为TM0D是计数器的第八位。 代码如下: 1. d = TM0C; 2. c = TM1C; 3. c <<= 8; 4. c += d; 5. temp = time1*32768; 6. c = c + temp; 小结,与使用430硬件捕获的区别。 在使用430硬件捕获的时候,当脉冲上升沿或下降沿来临的时候定时器计数器的值会由硬件拷贝到另一个读取寄存器,进入捕获中断后软件只需要直接读取该寄存器即可。

分享到: 更多
版权申明:

本站保留所有原创文章的版权,本站地址:奔跑的博客[http://www.elecbench.com]

原创文章转载时请注明出处,并添加文章所在页面的链接:http://www.elecbench.com/227/

本站所有 2010年3月4日 以后发表、未标明为“转载”的文章均是本站原创。

发表评论


(设置自己的个性头像)

*

申请属于你的免费顶级域名