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.

[参考译文] MSP430G2553:在同一引脚上处理多个中断(MSP430G2553)

Guru**** 2529120 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/976577/msp430g2553-multiple-interrupts-handling-on-same-pin-msp430g2553

器件型号:MSP430G2553

你(们)好  

我们必须在 MSP430G2553中编写一个代码、因此我们将 P2.3引脚分配为中断源(即硬件中的按钮(SPST 模型))。

因此、在第1次高/低转换期间、我们需要使 P2.2变为高电平

对于下 一个高/低转换、我们需要将 P2.4设置为高电平

和下一个高/低转换、我们需要将 P2.5设为高电平

&对于上一 个高/低转换、我们需要使 P2.2、P2.4、P2.5为低电平、并且这个周期持续重复。  

下面是它的代码、但它仅在重复按下后使一个引脚为高电平。

请指导我们解决此问题。

#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
#pragma vector=port2_vector
__interrupt void Port_2 (void)
#elif defined (__GNU__)
void __attribute__((interrupt (port2_vector))) Port_2 (void)#else

not supported!
#endif
{
portCtl (&P2OUT、P22、ENABLE);
portCtl (&P2OUT、P24、ENABLE);
portCtl (&P2OUT、P25、ENABLE);

P2IFG &=~PIRINT; // P2.3 IFG 清零

} 

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

    Phanendra、您好!

    如果有中断、您将始终运行以下代码。  

      portCtl(&P2OUT,P22,ENABLE);
      portCtl(&P2OUT,P24,ENABLE);
      portCtl(&P2OUT,P25,ENABLE);
    谢谢!
    此致
    Johnson
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     尊敬的 Johnson:

    现在我已经在 ISR 中使用了 if else 循环语句、并且运行正常、但我的问题是由于开关按压的去抖、它有时会跳过状态。

    但根据数据表 MSP430G2553、它具有内置的机制控制功能、可避免去抖、但这种情况并非如此。

    我们应该在两者之间使用延迟计时器来控制它。

    请您对此进行指导。  

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

    Phanendra、您好!

    如果在输入功能中将 GPIO 用于通用 IO 模式、则没有器件内部去抖或滤波功能、因此您需要在 ISR 内部实现延迟、或者添加带有电容的外部引脚滤波以防止反弹效应。

    我想、当您提到去抖效应时、您会提到引脚振荡器功能、但这不是 GPIO 输入去抖功能、只能用于数据表 IO 原理图和用户指南中所述的二次电容式感应功能。