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问题。 请查看下面的代码。 当我删除 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 之前将它们设置为已知值。