[ZLG-ARM] 外中断触发掉电模式后,再也进不了掉电模式

[复制链接]
 楼主| huanhuan03 发表于 2007-1-24 14:53 | 显示全部楼层 |阅读模式
我用的是LPC2148,手册上说外中断触发唤醒掉电模式时,不必为了唤醒掉电模式而在向量中断控制寄存器中使能<br />我在试验板上做试验时发现,当不在向量中断控制寄存器中使能时,程序会唤醒后无视我的再次进入掉电模式,即永远也不再进入掉电模式<br />但在向量中断控制寄存器中使能时就没有这种现象<br />请问这个如何能够解释得通?我得代码如下,谢谢<br /><br />主函数部分<br />while&nbsp;(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(n&nbsp;=&nbsp;0x00010000;&nbsp;n&nbsp;&lt=&nbsp;0x00800000;&nbsp;n&nbsp;&lt&lt=&nbsp;1)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n&nbsp;==&nbsp;0x00040000)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;putc('a');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCON&nbsp;=&nbsp;0X02;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;putc('b');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOSET1&nbsp;=&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay();&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOCLR1&nbsp;=&nbsp;0x00FF0000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><br />中断初始化部分:<br />PINSEL1&nbsp;|=&nbsp;0x00000001;&nbsp;//选择p0.16管角为INT0功能<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTMODE&nbsp;&=&nbsp;0Xfe;//level&nbsp;trigger<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTPOLAR&nbsp;&=&nbsp;0Xfe;//低电平触发<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTINT&nbsp;|=&nbsp;0X01;//设置的改变导致EXTINT,故清0一次<br />while((IO0PIN&nbsp;&&nbsp;0x00010000&nbsp;)==&nbsp;0);//INT0
zlgARM 发表于 2007-1-24 15:31 | 显示全部楼层

RE

必须清除外部中断标志位。<br />你不清除中断标志位,相当于始终处于唤醒状态,当然不能进入掉电模式了。<br />仔细看一下例程,例程在在进入掉电模式前可是有清除外部中断标志位的。
 楼主| huanhuan03 发表于 2007-1-24 15:42 | 显示全部楼层

找到了,谢谢

找到了,在ISR中记得清,这里反倒忘了<br />我是在PCON&nbsp;=&nbsp;0X02添了一句<br />while((EXTINT&nbsp;&&nbsp;0x0f)!=0)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTINT&nbsp;|=0X0F;<br />如果是单纯的EXTINT&nbsp;|=0X0F则程序会存在隔一个主程序周期才能进入掉电模式的情况,应该是寄存器操作没有完成导致的;但进入掉电之前写该句的话就没有问题<br />谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

32

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部