跳过主要内容

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

DA14530和DA14531

5个月前

张贴了布伦特朱胜185点 12个回复
0旋转

尊敬的先生,

我的产品每天使用多次。所以我想把它放入深睡眠状态(RAM关闭),并保持RTC一次性免费计算。

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

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

5个月前

PM_DIALOG.

嗨Brent_zheng,

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

http://lpccs-docs.dialog-semondile.com/da14531_sleep_mode+/deepsleep_config.html.

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

要使用RTC(实时时钟)计时器唤醒,请定义CFG_Deep_sleep_wakeup_rtc并拒绝唤醒机制的其余机制。

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

谢谢,PM_DIALOG.

5个月前

布伦特朱胜 185点

尊敬的先生,

谢谢你快速回答。是的,我正在使用Prox-Reporter项目。当我定义CFG_DEEP_SLEEP_WAKEUP_RTC时,系统可以在深度睡眠中唤醒10秒。但我问题是如何在唤醒之后保持RTC日历/时间寄存。我叫RTC_GET_TIME_BCD(),从深度睡眠后唤醒后,返回返回零。

谢谢。

5个月前

布伦特朱胜 185点

尊敬的先生,

寄存器数据前往深度睡眠:

pmu_ctrl_reg:0
CLK_RTCDIV_REG: 40 c8
RTC_CONTROL_REG: 0
RTC_EVENT_FLAGS_REG: 0
RTC_TIME_REG: 80000001
RTC_CALENDAR_REG:A021010D
rtc_keep_rtc_reg:1

RTC_INTR_MIN事件从深度睡眠唤醒后:

pmu_ctrl_reg:2
CLK_RTCDIV_REG: 0
RTC_CONTROL_REG: 0
RTC_EVENT_FLAGS_REG: 0
RTC_TIME_REG: 0
RTC_CALENDAR_REG: 0
RTC_Keep_rtc_reg:0

似乎RTC正在畅销深睡眠,但有些人清除或重置唤醒程序中的寄存器。你能帮帮我吗?

谢谢。

5个月前

PM_DIALOG.

嗨Brent_zheng,

为延迟道歉。让我检查一下,我会尽快回复你。

谢谢,PM_DIALOG.

4个月前

PM_DIALOG.

嗨Brent_zheng,

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

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

SDK6.0.14.1114提供了2个示例,以了解如何使用扩展睡眠模式以及如何唤醒DA4531。

项目\ target_apps \ ble_examples \ prox_reporter \ Keil_5

项目\ target_apps \ ble_examples \ ble_app_sleepmode \ keil_5

谢谢,PM_DIALOG.

4个月前

布伦特朱胜 185点

尊敬的先生,

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

BR,

布兰特

接受答案!

4个月前

PM_DIALOG.

嗨Brent_zheng,

请检查ARCH_SET_DEEP_SLEEP()API。进入深度睡眠模式并将代码达到WFI()后,应在唤醒时执行HW复位。在第122行中,PMU_CTRL_REG [RESET_ON_WAKEUP]设置为1,因此根据唤醒,将HW激活da14531数据表(v3.3),第5.2.1节POR,HW和SW复位

在表39:复位信号和寄存器中,RTC规则被POR或HW复位。因此,从深度睡眠到唤醒机制要经过一个HW复位过程,因此它会从OTP或次级存储器中复制软件。由于这个原因,ram数据将被覆盖,RTC将重新从零开始计数。

谢谢,PM_DIALOG.

4个月前

布伦特朱胜 185点

好的,我明白了,非常感谢!

4个月前

PM_DIALOG.

嗨Brent_zheng,

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

谢谢,PM_DIALOG.

2个月前

Bas321. 85点

亲爱的支持团队

我的目标是在我的源代码中实现深度睡眠模式的自定义时间。

在做同样的事情之前,我正在尝试首先实现BLE_BUTTON_WAKEUP项目;通过使用基于RTC的使能中断。

现在的现状如下。

1.)流程为:启用RTC中断,定义中断处理程序,中断处理程序调用时唤醒设备

2.)完成启用RTC中断,能够使用中断处理程序接收中断并调用唤醒功能。但该设备没有醒来

3.)基本上,在白蚁中,我能够看到定时器运行10秒钟,然后在消息上休眠模式,但设备不会根据RTC启用中断唤醒。

我已经附上了代码的重要部分供评估,请告诉我如果我错过了一些东西,请告诉我。

代码部分:用于RTC启用中断

空白initialize_alarm (rtc_time_t时间)

{

RTC_time_t Alarm_time;

alarm_time =时间;

alarm_time。秒+ = RTC_TIMEOUT;

rtc_set_alarm (&alarm_time NULL, RTC_ALARM_EN_SEC);

//清除挂起的中断

RTC_GET_EVENT_FLAGS();

rtc_register_intr (rtc_interrupt_hdlr RTC_INTR_ALRM);

}

代码部分:中断处理程序

静态void rtc_interrupt_hdlr(uint8_t事件)

{

//存根函数

RTC_Wake_FLAG = 1;

}

如果(rtc_wake_flag)//睡眠模式关闭定时器达到10s

{

printf_string (UART2 \ n "睡眠模式);

Sprintf(时间,“\ nt:%d:%d:%d \ n \ r”,mytime.hour,mytime.minute,myTime.sec);

printf_string(UART2,时间);

RTC_WAKE_FLAG = 0;

ARCH_SET_SLEEP_MODE(ARCH_SLEEP_OFF);//禁用睡眠模式

ARCH_BLE_FORCE_WAKEUP();//强制摇晃醒来

arch_ble_ext_wakeup_off ();//禁用永久休眠标志

app_easy_wakeup();//一旦令人醒欲就会调用相应的操作

user_app_init ();

}

您的投入和方向,效果有助于迅速原型设计。期待您的宝贵建议。

2个月前

Bas321. 85点

亲爱的团队

你能回复我的上述内容,从那时起一直在等待。

谢谢你

温暖的问候
Basu.B.Patil

2个月前

PM_DIALOG.

嗨Bas321,

谢谢你在论坛上的评论。我建议看看SDK的pxp_reporter示例。

当CFG_EXT_SLEEP_WAKEUP_RTC或CFG_DEEP_SLEEP_WAKEUP_RTC时,DA14531从扩展睡眠或深度睡眠时唤醒。

configure_rtc_wakeup()将RTC配置为唤醒源,因此芯片在10秒后唤醒(Alarm_Time.sec + = 10)。

在入睡之前,您应该确保PD_TIM是打开的。请检查app_advertise_complete()。

一旦设备采用RTC中断,RTC_INTRUPT_HDLR()就会摘进才能从睡眠状态恢复并唤醒。RTC_INTRUPT_HDLR()应在RTC_REGISTER_INTR()中注册。

谢谢,PM_DIALOG.