CM3的中断函数疑惑

2019-08-16 23:07发布

本帖最后由 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了

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。