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.

[参考译文] CCS/MSP430FR2311:GPIO 中断引脚2.6 LPM

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/676404/ccs-msp430fr2311-gpio-interrupt-pin-2-6-lpm

器件型号:MSP430FR2311

工具/软件:Code Composer Studio

我正在尝试让 Launchpad 进入 LPM3、除非它从引脚2.6 (我打开了一个 LED、这样我就可以在 LaunchPad 上看到它)接收到高电平信号(3.3V)、这是一个 GPIO 中断引脚。
我已将引脚2.6连接到来自 XBee 模块的 ON 信号。 不确定我是否正确设置了中断矢量。提前感谢。

 

 

#include 

int main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
//禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
P1DIR |= BIT1;//将 P1.0设置为输出方向


P2DIR &=~BITES
&=~BITES 6;=
~BITES 6;& BITEN = P2IT // P2.6低/高边沿
P2IE |= BIT6;
P2IFG &=~BIT6;
__bis_SR_register (GIE); //全局中断使能


}

//端口2中断服务例程
#pragma vector=port2_vector
__interrupt void Port2_ISR (void)
{

P2IFG &=~BIT6;//清除 P2.6 IFG
P1OUT |= BIT0;//在

__BIC_SR_REGISTER_ON_EXIT (LPM3_BITS)上打开 LED;//退出 LPM3
}

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

    您好、Sparrow、

    //#include 
    //
    /// int main (void)
    //{
    // WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
    /////////禁用 GPIO 上电默认高阻抗模式
    ////激活先前配置的端口设置
    // PM5CTL0 &=~LOCKLPM5;
    // P1DIR |= BIT0; //将 P1.0设置为输出方向
    //
    
    //// P2DIR &=~BIT6;
    // P2REN &=~BIT6;
    // P2IES &=~BIT6;// P2.6 Lo/High EDGE
    // P2IE |= BIT6;
    // P2IFG &=~BIT6;
    //_BIES_SR 寄存器(GIE_SR); //全局中断使能
    //
    
    ////}
    //
    ////////端口2中断服务例程
    //#pragma vector=port2_vector
    //中断 void Port2_ISR (void)
    //{
    //
    // P2IFG &=~BIT6;//清除 P12.6
    |= BIT0;// pMM_3;//#pMM_EXIT
    
    
    // LPM3;// LPMIC_EXIT
    
    
    
    
    int main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    
    //配置 GPIO
    P1OUT &=~BIT0; //清除已定义加电状态的 P1.0输出锁存器
    P1DIR |= BIT0; //将 P1.0设置为输出方向
    
    P2OUT &=~BIT6; //将 P2.6配置为下拉
    P2REN |= BIT6; // P2.6下拉寄存器使能
    P2IES &=~BIT6; // P2.6低边沿/高边沿
    P2IE |= BIT6; // P2.6中断被启用
    
    //禁用 GPIO 上电默认高阻抗模式
    //激活先前配置的端口设置
    PM5CTL0 &=~LOCKLPM5;
    
    P2IFG &=~BIT6; // P2.6 IFG 被清零
    
    while (1)
    {
    _bis_SR_register (LPM3_bits | GIE);//输入 LPM3、带中断
    __no_operation(); //用于调试
    
    }
    }
    
    //端口2中断服务例程
    #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)))#else
    
    !错误端口2!
    #endif
    {
    P2IFG &=~BIT6; //清除 P2.6 IFG
    P1OUT ^= BIT0; // P1.0 =切换
    __BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//退出 LPM3
    }
    
    

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的回答。 这为我清除了如何设置下拉电阻器。

    但是、每当我运行此代码并对引脚2.6施加3.3V 电压时、它都会在每个其他上升沿打开 LED (而不是将其切换)。 我希望它在施加3.3V 电压时打开、而 LED 在施加3.3V 电压时关闭。

    有没有解决方案可以说明它为什么可能读取每一个其他上升沿?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想"彼此"效应来自

    > P1OUT ^= BIT0; // P1.0 =切换

    我想您可以随意将其替换为您选择的代码。 一种可能是在 P2IES 中反转中断检测、也许是在一些去抖之后。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的

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

    [引用 user="Sparrow Tech)]非常感谢您的响应。 这为我清除了如何设置下拉电阻器。

    但是、每当我运行此代码并对引脚2.6施加3.3V 电压时、它都会在每个其他上升沿打开 LED (而不是将其切换)。 我希望它在施加3.3V 电压时打开、而 LED 在施加3.3V 电压时关闭。

    有没有解决方案可以说明它为什么可能读取每一个其他上升沿?

    [/报价]

    #include 
    
    int main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    
    //配置 GPIO
    P1OUT &=~BIT0; //清除已定义加电状态的 P1.0输出锁存器
    P1DIR |= BIT0; //将 P1.0设置为输出方向
    
    P2OUT &=~BIT6; //将 P2.6配置为下拉
    P2REN |= BIT6; // P2.6下拉寄存器使能
    P2IES &=~BIT6; // P2.6低边沿/高边沿
    P2IE |= BIT6; // P2.6中断被启用
    
    //禁用 GPIO 上电默认高阻抗模式
    //激活先前配置的端口设置
    PM5CTL0 &=~LOCKLPM5;
    
    P2IFG &=~BIT6; // P2.6 IFG 被清零
    
    _bis_SR_register (GIE);
    
    while (1)
    {
    // _bis_SR_register (LPM3_bits | GIE);//输入 LPM3、带中断
    __no_operation(); //进行调试
    
    if (!(P2IN&BIT6))
    P1OUT &=~BIT0;
    
    }
    }
    
    //端口2中断服务例程
    #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)))#else
    
    !错误端口2!
    #endif
    {
    P2IFG &=~BIT6; //清除 P2.6 IFG
    P1OUT |= BIT0; // P1.0 = 1
    //__BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//退出 LPM3
    }