witnessiz 发表于 2010-12-5 20:15:26

请教马潮老师AVR关于外部中断INT0电平中断唤醒CPU的问题

马老师您说:不管是使用51还是AVR,只要采用电平触发方式,那么在进入中断后要设法将触发电平信号取消。如果不取消,51不会爆堆栈(自己不能打断自己),但每次中断退出,又进入了。AVR的中断服务如果是不允许嵌套的,那么同51类似;而在允许嵌套时,会将堆栈压爆。

如果在中断处理函数里将CPU(掉电模式)唤醒了,将睡眠模式关掉,再将电平中断模式关掉(防止再次进入中断),如果低电平的时间是短暂,程序还是能跳出中断回到主函数,但是如果低电平的时间长了点,那么PC似乎就是停在中断处理函数的底端或者飞掉了。

我在一段程序中就出现了这种问题,因为做的是在外部电压降到一定程度的时候将CPU唤醒并且要测出当前的电压,有时候会有出现长时间低电平的时候,所以我的程序只有在90%的情况下是可以用的。

因为没有Jtag,所以我在主函数将一端口电平置高,然后再中断处理函数的底部将这一端口置低,用示波器观察,如果中端口的低电平时间过长就发现这一端口持续为低在也高不上去,也就是说回不到主函数了,PC好像停在那里了或者是已经不知道飞哪里去了。除了复位基本没其他办法(所以使用了看门狗解决问题一旦持续时间过长就复位)。

请问马潮老师这个现象是否正常?我看过您的其他的帖子,好像没有关于电平中断唤醒CPU之后的详细处理过程。如果需要将CPU掉电唤醒却又不能保证低电平信号可以及时去除,纯软件该如何解决呢?
页: [1]
查看完整版本: 请教马潮老师AVR关于外部中断INT0电平中断唤醒CPU的问题