牛卧堂MCU技术交流

标题: 请教单独打开和关闭NUC123某GPIO中断的问题 [打印本页]

作者: cooljoezhou    时间: 2017-1-10 16:44
标题: 请教单独打开和关闭NUC123某GPIO中断的问题
在NUC123中,设置PD4和PD3为GPIO下降沿中断,但是由于某种原因,只想对PD3进行关中断和开中断的操作,也就是在对PD3进行关中断的操作后,PD4仍然可以响应外部中断。
这样的话使用NVIC_DisableIRQ(GPCDF_IRQn)可能不适用,因为这样的话同时也把PD4的中断也屏蔽了。

请问,如果想单独屏蔽PD3的中断,是不是调用    GPIO_DisableInt( PD, 3 );就可以了?

之后想再打开PD3的中断,是不是调用    GPIO_EnableInt( PD, 3, GPIO_INT_FALLING );就可以了?
再次打开PD3的中断时还需要对PD3进行如下完整的配置吗?
    GPIO_SET_MODE( PD, 3, GPIO_INPUT );
    GPIO_EnableInt( PD, 3, GPIO_INT_FALLING );


作者: cooljoezhou    时间: 2017-1-10 17:46
奇怪了,我调用 GPIO_DisableInt( PD, 3 ); 后竟然还可以进PD3的中断服务程序!
GPIO_EnableInt 和GPIO_DisableInt参考的都是BSP!

/**
* @brief       Enable GPIO interrupt
*
* @param[in]   PORT        GPIO port struct pointer. It could be PA, PB, PC, PD, PF.
* @param[in]   u32Pin      The pin of specified GPIO port. It could be 0 ~ 15.
* @param[in]   u32Attribs  The interrupt attribute of specified GPIO pin. It could be \n
*                          GPIO_INT_RISING, GPIO_INT_FALLING, GPIO_INT_BOTH_EDGE, GPIO_INT_HIGH, GPIO_INT_LOW.
*
* @return      None
*
* @details     This function is used to enable specified GPIO pin interrupt.
*/
static __INLINE void GPIO_EnableInt(GPIO_T *PORT, uint32_t u32Pin, uint32_t u32IntAttribs)
{
    PORT->IMD = PORT->IMD & (~(1UL<<u32Pin)) | (((u32IntAttribs&0x80000000UL)>>31) << u32Pin);
    PORT->IEN = PORT->IEN & (~(0x00010001UL<<u32Pin)) | ((u32IntAttribs & 0x7FFFFFFFUL) << u32Pin);
}

/**
* @brief       Disable GPIO interrupt
*
* @param[in]   PORT        GPIO port struct pointer. It could be PA, PB, PC, PD, PF.
* @param[in]   u32Pin      The pin of specified GPIO port. It could be 0 ~ 15.
*
* @return      None
*
* @details     This function is used to disable specified GPIO pin interrupt.
*/
static __INLINE void GPIO_DisableInt(GPIO_T *PORT, uint32_t u32Pin)
{
    PORT->IMD &= (~(1UL << u32Pin));
    PORT->IEN &= (~((0x00010001UL) << u32Pin));
}

作者: cooljoezhou    时间: 2017-1-10 17:52
调   NVIC_DisableIRQ(GPCDF_IRQn); 后确实不会进PD3的GPIO中断了。

但是请问有只禁用PD3的GPIO中断,保持PD4的GPIO中断打开的方法吗?
作者: chenwenbin    时间: 2017-1-11 16:48
NVIC_DisableIRQ(GPCDF_IRQn); 就用这个禁止PD3中断就可以了,不会影响PD4的
作者: cooljoezhou    时间: 2017-2-7 11:58
请问使用NVIC_DisableIRQ(GPCDF_IRQn);的话,不是PD3和PD4都被禁掉了吗?
这个难道不是GPIO_PC/PD/PE/PF Interrupt都被禁掉了吗?
谢谢。
作者: harvardx    时间: 2017-2-7 12:18
可以按照自己的想法 ,操作看看 然后去对应的寄存器查看




欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) Powered by Discuz! X3.2