LISA PM 双核 RTC 浅睡眠唤醒示例

功能说明

  • AP 核 (remote/) 引导 CP,初始化双核 lisa_pm,并持续校验 AP 上下文。

  • CP 核通过 rtc0lisa_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,并停止本轮测试。

关键配置

配置

说明

CONFIG_ARCS_HAL_IPC_MASTER=y

CP 作为 IPC master

CONFIG_ARCS_HAL_IPC_SLAVE=y

AP 作为 IPC slave

CONFIG_LISA_PM_CORE_PRIMARY=y

CP 作为 PM primary 和 RTC Calendar 所有者,并提供 S2M PM RPC server

CONFIG_LISA_PM_CORE_PRIMARY=n

AP 作为 PM peer/proxy,并使用 S2M PM RPC client

CONFIG_LISA_PM_DUAL_CORE=y

CP 使用 AP/CP 双核运行时 PM 模式

CONFIG_LISA_RTC=y

使用 rtc0 LISA RTC 设备接口配置时间、闹钟和回调

CONFIG_ARCS_HAL_WCND_WIFI_PS_LDOCORE_TUNE=n

匹配外部无 BUCK 供电配置

CONFIG_ARCS_HAL_WCND_WIFI_PS_LDOVMEM_TUNE=y

匹配外部无 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 FAILAP CTX CHECK FAILEDassertbacktraceexceptionfault

核心 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);

注意事项

  1. lisa_pm_init() 必须先于 lisa_device_wakeup_enable() 调用;RTC API 只能在任务上下文调用。

  2. RTC 闹钟由示例在进入浅睡眠前一次性设置为“当前时间 + 3 秒”。不要在验证期间运行周期短于 3 秒的任务,否则较早的 TIMER 唤醒会先于 RTC 触发;样例只保留 8 秒测试超时。

  3. 两份固件必须一起烧录:AP 固件地址为 0x0,CP 固件地址为 0x100000

  4. 静态构建只能验证配置、符号和链接;必须在 arcs_evb 实板上烧录并检查串口 PASS/失败标记,才能确认 RTC 浅睡眠唤醒有效。