搜索
bottom↓
回复: 12

请教一个计数器中断执行的小问题,谢谢~

[复制链接]

出0入0汤圆

发表于 2013-1-17 21:17:01 | 显示全部楼层 |阅读模式
假设定时器计数是从0到100

有一中断是在30发生

中断处理需要10个计数

现在由于关全局中断,攒了一个中断标志位

当开全局中断时,计数为25,此时中断发生,标志位清0

在中断执行的过程中,标志位又置位

那么在这次中断执行完后会立即执行下一次中断吗?还是要等到计数先到100再变0后才执行?

看完手册后,我个人倾向于会连续执行第二次中断,不知道对不对,请指教,谢谢啦~!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-1-17 21:36:34 | 显示全部楼层
你说的是 中断嵌套,一般要看中断级别的。

出0入0汤圆

 楼主| 发表于 2013-1-17 21:42:10 | 显示全部楼层
xinhoujue 发表于 2013-1-17 21:36
你说的是 中断嵌套,一般要看中断级别的。

我的意思是假设只有一个中断

程序正在执行中断函数时,匹配值又满足了,则这时候标志位又置位

但由于AVR默认关闭中断嵌套,所以第二次中断必须等第一次中断执行完成后才可以执行

那么第二次执行的时间呢?第一次是25开始,35结束,第二次是35之后几个计数就立即开始执行?还是要等到计数先翻到100,清0后再开始执行?

出0入0汤圆

发表于 2013-1-17 22:51:48 | 显示全部楼层
我感觉完美听不懂 我真是太菜了

出0入0汤圆

发表于 2013-1-18 09:16:46 | 显示全部楼层
我也感觉听着云里雾里的,在仔细研究下楼主的逻辑

出0入0汤圆

 楼主| 发表于 2013-1-18 12:57:19 | 显示全部楼层
yklstudent 发表于 2013-1-17 22:51
我感觉完美听不懂 我真是太菜了

再整理一下。。。

整个程序有且只有 计数器t 的 匹配中断a,对应的中断函数是 aF

程序开始关掉了全局中断,但是 t 仍然在跑,那么 a标志位f 一直处于置位状态

到这里没问题吧?

这个时候打开了全局中断,那么甭管现在 t 跑到什么计数了,由于 f 置位,应该立即发生一次 a ,执行 aF

这里也没问题吧?

假设 t 的计数是从0加到100再清0, a 的匹配值是30,从开始执行 aF 到执行完毕 t 能够跑10个计数

aF 在执行的时候 t 仍然在跑,即若正常来讲,计数为30的时候 aF 开始执行, 40的时候 aF 执行完

这里没问题吧?

进一步假设,前面开全局中断的时候,计数跑到了25,这个时候必须得执行 aF 吧,

但是 aF 要跨10个计数啊,那在它执行的时候,t 继续跑到了 30,则刚刚被清0的 f 又置位了

对不对?

那么第一次中断应该是从25执行到了35结束,问题来了,第二次呢?是从大概36、37亦或是再往后几个计数开始,还是要等到 t 先跑到100(走完这一趟之后)再发生中断?

啊。。。貌似又讲不清楚了。。。郁闷。。。

出0入0汤圆

 楼主| 发表于 2013-1-18 12:58:12 | 显示全部楼层
MiniCat 发表于 2013-1-18 09:16
我也感觉听着云里雾里的,在仔细研究下楼主的逻辑

给上面的朋友写了个再整理,麻烦这位朋友也看下,不过可能还是云里雾里。。。

出0入0汤圆

 楼主| 发表于 2013-1-18 12:58:45 | 显示全部楼层
jswd0810 发表于 2013-1-18 11:56
我的理解也是执行第二次中断,因为你没有清标志位

对的,但是观察到的现象很奇怪,解释不通,郁闷。。。

出0入0汤圆

发表于 2013-1-19 04:45:55 | 显示全部楼层
好吧,手册写的有

要么你手动 tccn =0,要么计数器溢出后再从0开始计数到匹配值才产生中断。

或者说我理解有误?

出0入0汤圆

发表于 2013-1-19 05:03:26 | 显示全部楼层
yw1213 发表于 2013-1-19 04:45
好吧,手册写的有

要么你手动 tccn =0,要么计数器溢出后再从0开始计数到匹配值才产生中断。

好吧,刚刚又看了下手册,
任一中断发生时全局中断使能位 I 被清零,从而禁止了所有其他的中断。用户软件可以在 中断程序里置位 I 来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执 行 RETI 指令后 I 自动置位。
AVR 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。

出0入0汤圆

发表于 2013-1-19 05:08:49 | 显示全部楼层
就是说,也就是你开全局中断后的第一,二次不正常,后面的就正常了,除非你还开了其它中断或者说在中断程序里开了全局中断造成中断嵌套。

出0入0汤圆

 楼主| 发表于 2013-2-2 13:44:50 | 显示全部楼层
yw1213 发表于 2013-1-19 05:08
就是说,也就是你开全局中断后的第一,二次不正常,后面的就正常了,除非你还开了其它中断或者说在中断程序 ...

握手,理解是一致的,用白话讲第一次不正常是因为憋了好久;第二次不正常是因为本该正常的时候被第一次影响了~~~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 08:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表