牛卧堂 ARM Cortex m0 M4技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

开启左侧

[NUC] 请教单独打开和关闭NUC123某GPIO中断的问题

[复制链接]
cooljoezhou 发表于 2017-1-10 16:44:07 | 显示全部楼层 |阅读模式
在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:39 | 显示全部楼层
奇怪了,我调用 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:04 | 显示全部楼层
调   NVIC_DisableIRQ(GPCDF_IRQn); 后确实不会进PD3的GPIO中断了。

但是请问有只禁用PD3的GPIO中断,保持PD4的GPIO中断打开的方法吗?
回复 支持 反对

使用道具 举报

chenwenbin 发表于 2017-1-11 16:48:10 | 显示全部楼层
NVIC_DisableIRQ(GPCDF_IRQn); 就用这个禁止PD3中断就可以了,不会影响PD4的
回复 支持 反对

使用道具 举报

 楼主| cooljoezhou 发表于 2017-2-7 11:58:07 | 显示全部楼层
请问使用NVIC_DisableIRQ(GPCDF_IRQn);的话,不是PD3和PD4都被禁掉了吗?
这个难道不是GPIO_PC/PD/PE/PF Interrupt都被禁掉了吗?
谢谢。
回复 支持 反对

使用道具 举报

harvardx 发表于 2017-2-7 12:18:50 | 显示全部楼层
可以按照自己的想法 ,操作看看 然后去对应的寄存器查看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注新唐微信服务号

小黑屋|手机版|新唐(华邦)ARM Cortex M0 M4技术交流 ( 沪ICP备13045913号

GMT+8, 2017-3-26 03:47 , Processed in 0.276324 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表