请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2311 工具/软件:Code Composer Studio
我正在尝试设置一个中断、以便在 P2.2的下降沿转换时触发。 为了进行测试、我从 msp430fr231x_P1_03示例代码开始、该示例代码用于触发来自 P1.3的中断并将设置复制到 P2.2。 我已在调试器中签入、当按下按钮时 P2IN 寄存器正在改变。 我还尝试通过软件设置 P2IFG、成功地触发 P2中断。 问题是当按下按钮时、P2IFG 寄存器未被置位。
我哪里出错了? 这应该是一件非常简单的事情。
#include int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 //配置 GPIO P1OUT &=~BIT0; //清除已定义加电状态的 P1.0输出锁存器 P1DIR |= BIT0; //将 P1.0设置为输出方向 P1OUT |= BIT3; //将 P1.3配置为上拉 P1REN |= BIT3; // P1.3上拉寄存器使能 P1IES |= BIT3; // P1.3高/低边沿 P1IE |= BIT3; // P1.3中断被启用 P2OUT |= BIT2; P2REN |= BIT2; P2IES |= BIT2; P2IE |= BIT2; //禁用 GPIO 上电默认高阻抗模式 //激活先前配置的端口设置 PM5CTL0 &=~LOCKLPM5; P1IFG &=~BIT3; // P1.3 IFG 被清零 P2IFG &=~BIT2; while (1) { _bis_SR_register (LPM3_bits | GIE);//输入 LPM3、带中断 __no_operation(); //进行调试 P1OUT ^= BIT0; // P1.0 =切换 } } //端口1中断服务例程 #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__) #pragma vector=Port1_vector __interrupt void Port_1 (void) #Elif defined (__GNU__) void __attribute__((interrupt (port1_vector))#if Compiler_1 (void! )#void Port 1 (void!) #endif { P1IFG &=~BIT3; //清除 P1.3 IFG //P2IFG |= BIT2;//测试以查看中断是否由软件触发 __BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//退出 LPM3 } #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__) #pragma vector=port2_vector __interrupt void Port_2 (void) #elif defined (__GPort1_COMPRESU_ (void)(void Port1)(void)(void Port1)(void)(void Port1)(void Port1)(void (void 1)(void Port1) (void (void 1) #endif { P2IFG &=~BIT2; //清除 P2.2 IFG __BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//退出 LPM3 }