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