Discuz! Board

标题: 关于如何关闭NRF51822外部中断 [打印本页]

作者: hu25886    时间: 2016-5-4 10:15
标题: 关于如何关闭NRF51822外部中断
static void gpiote_init(void)
{
NRF_GPIOTE->CONFIG[0] =
(GPIOTE_CONFIG_POLARITY_HiToLo << GPIOTE_CONFIG_POLARITY_Pos)
| (17 << GPIOTE_CONFIG_PSEL_Pos)
| (GPIOTE_CONFIG_MODE_Event << GPIOTE_CONFIG_MODE_Pos);          //初始化17脚及触发方式
NRF_GPIOTE->CONFIG[1] =
(GPIOTE_CONFIG_POLARITY_HiToLo << GPIOTE_CONFIG_POLARITY_Pos)
| (16 << GPIOTE_CONFIG_PSEL_Pos)
| (GPIOTE_CONFIG_MODE_Event << GPIOTE_CONFIG_MODE_Pos);         //初始化16脚及触发方式
NRF_GPIOTE->INTENSET =
(GPIOTE_INTENSET_IN0_Set << GPIOTE_INTENSET_IN0_Pos)
| (GPIOTE_INTENSET_IN1_Set << GPIOTE_INTENSET_IN1_Pos);             //设置中断
NVIC_EnableIRQ(GPIOTE_IRQn);                                                           //使能中断
}

利用NVIC_DisableIRQ(GPIOTE_IRQn);可以关闭所有中断。现在想关闭其中的某一路,根据中断设置想利用
NRF_GPIOTE->INTENCLR=
(GPIOTE_INTENCLR_IN0_Clear << GPIOTE_INTENCLR_IN0_Pos);关闭17脚的中断,但是实验发现执行该语句后所有中断都失效了,这是什么原因呢?


作者: timi81@163.com    时间: 2017-5-8 21:51
单独编写中断处理函数 例如:
void GPIOTE_IRQHandler(void)  
02.{  
03.    if((NRF_GPIOTE->EVENTS_IN[0]==1)&&(NRF_GPIOTE->INTENSET&GPIOTE_INTENSET_IN0_Msk))      
04.    {  
05.        NRF_GPIOTE->EVENTS_IN[0]=0;  
06.        rocker_ready_flag=1;  
07.    }  
08.}





欢迎光临 Discuz! Board (http://qfv8.com/) Powered by Discuz! X3