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.

[参考译文] LP-MSP430FR2476:LP-MSP430FR2476、通过 USB 连接时运行

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1348383/lp-msp430fr2476-lp-msp430fr2476-operation-when-connected-via-usb

器件型号:LP-MSP430FR2476

#include "driverlib.h"

void main (void)
{
    //Stop watchdog timer
    WDT_A_hold(WDT_A_BASE);

    //Set LED1 to output direction
    GPIO_setAsOutputPin(GPIO_PORT_P5,GPIO_PIN0);
    GPIO_setOutputHighOnPin(GPIO_PORT_P5,GPIO_PIN0);

    //Enable S1 internal resistance as pull-Up resistance
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2,GPIO_PIN3);

    //S1 interrupt enabled
    GPIO_enableInterrupt(GPIO_PORT_P2,GPIO_PIN3);

    //S1 Hi/Lo edge
    GPIO_selectInterruptEdge(
            GPIO_PORT_P2,GPIO_PIN3,
        GPIO_HIGH_TO_LOW_TRANSITION
        );


    //S1 IFG cleared
    GPIO_clearInterrupt(GPIO_PORT_P2,GPIO_PIN3);

    PMM_unlockLPM5();

    //Enter LPM3 w/interrupt
    __bis_SR_register(LPM3_bits + GIE);

    //For debugger
    __no_operation();
}


//******************************************************************************
//
//This is the PORT2_VECTOR interrupt vector service routine
//
//******************************************************************************
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=PORT2_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(PORT2_VECTOR)))
#endif
void P2_ISR (void)
{
    //LED1 = toggle
    GPIO_toggleOutputOnPin(GPIO_PORT_P5,GPIO_PIN0
        );

    //S1 IFG cleared
    GPIO_clearInterrupt(GPIO_PORT_P2,GPIO_PIN3
        );
}

在评估板上调试上述程序时、
单击"Resume"
LED (绿色)亮起、因为它设置为 GPIO_setOutputHighOnPin (GPIO_PORT_P5、GPIO_PIN0);。
之后、当我输入 P2.3时、它进行切换、但
调试后、当我拔下 USB 并重新连接时、LED (绿色)不亮。 如果您输入 P2.3、则会激活扭矩。
当您连接 USB 和电源时、
我认为已设置 GPIO_setOutputHighOnPin (GPIO_PORT_P5、GPIO_PIN0);并且 LED 亮起。
为什么它不点亮?
顺便说一下、设置 GPIO_setOutputLowOnPin (GPIO_PORT_P5、GPIO_PIN0);将执行相反的操作。 (通过 USB 连接时 LED 亮起)

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

    简单总结:
    如果设置 GPIO_setOutputHighOnPin (GPIO_PORT_P5、GPIO_PIN0);、则在连接到 USB 时 LED 不会亮起。
    当您输入 P2.3时、LED 会亮起/熄灭、程序正常运行。
    如果设置 GPIO_setOutputLowOnPin (GPIO_PORT_P5、GPIO_PIN0);、则 LED 将在连接到 USB 时亮起。
    当您输入 P2.3时、LED 会亮起/熄灭、程序正常运行。

    在调试之后、当您"Resume"时、
    当设置为 GPIO_setOutputHighOnPin (GPIO_PORT_P5、GPIO_PIN0)时、LED 亮起。 当设置为 GPIO_setOutputLowOnPin (GPIO_PORT_P5、GPIO_PIN0);时、LED 不亮起。

    调试后、我认为当我选择"Resume"时行为是正确的、而当连接到 USB 时行为是错误的。 为什么会发生这种情况?

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

    用户指南(SLAU445I)第8.3.1节规定了寄存器初始化的顺序。 特别是、它说在清零 LOCKLPM5后清零 IFG 和置位 IE。

    当我忘记它时、有时会看到不一致的行为、但由于它在规范之外运行、因此在任何地方都无法描述。 部分原因可能是 POR 和调试器复位(看起来更像是 PUC)之间的区别。

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

    PMM_unlockLPM5 ();

    GPIO_clearInterrupt (GPIO_PORT_P2、GPIO_PIN3)

    GPIO_enableInterrupt (GPIO_PORT_P2、GPIO_PIN3)

    我是否应该按照上面的顺序编写代码?

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

    是的、看起来很好。