请教arm7外部中断清除的问题
选用电平触发外部中断,低电平有效.<br /> 在清中断时,只有等到引脚变为高电平时,向EXTINT写1才能清中断.现在的问题是产生外部中断的芯片不能通过程序语句使中断引脚由低变高.请问还有什么办法可以清中断吗?产生外部中断的芯片肯定可以撤除中断,
不然这个芯片就设计错了,有些芯片是当你把数据读出时自动清除中断电平,有些需要置位清除端,有些是写入某个语句,总之,不同芯片的中断撤除方式是不一样的。如果是你自己设计的芯片,那你一定要加入撤除功能。<br /><br />关于中断操作,下面有万能中断模板,适合所有芯片和处理顺序:<b>ecos中断</b><br />补充一点
产生中断的芯片可能通过写入某个语句使电平变高,但由于整个程序设计的要求,最后不采用这种方法.还有其它的方法吗?不要把简单的事情复杂化,
先撤除外部中断源再应答中断是标准做法,思路清晰,你的程序竟然不允许这样做,明显是把简单的事情复杂化,一般是让整个程序服从中断顺序要求,而不是反过来。多谢
多谢armecos的指点嘿嘿
我对LZ问题的理解:<br />1.因某种原因的限制,中断必须由低电平触发;<br />2.响应中断后,外部芯片给出的中断触发信号(低电平)不可以或不允许通过可控方式撤除;<br /><br />于是,ARM在响应中断以后,中断标志无法清除(或者是清除了但马上有恢复了,因为外部芯片所给触发条件依然存在).<br />再于是,在ARM退出中断服务函数以后,可能立即又响应中断进入中断服务函数.<br /><br />可能的解决办法是:<br /><br />1初始化时设置低电平触发中断---->2外部芯片相关引脚变低电平---->3执行中断函数并在中断函数中设置高电平触发中断---->4退出中断函数------>5外部芯片相关引脚维持低电平(中断函数不会再次执行因为要高电平触发)---->6外部芯片相关引脚变高电平----->7执行中断函数并在中断函数中设置低电平触发中断----->外不芯片相关引脚维持高电平(中断函数不会再次执行因为要低电平触发)---->2,循环.......。3中要完成正常的中断服务功能,7中仅仅更新一下触发方式,注意定义一个全局变量记录当前触发方式,在3和7里根据这个标志就可以确定:当前触发方式是高电平还是低电平,以及是否要完成正常的中断服务功能.<br /><br />我的基本思路是:低电平触发中断,这是正常要求的中断。<br />在中断服务函数里,如果判断出本次中断是由低电平触发的,则说明这是正常的中断,需要按要求完成对应的操作,然后再定义下一次由高电平触发中断,目的是防止本次中断退出后引起本次中断的低电平依然存在,从而导致不应该的中断重复响应;<br /><br />在中断服务函数里,如果判断出本次中断是由高电平触发的,则说明这不是正常的中断,不需要完成对应的操作,只需要定义下一次由低电平触发中断,一方面防止本次中断退出后引起本次中断的高电平依然存在,从而导致不应该的中断重复响应,更重要的是恢复到由低电平触发中断;<br /><br /><br />
页:
[1]