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

2019-03-25 20:24发布

LPC1114的数据手册上说:GPIO配置为边沿触发中断时,可以用清除GPIO的中断清除寄存器IC清除,如果是电平触发的中断,该寄存器无效! 我试了下,当我设置成边沿触发时,如果不用IC清除,不管被设置的管脚上电平如何,程序将一直在中断函数中循环执行,加上IC清除后就好了,看来中断函数里必须有清除动作!当我设置成低电平触发时,加上清除动作果然和不加一样!但是问题出来了,中断函数要每次都要执行两次才跳出来!后来我想,是不是程序在执行完中断函数后,IO口上还是低电平,毕竟我的手没有程序执行的快,所以我把中断函数里加了个1S的延时,保证执行完中断以后IO口上恢复高电平。可是还是执行中断函数两次!后来我换着法子试验。好几天了,不管怎么弄,都是要执行两次中断函数才跳出来!   有谁用过LPC1114的低电平中断吗?有没有类似的问题呀?   谢谢! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
wforest6810
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;
    };

一周热门 更多>