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.

[参考译文] MSP430FR2311:MSP430FR2311计时器 B 仅在 RTC_ISR 处于活动状态时有效!?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1267737/msp430fr2311-msp430fr2311-timer-b-only-works-if-rtc_isr-is-active

器件型号:MSP430FR2311
主题中讨论的其他器件: MSP430WARE

您好!

我遇到了 MSP430FR2311问题。 请查看下面的代码。 当我删除 RTC ISR pragma 时、从不调用 TimerB ISR (!)。

#include <msp430.h>

#define PIN_LCD_LED     BITD // P2.5

int main(void)
{
    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

    PADIR=0xFFFF;
    PM5CTL0 &= ~LOCKLPM5;

    TB0CCTL0 = CCIE; // TBCCR0 interrupt enabled
    TB0CCR0 = 4096;   // Counter setpoint
    TB0CTL = TBSSEL__SMCLK | MC__UP | ID__8; // SMCLK divided by 8, up mode

    __bis_SR_register(LPM0_bits + GIE);
}

#pragma vector=RTC_VECTOR // PROBLEM: When I remove this line, timer B stops working
__interrupt void RTC_ISR(void)
{ }

#pragma vector = TIMER0_B0_VECTOR
__interrupt void ISR_Timer0_B0 (void)
{
   PAOUT ^= PIN_LCD_LED;
}

什么地方出错了?

我已经尝试恢复使用最基本的 MSP430WARE 寄存器级示例(例如 https://dev.ti.com/tirex/explore/node?node=A__ABV6wTFA5RMv5eEOQmi4Ig__msp430ware__IOGqZri__LATEST)、但这同样不起作用。 是否 CPU 中的某个寄存器已损坏...?

此致、

尤斯图斯

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

    好的、似乎 RTC 相关寄存器有一些奇怪的值。我希望在上传程序时寄存器复位为默认值。

    1.但可能这是一个特殊的设置(在上传时强制"恢复出厂设置")?

    2、什么原因会导致上传后此类寄存器值(RTC、端口设置等)被保留?

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

    调试器复位不会复位 RTC (这是一项功能)。 其中包括 RTCIE。

    我猜测是您运行的一个程序使用了 RTC (并设置 RTCIE)、然后运行的另一个程序没有。

    下电上电将复位 RTC。 必要时、添加"RTCCTL=0;"之类的内容作为程序的第二行。

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

    如果您需要不带 RTC 的计时器 b、请尝试  在 https://www.ti.com/tool/download/SLAC708上运行 msp430fr231x_tb0_01和 msp430fr231x_tb0_02示例代码 

    谢谢

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

    太棒了! 谢谢澄清布鲁斯,很高兴知道根本原因。 您是正确的、之前使用 RTC 的程序和 MCU 被调试器复位。

    端口设置(PAOUT)也不正确。 我注意到它们与前一个程序中使用的值不匹配(看起来像垃圾数据)。 有什么线索可能导致这种情况吗?

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

    你好,布鲁斯  

    感谢您对 根本原因的解释!

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

    复位后 PxOUT 寄存器中未定义的内容[参考 UG (SLAU445I)表8-4]。 最佳做法是在设置 PxDIR 之前将它们设置为已知值。