想问下同一个中断服务函数里面是怎样设置优先级的呢?为什么我这样设置的时候按KEY1 LED1有时候会不亮,而且会干挠到LED0。
#include"exti.h"
#include"led.h"
#include"key.h"
#include"delay.h"
#include"usart.h"
//外部中断0服务程序
void EXTI0_IRQHandler(void)
{
delay_ms(10); //消抖
if(WK_UP == 1)
{
LED0 =! LED0;
LED1 =! LED1;
}
EXTI-> R = 1<<0; //清除LIEN0上的中断标志位
}
//外部中断5服务程序
void EXTI9_5_IRQHandler(void)
{
delay_ms(10);
if(KEY0 == 0) LED0 =! LED0;
EXTI-> R = 1<<5; //清除LIEN5上的中断标志位
}
//外部中断15服务程序
void EXTI15_10_IRQHandler(void)
{
delay_ms(10);
if(KEY1 ==0) LED1 =! LED1;
else if(KEYS0 ==0) LED0 =! LED0;
else if(KEYS1 ==0) LED0 =! LED0;
else if(KEYS2 ==0) LED0 =! LED0;
else if(KEYS3 ==0) LED0 =! LED0;
else if(KEYS4 ==0) LED0 =! LED0;
EXTI-> R = 1<<15; //清除LIEN15上的中断标志位
EXTI-> R = 1<<10; //清除LIEN10上的中断标志位
EXTI-> R = 1<<11; //清除LIEN11上的中断标志位
EXTI-> R = 1<<12; //清除LIEN12上的中断标志位
EXTI-> R = 1<<13; //清除LIEN13上的中断标志位
EXTI-> R = 1<<14; //清除LIEN14上的中断标志位
}
//外部中断初始化程序,初始化PA0,PC5,PA15为中断输入
void EXTI_Init(void)
{
KEY_Init(); //按键初始化
Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
Ex_NVIC_Config(GPIO_C,5,FTIR); //下降沿触发
Ex_NVIC_Config(GPIO_A,15,FTIR); //下降沿触发
Ex_NVIC_Config(GPIO_B,10,FTIR); //下降沿触发
Ex_NVIC_Config(GPIO_B,11,FTIR); //下降沿触发
Ex_NVIC_Config(GPIO_B,12,FTIR); //下降沿触发
Ex_NVIC_Config(GPIO_B,13,FTIR); //下降沿触发
Ex_NVIC_Config(GPIO_B,14,FTIR); //下降沿触发
MY_NVIC_Init(2,2,EXTI0_IRQn,2); //抢占2,子优先级2,组2
MY_NVIC_Init(2,1,EXTI9_5_IRQn,2); //抢占2, 子优先级1,组2
MY_NVIC_Init(2,0,EXTI15_10_IRQn,2); //抢占2,子优先级0, 组2
MY_NVIC_Init(1,2,EXTI15_10_IRQn,2); //抢占1,子优先级2, 组2
MY_NVIC_Init(1,1,EXTI15_10_IRQn,2); //抢占1,子优先级1, 组2
MY_NVIC_Init(1,0,EXTI15_10_IRQn,2); //抢占1,子优先级0, 组2
MY_NVIC_Init(0,2,EXTI15_10_IRQn,2); //抢占0,子优先级2, 组2
MY_NVIC_Init(0,1,EXTI15_10_IRQn,2); //抢占0,子优先级1, 组2
}
|