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:中断问题

Guru**** 2534260 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/580344/compiler-msp430g2553-problem-with-interrupts

部件号:MSP430G2553

工具/软件:TI C/C++编译器

大家好,

我有MSP430G2553 LaunchPad,我遇到中断问题。

我想写一个简单的程序,它可以使LED以~12.5 Hz频率闪烁,并通过按钮来启用/禁用闪烁。 这两种功能都将使用中断。 我写了简单的代码,但它在输入TIMER0_A1_Vector后永远不会消失。 请帮帮我。 提前感谢,我们提供了代码:

#include <msp430g2553.h>


void main (void)
{
WDTCTL = WDTPW + WDTHOLD;			//停止看门狗计时器
P1DIR |= BIT0 + BIT6;			// WFP 1.1 + WFP 1.6 二极管
P1DIR &=~BIT3;				// WFP 1.3 开关
P1OUT || BIT0 + BIT6;			//二极管开启

P1REN |= BIT3;				// WFP 1.3 上的电阻器
P1OUT || BIT3;				//向上拉

P1IE |= BIT3;				// WFP 1.3 interrupt enable (启用WFP中断)
P1IES || BIT3;				//高边到低边
P1IFG &=~BIT3;				//中断标志清除

//定时器A
TACTL = Tassel_2 + MC_1 + ID_3 + TAIE;	// TIE激活中断,Tassel_2 SMCLK - 1MHz,MC_1 UP模式,ID_3 1MHz/8 = 125kHz

//计时器0
TA0CCR0 = 5万;				// 125kHz / 5万 = 2.5Hz -> 400ms
TA0CCTL0 = CCIE;				// TA0CCR0中断已激活

_BIS_SR(LPM0_bits + GIE);			//使用中断启用进入LPM0

}


#pragma vector=TIMER0_A0_vector			//计时器中断
__interrupt void Timer_a (void)

{
P1OUT ^= BIT0 + BIT6;				//切换二极管
}


#pragma vector=TIMER0_A1_vector			// Timer


_中断void Timer_BAA_0
^ 				//切换二极管
}


#pragma vector=Port1_vector			//交换机中断
__interrupt void Port_1(void){

CCTL0 ^= CCIE;				//启用切换CCTL0中断
P1OUT ^= BIT0 + BIT6;
P1IFG &=~BIT3;				//中断标志清除
}

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

    第一个中断只能由CCR0引起,因此执行该中断会自动清除中断标志位。

    第二个中断有许多可能的源。 代码必须清除其实际处理的源代码的中断标志位。 或者,使用TA0IV寄存器检查中断源;读取它会自动清除它返回的源的标志。

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

    我试着补充
    TA1CCTL0 &=~CCIFG;
    在42行之后,但它不起作用。
    我认为由交互设备(如计时器)引起的中断会自动清除标志。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    只有几个中断会自动清除其标志。 您还设置了TAIE,因此TAIFG可能是使ISR保持活动状态的位。 为什么同时有两个计时器中断? 我认为TAIE在这里是没有必要的。 请记住,输入按钮将会弹出,并会生成多个中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我删除了TAIE,它现在运行良好。 非常感谢! :)
    我认为TAIE对于激活不同的计时器中断是必要的。 再次感谢! :)