显式时钟借用与浅睡眠

IO58 当前交付是静态 caller-owned 时钟接纳、排空屏障,以及 STM32F407 / GD32F470 固定 RUN 配置下的一次浅睡眠。组件不创建全局 PM 注册表、任务、定时器、最大对象池或 默认状态。未显式选用的 Nexus::ClockDomain 是 EXCLUDE_FROM_ALL 静态目标;两个 SoC 的 sleep 源也须由显式可选目标引用。板卡不自动选 GPIO 唤醒或改变电气连接。

公共 API 使用 opaque nx_clock_domain_t,mutable storage / constructor 只供私有 装配。消费者提供自然对齐、零初始化的 nx_clock_lease_t。接纳成功后,token 的对象 身份和存储被借用,字段由 provider 管理;复制字段不能释放原对象。每个 domain 的显式 capacity 为别名和 retained identity 扫描给出上限,不承诺与容量无关的常数时间。

生命周期的唯一 privileged Thread owner 调用 close,禁止新增 lease,再自行推动 每个设备停止、DMA/IRQ/完成通知排空。消费者成功 detach 后才 release。close 本身 不取消设备,release 不证明外设已停止。现存 lease 不因超时、关闭或睡眠被撤回。 quiescent 仅在当前 closed epoch 且 count/list 同时为空时返回成功;reopen 只有在 排空后才能单调提升 admission epoch,最大值永久拒绝复用。旧控制值不能跨 epoch 重开或建立排空凭证。domain storage 的生命周期长于全部控制副本,禁止 memset 重置。

metadata 保存恢复 incoming PRIMASK;Native 使用真实递归线程排他模型。acquire / release 可在 same-CPU privileged Thread、PendSV、SysTick 或外部 configurable IRQ 使用;构造、close、quiescent、reopen 为 serialized privileged Thread。NMI、fault、 SMP、signal 或其他安全域调用不在合同内。输出和 wake word 不能覆盖私有 provider、 retained token 或彼此;拒绝不能破坏已借用控制。没有回调或 token release 后的访问。

SoC sleep 在 incoming PRIMASK/BASEPRI/FAULTMASK 全清的 privileged Thread 调用。 同一个保存掩码下最终验证 closed barrier、真实寄存器固定配置和 wake sequence,再 进入既有生产 nx_arch_wait_for_interrupt。WFI 保持 PRIMASK,已使能 IRQ 变为 pending 可以唤醒,恢复掩码后运行;返回后 owner 必须重检真实业务谓词。序列变化则成功返回 slept=false。SCR.SLEEPDEEP 已设置、STOP、动态 RUN 均明确拒绝;从不改写 SCR、 RCC、Flash、Tick、pending IRQ 或 deadline。32-bit wake sequence 需要调用者证明 观察窗口内不会完整绕回;不声称用一个快照解决 DMA/NMI/SMP 发布或无界 ABA。

实际验证的 STM32 profile 为 nominal HSE8 MHz / M8 / N336 / P2 / Q7,SYSCLK/AHB168、 APB1 42、APB2 84 MHz,Flash5WS,SSCG disabled;GD 为 nominal HXTAL25 / M25 / N400 / P2 / Q9,SYSCLK/AHB200、APB1 50、APB2 100 MHz,Flash7WS,SSCG disabled、 TIMERSEL=0。来源是 pinned SDK 的 RCC/RCU/FMC register definitions 与当前 SoC system.c 固定启动值。GD main Q9 不能宣称 USB48 MHz,独立 USB clock owner 另负其责。晶振实际 频率、供电、热漂移和板卡布局不能由 ready/divisor 读回测得,仍需 physical qualification。

owner 必须独占 RCC 决策,登记全部相关消费者,并提供实际 enabled wake IRQ;模块不 发现遗漏消费者或隐式暂停内核。实际 deep STOP / PLL 改频扩展必须先排空,停止全部 Tick/time providers、scheduler deadline borrowers 与 IRQ,再由独占硬件端口实施有限 clock restore / rollback;clock/time 的新域需 cold 重建,旧绝对 deadline 不可继承。 本切片没有实现这些扩展,不把 admission epoch 伪装成时间域转换。

