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.

[参考译文] MSP430FR5969:MSP430FR5969 Timer B ISR 问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/603690/msp430fr5969-msp430fr5969-timer-b-isr-problem

器件型号:MSP430FR5969

大家好、我正在尝试使用 MSP430FR5969上的计时器 B0。 基本上、我想在引脚 P1.4、PIN1.5和 PIN3.4上使用 PWM。 我还希望每1ms 生成一个中断、以在将来执行一些任务。

我已经配置了微控制器、以使用 TBIFG。 如果 TBIE 被禁用、PWM 就会工作、但是当我启用中断(TBIE)以每1ms 生成一个中断时、TBIFG 被置位、但是微控制器不会进入中断例程。

这是我设置计时器的代码部分:

//计时器 B0:PWM


TB0CTL = TBSSEL_SMCLK |ID_1| MC_UP | TBCLR | TBIE; // SMCLK、向上计数模式、清零 TAR
TB0EX0 = TBIDEX_7; // DIV8:SO TIMER_CLK = SMCLK/8
TB0CCR0 = 2000; // PWM 周期1kHz/Tick 1ms 计时器
TB0CCTL1 = OUTMOD_7; // P1.4:CCR1重置/置
TB0CCR1 = 500; // P1.4:CCR1 PWM 占空比
TB0CCTL2 = OUTMOD_7; // P1.5:CCR2重置/置
TB0CCR2 = 1000; // P1.5:CCR2 PWM 占空比
TB0CCTL3 = OUTMOD_7; // P3.4:CCR3复位/置位
TB0CCR3 = 1500; // P3.4:CCR3 PWM 占空比

//中断
_bis_SR_register (GIE); //启用中断 




这个是 main:




#include 
#include 
#include "Setup.h"
#include "Screen_Nextion.h"
#include "otel_functions.h"

int main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器


Setup();


while (1)
{

SEND_Data_TO_PC ("aaa");
_delay_cycles (32000000);
SEND_Data_TO_PC ("BBB");
_DELAY_CYCLES (32000000);
}


}




// Timer0_B0中断

#pragma vector=TIMER0_B0_vector
__interrupt void TIMER0_B0_ISR (void)
{
switch (__even_in_range (TB0IV、TB0IV_TBIFG))
}{
案例 TB0IV_NONE: 中断;
案例 TB0IV_TBCCR1: 中断; // CCR1中断
案例 TB0IV_TBCCR2: 中断; // CCR2中断
案例 TB0IV_TBCCR3: 中断; //CCR3中断
案例 TB0IV_TBCCR4: 中断; // CCR4中断
案例 TB0IV_TBCCR5: 中断; // CCR5中断
案例 TB0IV_TBCCR6: 中断; // CCR6中断
案例 TB0IV_TBIFG:
P1OUT ^= BIT0;
中断; // TBIFG 中断
默认值:break;
}
我


还尝试使用捕获/比较中断(CCIE/CCIFG)代替 TBIFG 中断请求、所有操作都很好。

感谢
Riccardo



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

    TBIFG 使用 TIMER0_B1_ISR、而 CCIFG 使用 TIMER0_B0_ISR、您可以从数据表的表6-4中看到 TB0有两个不同的中断源、具体取决于请求的中断标志。 因此、您的代码调用了错误的 ISR 矢量、您也可以通过参考 TB0代码示例来查看这一点。

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

    您好!

    谢谢、这就是问题的原因。 我无法找到表6-4、可能我们有不同的数据表。 您能给我发送链接吗?

    非常感谢

    Riccardo

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

    此致、
    Ryan