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:P2.3上的引脚更改中断

Guru**** 2573695 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/692491/msp430g2553-pin-change-interrupt-on-p2-3

器件型号:MSP430G2553

您好!

我使用的是 MSP430G2553、特别是 MSP430G2253IPW28 - TSSOP28引脚封装。

我所面临的问题是、一个连接到引脚 P2.3的按钮。

该引脚上没有外部上拉电阻、仅在配置时启用内部上拉电阻。

程序配置了 port2_vector。

但没有中断中断中断点命中。

在高电平有效配置中、引脚 P1.0上连接了一个 LED、用于指示中断的发生。

下面是我尝试执行的主代码段:

// P1.0 LED 高电平有效/低电平
有效//带有#include 上拉的 P2.3按钮输入



int main (void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器

BCSCTL1 = CALBC1_1MHz; 针对 O.
DCOCTL = CALDCO_1MHz 的//设置范围; //设置 DCO 阶跃调制1MHz

P1DIR = 0x01; // P1.0输出、否则输入
P1OUT = 0x0; // P1.0 LED 关闭

P2DIR &=~BIT3; // P2.3输入
P2REN |= BIT3; // P2.3上拉
P2SEL &=~BIT3;
P2SEL2&=~BIT3;
P2OUT |= BIT3; // P2.3设置

__disable_interrupt ();
P2IES |= BIT3; // P2.3高/低边沿
P2IFG &=~BIT3; // P2.3 IFG 清除
P2IE |= BIT3; // P2.3中断被启用

while (1)
//_bis_SR_register (LPM4_BITS + GIE); //输入 LPM4、带中断
_bis_SR_register (GIE);
}

//端口2中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=port2_vector
__interrupt void Port_2 (void)
#Elif defined (__GNU__)
___attribute COMPIAR (void Port2_vector

)(void)(void Port2_vector 2)(void!)(void Port 2 (void)(void)(void!)(void!
#endif
{
P1OUT ^= 0x01; // P1.0 = TOGGLE
P2IFG &=~BIT3; // P2.3 IFG 清零
} 

我想知道 P2.3的初始化或配置是否有错误。

此致、

AB

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

    它看起来与您的代码不符。 请使用"使用语法加载器插入代码"按钮以正确的格式粘贴您的代码。 然后、我来看看您的配置是否有任何问题。

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

    添加缺失的代码

    // P1.0 LED 高电平有效/低电平
    有效//带有#include 上拉的 P2.3按钮输入
    
    
    
    int main (void)
    {
    WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器
    
    BCSCTL1 = CALBC1_1MHz; 针对 O.
    DCOCTL = CALDCO_1MHz 的//设置范围; //设置 DCO 阶跃调制1MHz
    
    P1DIR = 0x01; // P1.0输出、否则输入
    P1OUT = 0x0; // P1.0 LED 关闭
    
    P2DIR &=~BIT3; // P2.3输入
    P2REN |= BIT3; // P2.3上拉
    P2SEL &=~BIT3;
    P2SEL2&=~BIT3;
    P2OUT |= BIT3; // P2.3设置
    
    __disable_interrupt ();
    P2IES |= BIT3; // P2.3高/低边沿
    P2IFG &=~BIT3; // P2.3 IFG 清除
    P2IE |= BIT3; // P2.3中断被启用
    
    while (1)
    //_bis_SR_register (LPM4_BITS + GIE); //输入 LPM4、带中断
    _bis_SR_register (GIE);
    }
    
    //端口2中断服务例程
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=port2_vector
    __interrupt void Port_2 (void)
    #Elif defined (__GNU__)
    ___attribute COMPIAR (void Port2_vector
    
    )(void)(void Port2_vector 2)(void!)(void Port 2 (void)(void)(void!)(void!
    #endif
    {
    P1OUT ^= 0x01; // P1.0 = TOGGLE
    P2IFG &=~BIT3; // P2.3 IFG 清零
    }
    
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、 请查看发布的代码。 由于发布代码时出现一些问题、因此未显示。 此致、 Ab
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将其放置在(G2) Launchpad 上并将 P1.3跳线连接到 P2.3、当我按下(P1.3)按钮时 LED 亮起。

    您的按钮是如何连接的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    P2.3直接连接到按钮。 按钮的另一侧有接地端。 P2.3上无上拉电阻。
    P2.3 -(按钮)-GND
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    还可以在 LaunchPad 上使用 PDIP-28引脚版本来运行。 但采用 TSSOP-28封装时、其无法正常工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    (修订版1.5) Launchpad 也没有 P1.3上的上拉电阻(我的 R34不存在)、因此我希望内部的上拉电阻足够。

    按下按钮时、您是否可以看到 P2IN.3变为低电平?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、在实际 PCB 和 Launch Pad 上、按下按钮后测得的电压均达到0。
    有趣的是、在两种情况下都可以观察到从3.2V 到0V 的电压摆幅。 但只有在 Launch Pad 上它才起作用。 在我们的 PCB 上、按钮和芯片之间没有组件。 它是直接连接。 另一种可能是 P2.3可能会在芯片上损坏。 我们将通过尝试向 LED 输出以检查引脚上的电平来测试该情况。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题终于得到解决。 P3.4和 P2.3之间有一根小束导线、导致电平变化。 在我们对芯片进行解焊并移除芯片下方的短接后、代码就可以正常工作了。 感谢大家的帮助。