打印

DM642外部两个中断不同时发生,怎么得到两个中断之间的时间

[复制链接]
2949|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccjchen|  楼主 | 2009-6-29 22:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在使用的是DM642,ext_int5,ext_int6分别用作两个外部中断信号
相信大家也遇到过这样的问题,比如一个车轮压在前后两个磁钢上,这两个磁钢分别产生中断信号送给CPU,请问这两次中断之间的时间应该怎么计算呢?

我现在想的是:第一个中断发生时,初始化并启动定时器;第二个中断发生时,停止定时器,去读定时器的值,就是两个中断时间的差值。请问:

一、定时器本身也是中断,难道要嵌套在外部中断里吗?

二、还有就是怎么读定时器的值?用 计数值cnt*计数周期prd 吗?

请高手给指点一下!

相关帖子

沙发
ccjchen|  楼主 | 2009-6-30 10:22 | 只看该作者

我想是应该设立标志位

在第一个中断到来,打开中断;
在第二个中断到来时,flag = 1;
然后在定时中断中如果检测到flag = 1则关闭定时器;
不知道思路对不?
要是对的话,怎么读定时器的值?用 计数值cnt*计数周期prd 吗?

使用特权

评论回复
板凳
ccjchen|  楼主 | 2009-7-1 08:58 | 只看该作者

computer00 大侠还在吗?给指导一下!

使用特权

评论回复
地板
ccjchen|  楼主 | 2009-7-1 14:21 | 只看该作者

我自问自答了

我看到周期寄存器的取值范围为0——FFFF FFFFH,即0——4294967295
那么如果我的CPU频率为500MHz的话,那么周期寄存器最大可定时4294967295/500M=8.59秒
如果要精确计时的话,就要把周期寄存器的值设小一点,然后开启计数寄存器,把记得的次数与周期寄存器的值相乘就是我需要的计时时间。
呵呵,不知我这样算对吗?哪位高手给指点一下!

使用特权

评论回复
5
yxwsz| | 2009-7-3 23:11 | 只看该作者

RE

设置一个一直运行的定时器,比如1ms; 设置一个全局变量unsigned int soft_timer,在该timer ISR中执行soft_timer ++;

在外部中断来的时候,读soft_timer的值;
然后把两次读到的计时器值相减;

使用特权

评论回复
6
ccjchen|  楼主 | 2009-7-4 16:20 | 只看该作者

谢谢yxwsz啊,俺也是这么想的

多谢一直指点!

使用特权

评论回复
7
zhangsifu| | 2009-8-2 13:28 | 只看该作者
楼主你自己的方法也是可行的,定时器启动之后就自己运行了,不会影响你的中断,你要保证两次中断的时间要小于定时器的时间。
读定时器的cnt寄存器就可以得到数值了。

使用特权

评论回复
8
ccjgalaxy| | 2009-8-5 14:43 | 只看该作者
本帖最后由 ccjgalaxy 于 2009-8-5 14:44 编辑

如果这个程序是在DSP/BIOS环境下编写的,你用  CLK_gethtime()  函数就可以完成这个任务
即设第一次压在磁钢上的时间为t1 = CLK_gethtime()  ;
设第二次压在磁钢上的时间为t2 = CLK_gethtime()  ;
那么两次时间差为 t = (t2 - t1)*8/600M (由于DM642时钟频率为600MHz)
还请各位大侠看这样做对吗?

使用特权

评论回复
9
ccjchen|  楼主 | 2009-8-7 09:58 | 只看该作者
望各位前辈给指点一下!:'(

使用特权

评论回复
10
ccjchen|  楼主 | 2009-8-17 13:03 | 只看该作者
?????????????

使用特权

评论回复
11
QuakeGod| | 2009-8-18 03:37 | 只看该作者
你可以让你的定时器一直运行,
第一次中断读取一下定时器的值,第二次中断再读取一次,两次想减的差值既是所经历的时间,
但是定时器会溢出,导致终值小于初值,如果两次中断的时间肯定小于8.59秒,那么认为定时器只溢出了一次。
如果两次中断时间大于8.59秒,那么需要更多的定时器位数。
你可以在内存中设置一个8位累加器,每次定时中断时,不对定时器进行操作,只是把累加器加1,
这样你的定时器就扩展到了40位。每次读时间的时候,读一个40位的时间。溢出时间2199秒
但是考虑到设备的健壮性,你应该设计一个在最大可能运行时间都不会溢出的定时器位数。
所以再扩展一个32位累加器,使定时器扩展到64位,溢出时间就变为1169年,估计就相当可靠了。

使用特权

评论回复
12
ccjchen|  楼主 | 2009-8-18 09:08 | 只看该作者
谢谢!高见,还请问一下。
在DSP/BIOS环境下编写的, 如果选定时器1作为bios的基准时钟,那么CLK_gethtime()  函数可以用吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

粉丝