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.

[参考译文] MSP430FR2422:RTC 运行不正常--如何?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/958397/msp430fr2422-rtc-not-behaving-----how-to

器件型号:MSP430FR2422

我有一个应用程序要引导到 LPM3中,P1.1作为开关启用....按下此开关后,我希望 PWM 运行,并每秒启用一次 RTC。  我退出 P1中断仍处于睡眠状态。  希望在100秒后 RTC 中的计数器能够识别这一情况并将器件置于 LPM3.5模式。  从3.5开始时、我尝试清除 PMMREGOFF 并强制掉电、这会使我回到"正常"模式。  这似乎没有正确发生……按下按钮后,下面的代码启动 PWM,然后在 LED 闪烁大约2秒钟后,代码将保持亮起状态。  我发现使用这个 LPM3.5/RTC 非常困难。  我一直在尝试暂停调试器以重新启动、但 CCS 将不会这样做、并且往往会锁定。  有人能给我一些建议吗?我在代码中做错了什么?为什么 CCS 一直想锁定?  BTW。 此部分下的 RTC #2程序与 Resource Explorer 下的程序类似。  我只需将 IO 更改为 IO 即可剪切和粘贴、CCS 仍会停止运行。  我已经将 RTC #1程序载入到电路板上、并且工作正常(每秒钟它只会切换 RTC 中的 IO)。

我最终想在 PWM 结束后进入 LPM3 (我的理解是、PWM 在 LPM3下无法工作)、然后重新启动到仅具有极低功耗的状态、即3.5、直到有人再次按下按钮。

谢谢

按下暂停时、CCS 会以以下方式响应:

MSP430:停止目标 CPU 时出现问题:内部错误

#include 
#include "funct.h"

volatile unsigned int count;
volatile unsigned int flag = 0;

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

//闪存 LED 的小宏显示复位已发生。
configGPIO();
PM5CTL0 &=~LOCKLPM5;
_delay_cycles (80000);
P1OUT &=~BIT4;
CONFIGACLK ();
IF (SYSRSTIV = SYSRSTIV_LPM5WU){//从 LPM3.5唤醒?
标志= 0;
configGPIO();
PMMCTL0 = PMMPW;
PMMCTL0 &=~PMMREGOFF;//清除 LPM3.5位
PMMCTL0 |= PMMSWBOR;//强制重新启动至正常
状态}
否则{//no?
_bis_SR_register (LPM3_bits + GIE);//LPM3.5入口点
}
返回0;
}

#pragma vector = RTC_vector
__interrupt void 第三个计数器(void)
{
switch (__evo_in_range (RTCIV、RTCIV_RTCIF))
{
案例 RTCIV_NONE:break; //无中断挂起
案例 RTCIV_RTCIF: // RTC 溢出
count++;
如果(计数>= 100)
{
计数= 0;
PMMCTL0 = PMMPW;//打开 PMM 寄存器进行写入
PMMCTL0_L |= PMMREGOFF;//设置 LPM3.5
}
中断;
默认值:
中断;
}
}

#pragma vector = Port1_vector
__interrupt void ifNonLPM3_5 (void)
{
开关(__evo_in_range (P1IV、4))
{
案例4://P1.1
CONFIGTA0_PWM (16384、4);//3276
CONFIGRTC (33);//1800
中断;
默认值:
中断;
}
} 

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

    我不太理解为什么你在从 LPM3.5重新启动后做 BOR --我很确定你已经处于"正常"模式。 我认为示例 msp430fr235x_lpm3_5_01.c 显示了这一点、但它并不是很有教育意义、因为它没有其他有趣的事情可以做。

    请记住、您的变量(count 和 flag)在唤醒时返回0。

    未经请求:我从未看到有人通过"返回"LPM3进入 LPM3.5。 我看不到它不起作用的任何原因。 另一方面(老牌和玩世不恭)我对任何一个没有尝试过的建筑都有点警惕(我怀疑)。 只需注意它、就这些了。

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

    布鲁斯······

    我从另一个线程复制了这个… 这是我最终想要做的,但我不确定我能做什么……我想复制一个变量来备份内存……请参阅下面的问题…

    让我问你这个…

    我是否应该能够执行以下操作?

    加电时、等待开关被按下。  按下开关后、PWM 将运行一段时间(这由 RTCIV 中的计数器控制)。  在 RTCIV 内的这一时间到期后、我将通过设置 PMMREGOFF 来调用 LPM3.5。  我想再次通过使用之前按下的同一开关来唤醒、在此操作中、我希望 RTCIV 计数到一个不同的值。  例如、您按下1.4、PWM 将运行1/2小时、然后我进入 LPM3.5的时间非常长、比如说50小时(假设所有 RTC 寄存器保持不变(即30分钟中断)、它只是一个在这里发生变化的计数变量)。  在 LPM3.5 运行且您处于50小时窗口的同时、我希望按下1.4来唤醒您并再次打开 PWM。   

    问题:

    上述操作是否可以在代码中执行、或者 RTC 是否允许我执行此操作?

    在进入 LPM3.5之前、我是否必须使用某种形式的*(unsigned int *) BKMEM_BASE、如果需要、如何使用它?  (我关心 P1.4有一个下拉电阻并且具有中断功能)

    我的下一个问题是、如果 RTCIV 中有一个计数变量、如何将该值存储到备用存储器中、以便当我从 LPM3.5中退出时?

    谢谢

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

    你(们)好

    也许本文档可以帮助您完成此应用

       

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

    您好、Gary。。。

    这看起来很有趣...我会看这个

    谢谢你