OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2893|回复: 1

CM3的中断函数疑惑

[复制链接]

14

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
591
金钱
591
注册时间
2013-3-1
在线时间
153 小时
发表于 2017-7-18 23:36:36 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 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_("\nEINT3_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了

最佳答案

查看完整内容[请看2#楼]

看函数说明,看寄存器描述。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2017-7-18 23:36:37 | 显示全部楼层
看函数说明,看寄存器描述。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-17 15:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表