高级会员

- 积分
- 997
- 金钱
- 997
- 注册时间
- 2017-8-19
- 在线时间
- 160 小时
|
1金钱
今天尝试了一下使用外部中断不配置中断优先级,直接使能中断。我用的是外部中断0和中断1,在正点原子的战舰开发板上!我发现居然EXTI0打断不了EXTI4的程序,我人傻了。这是为什么?按中断表来看EXTI0默认比EXTI4高,居然打断不了!!!!!!!!!!!!!!!!!!!!!!!!!!有师傅能解释一下吗!两个中断是可以运行的!
void Exti_Init(void)
{
RCC->APB2ENR |= 1 << 0; //开启AFIO时钟
AFIO->EXTICR[0] &= ~(0xf << 0); //配置PA0引脚
AFIO->EXTICR[1] &= ~(0xf << 0); //清空GPIO.4引脚
AFIO->EXTICR[1] |= (0x4 << 0); //配置PE4引脚
EXTI->IMR |= (0x1 << 0); //开放EXTI0中断请求
EXTI->IMR |= (0x1 << 4); //开放EXTI4中断请求
EXTI->RTSR |= (0x1 << 0); //EXTI0上升沿触发
EXTI->FTSR |= (0x1 << 4); //EXTI4下降沿触发
NVIC_EnableIRQ(EXTI0_IRQn);
NVIC_EnableIRQ(EXTI4_IRQn);
}
void EXTI0_IRQHandler(void)
{
LED_Switch(LED0,LED_On);
while(1);
EXTI->PR |= 1 << 0; //清除中断标志位
}
void EXTI4_IRQHandler(void)
{
LED_Switch(LED1,LED_On);
while(1);
EXTI->PR |= 1 << 4; //清除中断标志位
}
|
|