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.

[参考译文] CCS/MSP430FR5994:如果我们在 LPM3中关闭 RAM 保持、RAM 是否会在退出 LPM3后自动初始化为0

Guru**** 2526700 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/894491/ccs-msp430fr5994-if-we-turn-off-ram-retention-in-lpm3-does-the-ram-automatically-get-initialized-with-0-after-exiting-lpm3

器件型号:MSP430FR5994

工具/软件:Code Composer Studio

我正在调查 RAM 剩余容量。 我了解到、在 LPM3中、我们可以通过在 RCCTL0中为特定 RAM 扇区设置 RSxOFF=1来关闭 RAM 保持。 因此、该扇区中的数据将在 LPM3期间丢失。 但是、一旦系统退出 LPM3、RAM 会发生什么情况? 有两种可能的结果。  

(案例1)它只是显示为它的样子。 如果我们以二进制形式查看 RAM、它应该由零和一组成、因为每个 SRAM 单元可以随机翻转为1或0。

(案例2)一旦退出 LPM 并且扇区再次上电、系统将自动初始化扇区0。

我做了实验、结果显示案例2是我所发生的情况。  系统用0自动初始化扇区。

int main (void){

WDT_A_HOLD (WDT_A_base);
initClock();
initGPIO();


////*在 LPM3中禁用 RAM 保持*/
RAM_setSectorOff (RAM_SECTOR2、RAM_OFF_ON_WAKEUP_MODE);


initTimer_WakeupLPM ();//将计时器设置为运行1秒,它将通过中断退出 LPM3
Timer_A_startCounter (timer_A1_base、timer_A_up_mode);//启动计时器
_bis_SR_register (LPM3_bits + GIE);//输入 LPM

__no_operation();//检查内存浏览器中扇区2的 RAM 内存


返回(0);
}//

计时器函数,initClock(),initGPIO()…… 

如何使案例1发生? 我需要研究 RAM 剩余的行为、因此我需要案例1的结果。  

谢谢、

Yubo

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

    我观察到的是案例1。 我的顺序是:

    1) 1)加载了 msp430fr599x_lpm3_03的副本并运行该副本、直到 LED 闪烁。 我更改了链接器.cmd 以将段 RAM 缩小到0x800字节、从而将堆栈移动到扇区0 (释放扇区1)。

    2)暂停时、I (a)设置 RCCTL0=0x5A04、即 RS1OFF = 1 (b)使用内存浏览器在0x2400中键入内容、然后继续。

    3) 3)在下一次暂停时、我看到0x2400已更改为明显是随机位。

    为了确保这一点、我重复了(2)-(3)、但保留了 RCCTL0=0x5A00和0x2400。 我尝试了几次每一个测试案例、以确保我不会感到幻觉。

    我不确定有何区别。 我要提到、扇区2是 LEA RAM。 我不知道为什么这会起作用、但这就是我没有使用它的原因。

    此外、您要设置 RS2OFF=2、而不是1、这将使其在 LPM3之后不上电。 我想知道内存浏览器是否有问题。

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

    您好、Bruce、

    你是对的。 我使用了错误的命令来关闭扇区。  

    应该是这样  

    RAM_setSectorOff (RAM_SECTOR2、RAM_OFF_WAKEUP_MODE);// RAM_OFF_NON_WAKEUP_MODE 错误 

    我得到的结果与你的结果相同。 第2区也起作用。  

    谢谢、

    Yubo