Google 测试使用真实生产 domain、真实 Native 排他、两家真实 SDK 的 MMIO布局和既有 生产 Arch sleep,只替换 CPU context / WFI 外部叶子。原始链接 RED、SSCG/TIMERSEL/ non-head token 真实失败回归、GREEN、ASan/UBSan、strict ARM 和身份见 tools/testing/evidence/clock-domain-iteration/manifest.json。这不是 clean release、 整机零 RAM/双离线重建或 physical HIL/WCET/功耗资格;这些由后续平台集成/工位证据建立。

H743 SPI4 的运行期暂停与恢复

通用静态装配与运行期访问关系见运行时访问补充图。

IO-30 的当前纵切是 H743 V 修订 0x2003、默认 HSI trim64、固定 HSI64 MHz、 Cache off、baremetal 的单个 SPI4 finite-DMA 控制器。维护装配 tools/configure/assemblies/h743-spi-dma-runtime-clock.toml 显式选择:

[power]
mode = "fixed-run"
controllers = ["bus4"]

解析器拒绝其他 controller、endpoint 别名、空或重复列表、未知字段、其他 clock/cache 配置及 OS。该选择只生成一个私有 domain 和一个生命周期 lease;不选 [power] 的 装配没有这组状态和运行期接口。现有 ClockDomain 组件仍为唯一借用机制,不新增驱动 ops、公开 provider storage、后台任务或逐请求转发层。

生成的 nx_platform_runtime_domain() 只返回静态身份,不初始化硬件。Platform 启动 在第一个外设资源写入前获取 lease。即使请求已 acquire-observed SETTLED,初始化的 provider、IRQ、DMA、CS、引脚和外围 gate 仍承担责任,因此该 lease 继续保留。 nx_platform_runtime_pause() 关闭接纳并复用真实 stop 路径;active 请求返回 BUSY, 调用者必须继续真实 cancel/service 和重试。DMA EN、地址与 mux、owned IRQ、线上完成、 CS/SCK、引脚快照以及自有 gate 的撤回全部证明后,才能 release 并通过 quiescent。 地址、CS、引脚或 gate 拒绝恢复时保持 lease 和清理责任,不以清零内存假装停止。

唯一生命周期 owner 必须先 join submitters、controls 和 observers,再在 privileged、 unmasked Thread 串行调用 pause/resume。close 不会自动阻止已初始化 endpoint 的提交, 因此这不是并发的全局 suspend。nx_platform_runtime_resume() 只有在排空后提升 admission epoch,再重新获取 lease 和恢复原控制器;部分失败分别返回 primary、cleanup 和 remaining-effects,原责任只能由实际 pause 或全局 stop 完成。旧 barrier 不能批准新 epoch。

pause/resume 保持 System 与 TIM2 的 CEN、分频及 overflow owner,不切换 Core deadline 时域。暂停期间到期的原绝对 deadline 在恢复后仍然到期。全局 nx_platform_stop() 仍是 另一条全消费者停止路径,不能拿它替代运行期暂停或继承其重启前的 deadline。本切片没有 改变 PLL、供电、Flash latency、内核 Tick,也没有实现 WFI、deep STOP、DVFS、GPIO sleep/wake 电气策略或其他板卡的时钟能力。

新增 Google 程序连接正常生成的同一装配、真实 H743 System/SPI/GPIO/DMA/ClockDomain 和外部 MMIO/IRQ 模型。它检查跨 SETTLED 的 lease、pending RX commit、失败重试、实际 门控与引脚撤回,以及暂停期间 TIM2 的 pending wrap。软件模型执行和后续 Debug/ASan 结果不构成 MCU、功耗、WCET、clean SDK 或物理 HIL 资格;IO-30 的完整退出条件仍待验收。