新手上路
- 积分
- 47
- 金钱
- 47
- 注册时间
- 2020-10-22
- 在线时间
- 19 小时
|
10金钱
尝试用PE10-14五个中断线通过中断服务函数EXTI15_10来控制,但当同时使用EXTI15_10中的三个及三个以上外部中断线时,发现总是有各种问题,比如无法清除标志位,或者无法进入中断等。后来将中断线减少到两个(PE10和PE11)所有的程序就一切正常了,目前没有找到任何原因,所以改用PE10和PE11及其他的中断线控制了,有知道原因的吗?
这是IO和中断配置:
void KEY_Init(void)
{
RCC->APB2ENR|=1<<6; //使能GPIOE和AFIO时钟
RCC->APB2ENR|=1<<0;
GPIOE->CRH&=0xfff000ff; //设置PB12PB13为输入
GPIOE->CRH|=0x00088800;
GPIOE->ODR|=1<<11;
GPIOE->ODR|=1<<10;
GPIOE->ODR|=1<<12;
}
void EXIT_Init(void)
{
NVIC->ISER[1]|= 1<<8; //使能EXTI15_10这个外部中断
// NVIC->ISER[0]|= 1<<6|1<<9|1<<10; //使能EXTI0,3,4的外部中断
// NVIC->ISER[0]|=1<<9;
EXTI->IMR |= 1<<10; //使能EXTI12,13外部中断线
EXTI->IMR |= 1<<11;
EXTI->IMR |= 1<<12;
// EXTI->IMR |= 1<<13;
EXTI->RTSR |= 1<<10; //使能EXTI12,13外部中断线
EXTI->RTSR |= 1<<11;
// EXTI->RTSR |= 1<<13;
AFIO->EXTICR[2]|= 0100<<8;//配置PE10外部中断输入源
AFIO->EXTICR[2]|= 0100<<12;//配置PE11外部中断输入源
//EXTI9_15
SCB->AIRCR=0x05FA0000|0x500; //设置中断分组
NVIC->IP[40]=0xD0; //抢占:响应为2:2,1101 0000
//EXTI0
// SCB->AIRCR=0x05FA0000|0x500;
// NVIC->IP[6]=0x90;//抢占:响应为2:2,1001 0000
// //EXTI3
// SCB->AIRCR=0x05FA0000|0x500;
// NVIC->IP[9]=0xA0;//抢占:响应为2:2,1010 0000
// //EXTI4
// SCB->AIRCR=0x05FA0000|0x500;
// NVIC->IP[10]=0xB0;//抢占:响应为2:2,1011 0000
}
void EXTI15_10_IRQHandler(void)
{
delay_ms(15);//按键消抖
if(EXTI->PR&1<<10)
{
GUI_StoreKeyMsg(Key_Left,1);
EXTI->PR|=1<<10;
}
if(EXTI->PR&1<<11)
{
GUI_StoreKeyMsg(Key_Right,1);
EXTI->PR|=1<<11;
}
}
|
|