打印

请教arm7外部中断清除的问题

[复制链接]
2278|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
075225bupt|  楼主 | 2008-3-25 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
armecos| | 2008-3-25 18:55 | 只看该作者

产生外部中断的芯片肯定可以撤除中断,

不然这个芯片就设计错了,有些芯片是当你把数据读出时自动清除中断电平,有些需要置位清除端,有些是写入某个语句,总之,不同芯片的中断撤除方式是不一样的。如果是你自己设计的芯片,那你一定要加入撤除功能。

关于中断操作,下面有万能中断模板,适合所有芯片和处理顺序:ecos中断

使用特权

评论回复
板凳
075225bupt|  楼主 | 2008-3-25 19:46 | 只看该作者

补充一点

产生中断的芯片可能通过写入某个语句使电平变高,但由于整个程序设计的要求,最后不采用这种方法.还有其它的方法吗?

使用特权

评论回复
地板
armecos| | 2008-3-25 22:53 | 只看该作者

不要把简单的事情复杂化,

先撤除外部中断源再应答中断是标准做法,思路清晰,你的程序竟然不允许这样做,明显是把简单的事情复杂化,一般是让整个程序服从中断顺序要求,而不是反过来。

使用特权

评论回复
5
075225bupt|  楼主 | 2008-3-26 11:11 | 只看该作者

多谢

多谢armecos的指点

使用特权

评论回复
6
xhtxzxw| | 2008-3-27 00:54 | 只看该作者

嘿嘿

我对LZ问题的理解:
1.因某种原因的限制,中断必须由低电平触发;
2.响应中断后,外部芯片给出的中断触发信号(低电平)不可以或不允许通过可控方式撤除;

于是,ARM在响应中断以后,中断标志无法清除(或者是清除了但马上有恢复了,因为外部芯片所给触发条件依然存在).
再于是,在ARM退出中断服务函数以后,可能立即又响应中断进入中断服务函数.

可能的解决办法是:

1初始化时设置低电平触发中断---->2外部芯片相关引脚变低电平---->3执行中断函数并在中断函数中设置高电平触发中断---->4退出中断函数------>5外部芯片相关引脚维持低电平(中断函数不会再次执行因为要高电平触发)---->6外部芯片相关引脚变高电平----->7执行中断函数并在中断函数中设置低电平触发中断----->外不芯片相关引脚维持高电平(中断函数不会再次执行因为要低电平触发)---->2,循环.......。3中要完成正常的中断服务功能,7中仅仅更新一下触发方式,注意定义一个全局变量记录当前触发方式,在3和7里根据这个标志就可以确定:当前触发方式是高电平还是低电平,以及是否要完成正常的中断服务功能.

我的基本思路是:低电平触发中断,这是正常要求的中断。
在中断服务函数里,如果判断出本次中断是由低电平触发的,则说明这是正常的中断,需要按要求完成对应的操作,然后再定义下一次由高电平触发中断,目的是防止本次中断退出后引起本次中断的低电平依然存在,从而导致不应该的中断重复响应;

在中断服务函数里,如果判断出本次中断是由高电平触发的,则说明这不是正常的中断,不需要完成对应的操作,只需要定义下一次由低电平触发中断,一方面防止本次中断退出后引起本次中断的高电平依然存在,从而导致不应该的中断重复响应,更重要的是恢复到由低电平触发中断;


使用特权

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

本版积分规则

5

主题

10

帖子

0

粉丝