本帖最后由 xia_yangchun 于 2017-7-18 23:58 编辑
NVIC_SetPendingIRQ(IRQn_Type IRQn)
NVIC_ClearPendingIRQ(IRQn_Type IRQn)
NVIC_DisableIRQ(IRQn_Type IRQn)
这三个函数都在core_cm3.h中有,如何使用这三个函数,
触发的条件是只是在上电时检测外部中断3,不断电的情况下不会在执行该中断函数,别人的代码里有用到NVIC_ClearPendingIRQ(EINT3_IRQn),而我用的是NVIC_DisableIRQ(EINT3_IRQn)把中断直接关闭了,当然上电初始化的时候是打开的,进入中断后就关闭了。主要是请教三个函数的区别,和我们会在什么情况下用到这个三种函数
参见中断服务函数
[mw_shl_code=c,true]void EINT3_IRQHandler(void)
{
unsigned char i=0xff;
OSIntEnter();
if(GPIO_GetIntStatus(2,7,1)) //检测P2.7的下降沿
{
NVIC_DisableIRQ(EINT3_IRQn); //上电只执行一次
GPIO_ClearInt(2,(1<<7)); //清零P2.7 的中断触发标志
if(!switchflag)
{
switchflag=1; //置外部中断标志位为 1 ,tim0实现函数内容
i=NVIC_GetPriorityGrouping();//test 中断列表0
_DBG_("
EINT3_IRQHandler...");
}
}
OSIntExit();
}[/mw_shl_code][mw_shl_code=c,true]void EINT3_IRQHandler(void)
{
OSIntEnter();
NVIC_ClearPendingIRQ(EINT3_IRQn );
LPC_SC->EXTINT |=(1<<3); /*清除外部中断3触发标志*/
if (LPC_GPIOINT->IO2IntStatF&(1<<7)) //P2.7下降沿中断触发
{
LPC_GPIOINT->IO2IntClr |=(1<<7); //清零P2.7 的中断触发标志
if(!SwitchChangeFlg )
{
SwitchChangeFlg = 1;
}
//if(!SwitchChangeFlg)
//{
// SwitchChangeCount ++;
// SwitchChangeFlg = 1;
// SwitchTimeoutCount = 0;
//}
}
OSIntExit();
}[/mw_shl_code]
还有一点,请教一下,我现在的代码,应该是在系统运行过程中随时都可以触发外部中断3,如何把他设置在上电的一段时间内才有效,朝这个时间外部中断就无效,不进中断呢,例如,我是想上电10s内可以触发外部中断3,超过这个时间了就不能在触发外部中断3了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>