还有,我想知道匹配发生的时候,TCNT是什么状态?清零?还是接着跑(free running)?
数据手册上的意思好像是接着跑,但是如果接着跑,我上面的程序是永远不可能得到正确结果的,但是我曾经得到过。而且,没有发现给TCNT清零的方法。上面写的是:Write: Has no meaning or effect in the normal mode;
那这个计数器到底是怎么跑的呢。
还有,这个模块貌似只有一个timer,那如果有好几个InputCapture,如果是清零的话岂不要乱套。但是。。。
这到底是怎么回事呢?有没有同志研究过这个玩意儿?
作者: Frozenflame 时间: 2013-8-10 13:58
搞好了。下面我要解释一下。作者: Frozenflame 时间: 2013-8-10 14:24
其实我上面的叙述已经很接近真相了。不过我又绕了个圈才发现。
就是这三句话:
第一句:::唯一的区别是“单击调试工具上的复位(运行)”和“按下系统板上的复位”。
第二句:::数据手册里,Write: Has no meaning or effect in the normal mode; only writable in special modes (test_mode = 1)(靠我上面说问题的时候,犹豫了一下没有考后面的半句)
第三句:::单击调试工具上的复位,是special mode,按下系统板上的复位,是normal mode。
已经看懂的不用往下看了。
所以,要想实现计数脉冲宽度,就要用两次InputCapture的值作差。开一个signed long 变量。如果相减是负数,就再加一个0xffff(因为我知道无论如何也不可能溢出两次的)。有特殊需要的同志可以使用溢出中断,如果溢出就把一个计数变量加一。当然开signed long和直接读溢出标志应该都是可以的(如果溢出标志是1,就说明溢出过。即使没有使能中断,这个标志还是会被置的。兴许还要手动清零,不过就不能知道溢出次数了,假如会溢出多次)。