我采用信号发生器输出到CAP1上,将脉冲捕获的定时器128分频,此时可捕获的脉冲最大间隔应是50ms左右,没有超限。我开始是在中断中每次将定时器清零,
我现在修改了中断程序,没有在中断程序中将定时器清零,我觉得这是不准确的,应该通过两次捕获的差值来计算,但遇到了,两个新问题, 1。定时器是选择连续递增模式,到定时周期时自动清零重新开始记数,并产生周期中断标志,然后我在程序中判断标志为,如果有则用定时周期,减去前一次捕获的值,再加上新捕获的值,这就得到了两个脉冲之间的定时值,假如我将定时周期设我60000,则与定时周期最接近的脉冲应该五万多,但在线观察,有时减去的前一次的值很小,而且是已经越过周期定时点,重新开始记数的值 2 将一恒定信号加入后,定期会出现CAPFIFO的状态位为11的情况,而大多数的情况是为10 当出现为11是,FIFO的两层堆栈值竟然相等!这是怎么回事?
我的测试程序很短,主程序就是一个for循环,内部没有代码,然后就是中断处理程序,我在中断处理中试了三种读取CAP1FIFO堆栈的值,一是每个中断只读一个顶层的值,而是连续两次读取顶层堆栈的值,三是先读底层,然后读顶层,第二种和第三种应是一样的,这些测试,都有两次值相等的情况,真郁闷!
多谢高手指点!谢谢!
|