跳到主要内容

如何保持RTC在深度睡眠模式下工作

一个月前

如何保持RTC在深度睡眠模式下工作

过帐人布伦特•郑75分 9个答复
0票以上

尊敬的先生:,

我的产品每天要用几次。所以我想把它投入深度睡眠(ramoff)并保持RTC计数一次空闲。

问题是系统唤醒时RTC日历/时间寄存器为零。我已经正确设置了PD\U TIM。

你能帮我解决这个问题吗,非常感谢!

一个月前

PM\U对话框

你好,布伦特•郑,

谢谢你的在线提问。我建议首先检查SDK6.0.14中的邻近报告程序项目和我们的“睡眠模式”教程。链接如下:

http://lpccs-docs.dialog-semiconductor.com/DA14531_Sleep_Mode+/deepsleep_config.html

DA14531能够通过RTC从深度睡眠模式中唤醒。检查我们的第9步:

要使用RTC(实时时钟)计时器进行唤醒,请定义CFG\u DEEP\u SLEEP\u WAKEUP\u RTC并取消对其余唤醒机制的定义。

如果您还有任何问题,请告诉我们。

谢谢,下午好

一个月前

布伦特•郑 75分

尊敬的先生:,

谢谢你的快速回答。是的,我用的是Prox reporter项目。当我定义CFG\u DEEP\u SLEEP\u WAKEUP\u RTC时,系统可以在10秒内从DEEP SLEEP唤醒。但我的问题是如何保持RTC日历/时间寄存器唤醒后。我调用了rtc\u get\u time\u bcd(),当系统从深度睡眠中唤醒后,返回值为零。

谢谢。

一个月前

布伦特•郑 75分

尊敬的先生:,

进入深度睡眠前的寄存器数据:

PMU\u CTRL\u REG:0
时钟分区寄存器:40c8
RTC\u控制\u寄存器:0
RTC\u事件\u标志\u注册表:0
RTC\时间\注册号:80000001
RTC\U日历\U REG:a021010d
RTC\u KEEP\u RTC\u REG:1

通过RTC\u INTR\u MIN事件从深度睡眠中唤醒后:

PMU控制\U寄存器:2
时钟\u RTCDIV \u寄存器:0
RTC\u控制\u寄存器:0
RTC\u事件\u标志\u注册表:0
RTC\u时间\u寄存器:0
RTC\u日历\u注册表:0
RTC\u KEEP\u RTC\u REG:0

RTC似乎在深度睡眠中工作,但有人在唤醒过程中清除或重置了这些寄存器。你能帮我检查一下吗?

谢谢。

一个月前

PM\U对话框

你好,布伦特•郑,

抱歉耽搁了。让我查一下,我会尽快给你答复。

谢谢,下午好

一个月前

PM\U对话框

你好,布伦特•郑,

如果要在DA14531唤醒时保持RTC值,应使用扩展睡眠模式。在这种模式下,所有RAM块都被保留(默认配置),因此寄存器不会被重置。

当DA14531唤醒时,应用程序代码将立即开始执行,并且不会丢失任何数据。

SDK6.0.14.1114提供了两个示例来了解如何使用延长睡眠模式以及如何唤醒DA4531。

项目\目标应用程序\ble\示例\prox\ reporter\Keil\ 5

项目\目标应用程序\ble\u示例\ble\u应用程序\u睡眠模式\Keil\u 5

谢谢,下午好

4周前

布伦特•郑 75分

尊敬的先生:,

是的,我知道可以延长睡眠时间。我关心的是为什么RTC可以在深度睡眠时工作,但在醒来时清除?因为RAM没有被保留?我也试着用公羊深睡,似乎不起作用。

比尔,

布伦特

接受答案!

4周前

PM\U对话框

你好,布伦特•郑,

请检查arch\u set\u deep\u sleep()API。进入深度睡眠模式且代码到达WFI()后,应在唤醒时执行硬件重置。在第122行中,PMU\u CTRL\u REG[RESET\u ON\u WAKEUP]被设置为1,因此在唤醒时根据DA14531产品介绍(v3.3),第5.2.1节POR、HW和SW重置

在表39:复位信号和寄存器中,RTC寄存器通过POR或HW Reset复位。因此,从深度睡眠到唤醒机制需要经过硬件重置过程,因此它将从OTP或辅助内存复制软件。因此,ram数据将被覆盖,RTC将再次从零开始计数。

谢谢,下午好

4周前

布伦特•郑 75分

好的,我拿到了,非常感谢!

4周前

PM\U对话框

你好,布伦特•郑,

谢谢你接受我的回答。如果您有任何后续问题,请提出新的论坛门票。

谢谢,下午好