牛卧堂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