This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR58471:防止额外中断

Guru**** 2378650 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/761007/msp430fr58471-preventing-additional-interrupts

器件型号:MSP430FR58471

您好!

我正在使用 MSP430FR59471IRHAT 器件。 P2.2输入端定义了一个中断(该中断在信号下降 沿产生)。 当 P2.2上有多个连续脉冲时、微控制器会产生一系列多个中断。 我希望微控制器仅为第一个事件产生中断。 如何防止为所有以下输入变化产生中断?

我已经尝试通过清除 P2IFG 寄存器中的位2来禁用中断。 这没什么帮助。

以下是相关的 ISR 代码:

 

// P2.2输入的配置:

P2DIR &=~BIT2;//将 P2.2设置为输入方向

P2IES |= BIT2;//在 P2.2

P2IFG 的下降沿设置中断标志&=~BIT2;//清除 P2.2

P2IE 上的中断标志|= BIT2;//启用 P2.2上的中断



/---

// 端口2中断服务例程

//---------------

#pragma vector = port2_vector

_interrupt void port2_ISR (void)

{

//P2IE &=~BIT2;//禁用来自 P2.2的附加中断(不禁用进一步的中断)

input1EventCounter++;



while (delayTimeCounter)

{

delayTimeCounter--;

}

P4OUT |= BIT1;//1=>将 SW5_CMD 设置为"ON"状态

P2IFG = 0;//清除 P2IFG 寄存器中的所有中断标志

//P2IE |= BIT2; //从 P2.2重新启用其他中断

}//端口2中断例程结束 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为什么您注释掉"P2IE &=~BIT2;"行?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Lavi、

    发布代码时、请使用 代码插入按钮、以保持格式化和可读性、从而从社区获得最佳反馈。 我已编辑您的帖子以使用该工具。

    至于您的问题、似乎您在输入端看到抖动。 它是来自开关/按钮还是其他东西? 我猜您只需按一次按钮、并尝试避免在边界处抖动信号。

    在本论坛上有多个关于去抖信号的讨论、本帖子讨论得很好。 e2e.ti.com/.../1730534

    本站点还详细讨论了此主题的解决方案: translate.google.com/translate

    最可靠的解决方案是设置计时器中断、可能每10ms 或30ms 一次、然后仅轮询那里的输入引脚。 如果状态发生变化并保持 x 个计数的变化、则事件已发生。

    此致、
    JD