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.

[参考译文] MSP430F5326:为什么计时器不计数或生成中断?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/573411/msp430f5326-why-doesn-t-the-timer-count-up-or-generate-an-interrupt

部件号:MSP430F5326

这应该是一个简单的问题:

我正在使用Timer_A模块生成计数计时器并与TA0CCR1寄存器进行比较。 代码如下:

	TA0CTL = TASEL1 + ID0 + MC0 + TAIE;	// SMCLK/2 UP模式
	TA0CCTL1 = CCIE;						//比较中断
	TA0EX0	= TAIDEX_4;					//(SMCLK/2)/5 = SMCLK/10
	TA0CCR1 =比较值;				// SMCLK/CTRL数目
	= TA0CLK/延迟TAL= TAN10 

下面是中断处理程序:

#pragma vector = TIMER0_A1_Vector
__interrupt void Timer(void)
{
	SWITCH(TA0IV)//假定自动清除标记
	{
		CASE TA0IV_TACR1:
			LED_OUT ^=(LED_OUT & GREG_LED);
			break;
		CASE TA0IV_none :
		default:
			break
	;}}


但是,处理程序中的断点不会触发,并且在Code Composer中查看寄存器后,TAxR寄存器从不会更改0x0000...in,其他单词也不会开始计数。 我确信它正在获取源时钟。  

我缺少什么?

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

    是否启用了全局中断? BTW:TAIE是另一个中断。 我现在不知道时钟设置(没有可用的文档),但我记得tassel_2通常是SMCLK。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦,是的,克莱门斯是对的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我确实启用了中断。 我已验证在SR中设置了GIE。

    此外,TASSEL1是 0x0200的#define,它与tassel_2等效。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的,我认为TSSEL1和tassel_2是一样的。 另一个原因是MC0不等于MC_0,因此MC0应为MC_1。 但必须更详细地了解它。 不幸的是,今天不是。 您能否发布完整的代码?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,我想我在发现文档中的细微之处后才发现了问题。

    我需要一个“向上”计数器而不是“连续”计数器,但是我想使用TA0CCR1来保存该值。 事实证明,只要启动计时器,TA0CCR0是唯一可以在UP模式下使用的寄存器。 因此,如果要使用TA0CCR1-5,还必须确保将TA0CCR0设置为大于或等于TA0CCR1-5的值。