# LISA PM RTC 深度睡眠示例 ## 功能说明 本示例使用 `lisa_rtc` 配置一个启动后 **10 秒**触发的一次性 RTC 闹钟, 再通过 RTC 设备的 PM wakeup 能力启用 AON RTC 唤醒源。设置 `LISA_PM_SYSTEM_POLICY_DEEP_SLEEP` 后,芯片同步进入 PMU `MODE2`;RTC 唤醒会导致整芯片复位,下一次启动日志显示 `RTC` 唤醒原因。 ## 硬件连接 无需外部连接,RTC 为芯片内部 always-on 资源。 ## 示例内容 1. 首次启动调用 `lisa_pm_init()`,读取并打印上一次唤醒原因。 2. 若本次是正常上电,读取当前 RTC 时间并设置 10 秒后的 alarm 0;若上电后 日历字段尚未初始化,则先使用 `2000-01-01 00:00:00` 作为基准时间。 3. 调用 `lisa_rtc_configure_wakeup()` 和 `lisa_device_wakeup_enable()` 启用 RTC 唤醒。 4. 调用 `lisa_pm_set_system_policy(LISA_PM_SYSTEM_POLICY_DEEP_SLEEP)` 同步进入深度睡眠。 5. RTC 到期后芯片复位重启,启动日志显示 `wakeup cause=RTC`,示例保持运行以便查看日志。 ## 编译 ```{eval-rst} .. include:: /sample_build.rst ``` 也可以直接执行: ```bash ./build.sh -C -S samples/subsys/lisa_pm/deep_sleep/rtc -DBOARD=arcs_evb ``` ## 烧录 ```{eval-rst} .. include:: /sample_flash.rst ``` ## 预期输出 首次启动: ```text === lisa_pm deep sleep RTC === boot wakeup cause=UNKNOWN RTC alarm wakeup enabled: delay=10 s entering deep sleep MODE2; RTC wakeup expected in 10 s ``` 唤醒重启后: ```text === lisa_pm deep sleep RTC === boot wakeup cause=RTC deep sleep RTC wakeup verified ``` ## 核心 API | API | 说明 | | --- | --- | | `lisa_pm_init()` | 初始化 PM,并捕获启动阶段的 AON 唤醒原因 | | `lisa_rtc_set_alarm()` | 配置一次性 RTC 闹钟时间 | | `lisa_rtc_configure_wakeup()` | 将 alarm ID 放入 RTC PM 唤醒配置缓存 | | `lisa_device_wakeup_enable()` | 向 PMU 下发并启用 RTC 唤醒源 | | `lisa_pm_set_system_policy()` | 同步进入 `PMU_SLEEPMODE_MODE2` 深度睡眠 | | `lisa_pm_get_wakeup_cause()` | 查询最近一次启动/唤醒原因 | ## 注意事项 1. **一次性入口**: 深度睡眠成功进入后函数不会返回,唤醒由芯片复位流程重新启动应用。 2. **闹钟配置**: 每次重新烧录或复位后,示例都会基于当前 RTC 时间重新设置 10 秒后的 alarm 0。 3. **唤醒原因**: `lisa_pm_init()` 会先读取再清除 PMU 唤醒状态,但保留归一化结果供应用查询。