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.

[参考译文] MSP430F5438A:未设置中断标志

Guru**** 2692745 points

Other Parts Discussed in Thread: MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1600964/msp430f5438a-interrupt-flag-not-set

器件型号: MSP430F5438A


您好、

我目前正在使用 MSP430F5438A 。 我能够P2IN & BIT0while循环中正确读取 GPIO 引脚状态(例如)。 但是、当我使用如下所示的配置来配置与中断源相同的引脚时、行为有所不同:

P2DIR &= ~BIT0;  
P2IE  |= BIT0;  
P2IES &= ~BIT0;  
P2IFG &= ~BIT0;

观察结果:

  • 当以较短的时间间隔发生两个脉冲(高电平转换–低电平转换)时、控制器仅检测到 一个中断 而不是两者兼而有之。

  • 脉冲检测之间的时间间隔为 不到 700ms 、只生成一个中断。

  • 数值 大于 700ms 、两个脉冲都被正确检测到。

  • 这种行为表明在第一次中断发生后、中断标志不会重新置位大约一半 700ms

  • 在某些情况下、即使间隔短于 700ms、也会正确检测到两个中断。 但是、大多数情况下只产生一个中断。

  • 在这些缺失的中断期间、通过轮询进行观察时、引脚状态仍会在高电平和低电平之间正确转换。

关注:

这种行为的根本原因尚不清楚。 我们想了解当前中断配置为什么会出现此问题、以及重新触发中断时具体导致视在延迟的原因。

谢谢、
ANBU。

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

    首先、在清除标志寄存器后启用引脚中断。 否则您可以获得中断。

    这里未作说明是发生中断时会发生的情况。 是否有中断服务例程? 它是否很短并且是否清除中断? 是否有其他 ISR 需要很长时间才能完成?

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

    尊敬的 DevID:

    感谢您的答复。

    是的、针对该 GPIO 中断实施了中断服务例程 (ISR)。 ISR 特意保持较短、仅用于验证中断条件、调用所需的读取函数、以及清除中断标志。

    相关的中断处理逻辑如下所示:

    pragma vector=port2_vector
    __中断 void port_2_isr (void)
    IF (P2IFG 和 BIT0)

    DELAY_ms (30);

    IF (P2IES 和 BIT0)

    if (case_1 || case_2 || case_3 || case_4 || case_5 || case_6)

    read_function ();
    }
    }
    Else if (P2IN 和 BIT0)

    read_function ();
    }

    P2IFG &=~BIT0;//清除中断标志
    }
    }

    在 ISR 中:

    • 短延迟delay_ms(30) () 用于信号稳定。

    • P2IESP2IN检查中断边沿选择 () 和引脚状态 () 以验证事件。

    • read_function()仅在满足所需条件时调用、执行时间大约为 90ms。

    • 中断标志 ()P2IFG 在退出前被显式清除。

    除了上述短延迟之外、没有长循环或阻塞操作。 系统中还存在其他 ISR、但这些 ISR 很短、并且不会有意在长时间内阻止或禁用全局中断。

    尽管采用了这种实现方式、当两个脉冲在短间隔(小于~700ms)内发生时、即使在主环路中进行监控时 GPIO 引脚状态正确切换、也有时不会产生第二个中断。

    此行为的根本原因目前尚不清楚。 任何有助于识别和解决问题的分析或建议都会有所帮助。

    谢谢、
    ANBU

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

    30ms 是中断例程中的长延迟。

    当一个中断得到处理而每个 ISR 都会阻塞时、GIE 会被清除。

    与 P2IFG 相比、P2IV 是一种检查中断源的更好方法。 它还会清除中断源。 消除当前为引脚中断提供服务与准备好执行另一个中断之间的长延迟。