LISA PM 双核 RTC 浅睡眠唤醒示例
源码位置: samples/subsys/lisa_pm/auto_light_sleep/rtc_wakeup 查看源码
功能说明
AP 核 (
remote/) 引导 CP,初始化双核lisa_pm,并持续校验 AP 上下文。CP 核通过
rtc0的lisa_rtc_*接口设置绝对闹钟,并通过设备 PM wakeup 接口把 RTC 登记为唤醒源,再进入AUTO_LIGHT_SLEEP。CP 主任务等待 8 秒测试超时;该软件定时器晚于 3 秒 RTC 闹钟,不会提前唤醒并重新推迟相对 RTC 闹钟。
after_wake必须收到LISA_PM_WAKEUP_RTC;验证成功后切回ACTIVE、关闭 RTC 唤醒,并打印唯一 PASS 标记。若 RTC 未在 8 秒内唤醒,样例会由 TIMER/超时路径明确打印 FAIL,并停止本轮测试。
关键配置
配置 |
说明 |
|---|---|
|
CP 作为 IPC master |
|
AP 作为 IPC slave |
|
CP 作为 PM primary 和 RTC Calendar 所有者,并提供 S2M PM RPC server |
|
AP 作为 PM peer/proxy,并使用 S2M PM RPC client |
|
CP 使用 AP/CP 双核运行时 PM 模式 |
|
使用 |
|
匹配外部无 BUCK 供电配置 |
|
匹配外部无 BUCK 供电配置 |
RTC Calendar 由 lisa_rtc 驱动独占初始化和控制。HAL PM 只接收设备登记的
RTC 唤醒源,不再直接初始化、设置或释放 Calendar。
编译
./build.sh -C -S samples/subsys/lisa_pm/rtc_wakeup -DBOARD=arcs_evb
烧录
工程同时生成 AP 和 CP 固件:
./tools/burn/cskburn -C arcs -s /dev/ttyACM0 -b 3000000 \
0x0 build/remote/ap.bin \
0x100000 build/arcs.bin
预期输出
=== lisa_pm dual_core RTC light sleep wakeup AP ===
AP lisa_pm init ok
=== lisa_pm dual_core RTC light sleep wakeup CP ===
RTC relative wakeup enabled: delay=3 s
AUTO_LIGHT_SLEEP enabled; RTC wakeup expected in 3 s
after_wake cause=RTC
RTC LIGHT SLEEP WAKEUP TEST PASS
通过判据为串口日志出现一次 RTC LIGHT SLEEP WAKEUP TEST PASS,且此前的
after_wake cause=RTC 明确表明唤醒源为 RTC。失败判据包括
RTC WAKEUP TEST FAIL、AP CTX CHECK FAILED、assert、backtrace、
exception 和 fault。
核心 API
lisa_rtc_get_time(rtc, &now);
lisa_rtc_set_alarm(rtc, 0, &alarm);
lisa_rtc_enable_alarm(rtc, 0, true);
lisa_rtc_configure_wakeup(rtc, 0);
lisa_device_wakeup_enable(rtc, true);
lisa_pm_set_system_policy(LISA_PM_SYSTEM_POLICY_AUTO_LIGHT_SLEEP);
唤醒验证成功后,示例执行:
lisa_pm_set_system_policy(LISA_PM_SYSTEM_POLICY_ACTIVE);
lisa_device_wakeup_enable(rtc, false);
lisa_rtc_clear_wakeup(rtc, 0);
lisa_rtc_enable_alarm(rtc, 0, false);
注意事项
lisa_pm_init()必须先于lisa_device_wakeup_enable()调用;RTC API 只能在任务上下文调用。RTC 闹钟由示例在进入浅睡眠前一次性设置为“当前时间 + 3 秒”。不要在验证期间运行周期短于 3 秒的任务,否则较早的 TIMER 唤醒会先于 RTC 触发;样例只保留 8 秒测试超时。
两份固件必须一起烧录:AP 固件地址为
0x0,CP 固件地址为0x100000。静态构建只能验证配置、符号和链接;必须在
arcs_evb实板上烧录并检查串口 PASS/失败标记,才能确认 RTC 浅睡眠唤醒有效。