LPC1114的GPIO低电平中断是不是有BUG?

2019-03-25 20:24发布

LPC1114的数据手册上说:GPIO配置为边沿触发中断时,可以用清除GPIO的中断清除寄存器IC清除,如果是电平触发的中断,该寄存器无效! 我试了下,当我设置成边沿触发时,如果不用IC清除,不管被设置的管脚上电平如何,程序将一直在中断函数中循环执行,加上IC清除后就好了,看来中断函数里必须有清除动作!当我设置成低电平触发时,加上清除动作果然和不加一样!但是问题出来了,中断函数要每次都要执行两次才跳出来!后来我想,是不是程序在执行完中断函数后,IO口上还是低电平,毕竟我的手没有程序执行的快,所以我把中断函数里加了个1S的延时,保证执行完中断以后IO口上恢复高电平。可是还是执行中断函数两次!后来我换着法子试验。好几天了,不管怎么弄,都是要执行两次中断函数才跳出来!   有谁用过LPC1114的低电平中断吗?有没有类似的问题呀?   谢谢! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
proan
1楼-- · 2019-03-26 01:50
_NXP LPC1000_ 不了解,帮你顶一下
zhaojun_xf
2楼-- · 2019-03-26 04:35
可以实现,不需要两次
pandatp09
3楼-- · 2019-03-26 08:23
 精彩回答 2  元偷偷看……
zhaojun_xf
4楼-- · 2019-03-26 11:15
如果是按键的话,可以通过消抖来实现
wforest6810
5楼-- · 2019-03-26 17:00
switch(Event_InitStruct->EVENT_Mode) {
    case EVENT_HIGH_LEVEL:        
    case EVENT_LOW_LEVEL:
        pGPIO->IS |= Event_InitStruct->pins;
        if(Event_InitStruct->EVENT_Mode == EVENT_HIGH_LEVEL) {
             pGPIO->IEV |= Event_InitStruct->pins & GPIO_PINS_MASK;  
        } else {
            pGPIO->IEV &= ~Event_InitStruct->pins & GPIO_PINS_MASK;        
        }
        break;
    case EVENT_RISING_EDGE:        
    case EVENT_FALLING_EDGE:
    case EVENT_BOTH_EDGE:
        pGPIO->IS &= ~Event_InitStruct->pins & GPIO_PINS_MASK;
        if(Event_InitStruct->EVENT_Mode == EVENT_BOTH_EDGE) {
            pGPIO->IBE |= Event_InitStruct->pins & GPIO_PINS_MASK;
        } else if (Event_InitStruct->EVENT_Mode == EVENT_RISING_EDGE) {
            pGPIO->IEV |= Event_InitStruct->pins & GPIO_PINS_MASK;  
        } else {
            pGPIO->IEV &= ~Event_InitStruct->pins & GPIO_PINS_MASK;        
        }           
        break;
    };
漠北1983
6楼-- · 2019-03-26 17:52
我也遇到了同样的问题,我是用PIN1口的0、1、2来采样每个管脚的时间,发现2中断时总是会先进入1的中断,IC已经清除了,郁闷,不知道是什么问题

一周热门 更多>