4回答

0收藏

中断优先级

#开源分享 #开源分享 2860 人阅读 | 4 人回复 | 2014-07-20

/*配置中断引脚*/
void exti_config(void)
{
                //GPIO_InitTypeDef GPIO_InitStructure;
                EXTI_InitTypeDef EXTI_InitStructure;
                NVIC_InitTypeDef NVIC_InitStructure;

                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
                //设置NVIC优先级分组为Group2:2位先占优先级(0-2),2位子优先级(0-2)

                GPIO_EXTILineConfig(button_port_source,button1_source);         //选择按键1的GPIO管脚(端口+管脚号)做外中断源
                GPIO_EXTILineConfig(button_port_source,button2_source);         //选择按键2的GPIO管脚(端口+管脚号)做外中断源

                EXTI_InitStructure.EXTI_Line = button1_exti_line|button2_exti_line;        //设置按键所有的外部线路
                EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                                        //设置为外部中断模式
                EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                                 //设置触发模式为下降沿触发
                EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                                        //使能该线路中断
                EXTI_Init(&EXTI_InitStructure);       

                NVIC_InitStructure.NVIC_IRQChannel = button_irqn;                                //使能按键所在的外部中断通道
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;        //
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;                    //从优先级15
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //使能外部中断通道
                NVIC_Init(&NVIC_InitStructure);         //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

                   GPIO_EXTILineConfig(button_wakeup_gpio_source, button_wakeup_source);

                EXTI_InitStructure.EXTI_Line = button_wakeup_exti_line ;        //设置按键所有的外部线路
                EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                        //设外外部中断模式:EXTI线路为中断请求
                EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
                EXTI_InitStructure.EXTI_LineCmd = ENABLE;                //使能外部中断新状态
                EXTI_Init(&EXTI_InitStructure);       

                  NVIC_InitStructure.NVIC_IRQChannel = button_wakeup_irqn;                        //使能按键所在的外部中断通道
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;                        //抢占优先级
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;                                        //从优先级2
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //使能外部中断通道
                NVIC_Init(&NVIC_InitStructure);                                        //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
}


既然NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);设置能了2位,2位,为何NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;        //
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;                    //从优先级15这里有个15,个人理解2位最大为4吧。求解释?
分享到:
回复

使用道具 举报

回答|共 4 个

倒序浏览

沙发

laoliang-67665

发表于 2014-7-21 10:27:29 | 只看该作者

你说的很对,这里的代码没有修改完善,应该是0X03就可以了
嵌入式,ucos,FPGA系统书籍作者
板凳

yilusuiyuan

发表于 2014-7-21 10:47:39 | 只看该作者

亮点 发表于 2014-7-21 10:27
你说的很对,这里的代码没有修改完善,应该是0X03就可以了

谢谢亮哥,写超了会在自动截取符合要求的值。
地板

laoliang-67665

发表于 2014-7-21 11:35:41 | 只看该作者

yilusuiyuan 发表于 2014-7-21 10:47
谢谢亮哥,写超了会在自动截取符合要求的值。

                              
嵌入式,ucos,FPGA系统书籍作者
5#

one棉花糖one

发表于 2014-12-7 19:00:52 | 只看该作者

我是来赚铜板的
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条