背景是这样的,我用普通IO口作为低功耗唤醒管脚。相信很多小伙伴也有这种应用。之前我用一个IO口P1.2外接光敏,通过光敏是否见光,来决定是否退出低功耗。后来在实际生产过程中,为了测试功耗,需要一个中断口给系统,幸好当时我预留了一个P1.3,通过一个简单的分压电路给P1.3,上分压电阻100K,下分压电阻为1M.贴图不方便,索性口述啦。设置P1.3设置为上升沿中断。次奥,还是贴图吧,否则效果不明显。这个是我的中断处理函数: 在此之前,应该设置一下原理图。如下: 这个的设置方法是群主告诉我的,之前我不会。方法是这样的: 接下来涉及到一个很实际的问题,也是小伙伴们关心的问题,就是如何知道中断来的时候,我该怎么判断是哪个IO口产生中断了? 查阅编译出来的库文件,我发现了这样一段话。如下: 这段解释是在Pin_1_ClearInterrupt()这个函数的函数说明中看到的。意思是以二进制移位的方式决定哪一个bit位,比如 0000 0000,如果是bit0产生了中断,那么会变为0000 0001,也就是十六进制的0x01,如果是bit1,发生了中断,那么会变为0000 0010,也就是0x02.......以此类推,不在赘述。 那么在中断中我就可以判断是哪一个口产生中断了。事先我宏定义了:
#define EXIT_Interrpt 0x02 //P1.3 #define PHOTOSENSITIVE 0x01 //P1.2 在中断中判断即可啦。 if(InterruptState == PHOTOSENSITIVE)//如果是光敏见光 { //添加自己的代码 } else if(InterruptState == EXIT_Interrpt)//如果是外部中断 { //添加自己的代码 }
搞定!希望对小伙伴们有帮助。之前一直在群里和论坛里向大神们提问,今天也算是自己对本群和论坛的一些回馈吧。 写的比较零散,也有可能有纰漏。欢迎讨论。 如有其他疑问和见解,可以联系我Q :849121196 (大爱无疆)