跳到主要内容

在深度睡眠模式期间唤醒功能。

DA14530和DA14531.

1周前

在深度睡眠模式期间唤醒功能。

张贴了Bas321.85分 4回复
0旋转

我的目标是在我的源代码中实现深度睡眠模式的自定义时间。
在做同样的事情之前,我正在尝试首先实现BLE_BUTTON_WAKEUP项目;通过使用基于RTC的使能中断。
现在的现状如下。
1.)流量是启用RTC中断,定义中断处理程序,在中断处理程序调用时唤醒设备
2.)完成启用RTC中断,能够使用中断处理程序接收中断并调用唤醒功能。但该设备没有醒来
3.)基本上,在白蚁中,我能够看到定时器运行10秒钟,然后在消息上休眠模式,但设备不会根据RTC启用中断唤醒。
我已经附上了代码的重要部分供评估,请告诉我如果我错过了一些东西,请告诉我。

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

void initialize_alarm(rtc_time_t时间)
{
RTC_time_t Alarm_time;

armar_time =时间;
armar_time.sec + = rtc_timeout;

RTC_SET_ALARM(&Alarm_Time,Null,RTC_ALARM_EN_SEC);

//清除挂起的中断
RTC_GET_EVENT_FLAGS();
RTC_REGISTER_INTR(RTC_INTRUPT_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();
}

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

1周前

PM_DIALOG.

嗨Bas321,

谢谢你发布一个新的论坛线程。我已经在下面的论坛票上回复了你,因为你添加了评论:

https://www.dialog-seminile.com/support-posts/how -keep-rtc-working-deep-sleep-mode.

请检查我的回复:

建议看看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_interrupt_hdlr()应在RTC_REGISTER_INTR()中注册。\

注意:让我们继续在这个论坛线程上讨论。

谢谢,PM_DIALOG.

接受答案!

1周前

PM_DIALOG.

嗨Bas321,

让我们继续讨论您的新论坛主题:

https://www.dialog-seminile.com/support-posts/wake-cunctive ....

谢谢,PM_DIALOG.

6天前

Bas321. 85分

亲爱的团队

谢谢你的回应,

(1)CFG_DEEP_SLEEP_WAKEUP_RTC

在user_proxr.h中我找到了这个函数。

但是,应该定义这一点(在代理记者项目的哪个行和文件)

(2)在configure_rtc_wakeup()中

如果我们希望系统深入入睡1小时,那么就足以提及

armarm_time.sec + = 3600

(3)以下是对应于App_Advertise_Complete()的函数。

你能告诉我如何确保pd_tim是开放的

void app_advertise_complete(const uint8_t状态)
{
if((status == gap_err_no_error)||(status == gap_err_canceled)))
{

#if(ble_prox_reporter)
app_proxr_alert_stop();
#万一
}

if(status == gap_err_canceled)
{
ARCH_BLE_EXT_WAKEUP_ON();

#if定义(__da14531__)
//配置PD_tim.
#f定义(cfg_ext_sleep_wakeup_rtc)||定义(cfg_ext_sleep_wakeup_timer1)||\
定义(cfg_deep_sleep_wakeup_rtc)||定义(cfg_deep_sleep_wakeup_timer1)
//确保PD_TIM已打开
setbits16(pmu_ctrl_reg,tim_sleep,0);
//等到PD_TIM打开
while((getword16(sys_stat_reg)和tim_is_up)!= tim_is_up);
#别的
//关闭pd_tim.
setBits16(PMU_CTRL_REG,TIM_SLEEP,1);
//等到PD_tim关闭
虽然((getword16(sys_stat_reg)和tim_is_down)!= tim_is_down);
#万一
#万一

注意:是否有任何其他指令通过RTC配置深度睡眠模式?

谢谢你。

4天前

PM_DIALOG.

嗨Bas321,

  1. 这是正确的 - CFG_Deep_sleep_wakeup_rtc宏应该定义,以便通过RTC从深度睡眠唤醒。
  2. 请看看RTC_time_T结构。在1小时的情况下,您可以使用Alarm_time.hour + = 1。
  3. 你什么时候需要PD_TIM打开?正如您可以在App_Advertise_Complete()回调中所看到的,代码等待,直到打开PD_TIM。

while((getword16(sys_stat_reg)和tim_is_up)!= tim_is_up);

如果未打开PD_TIM,则代码将堆叠到while()循环中。

关于深度睡眠并通过RTC唤醒,应遵循以下教程:

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

谢谢,PM_DIALOG.