找回密码
 立即注册

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 );

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
 楼主| 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的
回复 支持 反对

使用道具 举报

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

使用道具 举报

6#
harvardx 发表于 2017-2-7 12:18:50 | 只看该作者
可以按照自己的想法 ,操作看看 然后去对应的寄存器查看
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU