可选 timer 捕获与互补 PWM¶
这些模式独立于既有通用 nx_pwm_port_t,保持同样的不可变类型化接口面和共享方法模型。选择持有静态控制器存储,不引入注册表、池、分配器、worker 或 OS 锁。未选模式无实例存储。默认镜像省略由独立完整 ELF 装配门禁证明,不能从对象大小推断。
模式 |
STM32F407 硅片路由 |
GD32F470 硅片路由 |
|---|---|---|
输入捕获 |
TIM4 CH1,PB6 AF2 |
TIMER3 CH0,PB6 AF2 |
互补 PWM |
TIM1 CH1 PA8,CH1N PB13,BKIN PB12,AF1 |
TIMER0 CH0 PA8,CH0_ON PB13,BRKIN PB12,AF1 |
已审阅 STM32F407 和 GD32F470 数据手册建立这些复用功能,不能建立连接器、外部负载、安全电平或 PCB 修订事实。外部 Board 事实必须授权真实路由。主时钟使用已建立的固定 SoC 配置,不支持动态调频。构造校验已使能时钟门、APB timer 选择与真实 AF 字段,不测量晶振容差。
冷态装配在构造前持有时钟、引脚和 IRQ 向量,直到停止与发布者静止后才释放。唯一不可变配置定义精确 timer 时钟、整数 prescaler、channel、filter 或互补输出策略。exclusive 是覆盖整个 timer 的显式权限,包括被时钟门控的其他写入者;寄存器关闭不证明无人持有。TIM1/TIMER0 break 向量与 TIM9/TIMER8 共享,装配必须预留共享资源或提供已审静态 dispatch;提供者不替对等器件改变 NVIC 向量。冷配置失败必须由取得资源的所有者清理后才释放租约或发布 factory 接口面。
捕获有 start、stop、read、state 四个公共控制。Start 借用精确调用方环。准入后的 IRQ 读取一个 CCR 值,硬件同时清除该输入捕获事件,再观察 overcapture。正常 IRQ 只确认已观察的 overcapture W0C 事实,保留数据读取后新到达但未读的边沿。排空中 IRQ 可丢弃已观察事件而不发布,单次最多发布一个值。消费者 read 在保存进入掩码下复制最旧事件。队列使用条件 cursor 回绕,无除法、扫描或变长复制。可观察 overcapture 或满环增加饱和 incident 计数,旧值永不覆盖。事件可能合并边沿,因此不是精确物理丢失计数。
原始捕获值是 16 位模 timer 计数,tick_hz 描述 prescaler 后的单位。observed_at 来自 IRQ 发布时的公共单调时钟,不是边沿采样时刻或重建的绝对硬件时间戳。硬件 filter 编码代表所选硅片采样/过滤策略,不是实测消抖间隔。Stop 先关闭并读回 channel、counter 和 IRQ 源。排队事件需要任务排空;detach 拒绝时保留环借用并返回 BUSY。成功 stop 是最终环访问。准入失败不保留环,但执行所有者仍须检查并清理被拒硬件控制写入,才能释放外层时钟/引脚/向量租约。
互补 PWM 有 set duty、start、stop、state、clear fault 五个公共控制。周期、时钟、deadtime、极性和空闲电平都是不可变冷事实。Duty 对固定基准暂存 CCR shadow。零占空比与完整周期保持显式计数边界;电气行为仍需审阅互补输出电路及物理验证。
Deadtime 使用真实 timer tDTS,CKD 为零,独立于 PSC。计数 0–127 直接编码,128–254 为二的倍数,256–504 为八的倍数,512–1008 为十六的倍数。无法表示的计数拒绝;取整会静默改变安全相关物理间隔。生产寄存器模型执行每种硬件编码。构造时清除并读回重复计数器、slave clock/gate 选择及替代捕获 XOR 输入,不继承先前所有者状态。
BKIN 在硬件中使能,绝不选择自动重新使能输出或不可逆 LOCK。实际输入有效或观察到 break 时锁存软件故障并关闭主输出。Start 校验不变 deadtime/clock/break 配置,在 MOE 使能前重查 pending break 并校验实际 MOE 读回;它不能清故障。软件观察不能证明完全位于读写窗口内的物理脉冲行为。脉宽、硬件响应及所需外部故障锁存是 Board/系统资格事实。Stop 要求实际撤销 MOE、两个 channel 源、counter 和 break 中断;拒绝写入保留责任。显式 clear fault 要求输出关闭、实际 BKIN 无效且 pending break 确认成功,不启动输出。产品持有功率级恢复策略。
私有冷态释放控制要求源撤销成功、任务事件排空及生成 IRQ 发布者已经静止,只在保存掩码下清除已结束静态 session。引脚、时钟和向量租约仍归装配,直到显式驱动并读回 Board 声明的非活动电平后才释放。公共 stop 承诺 timer 源撤销,不认证电气安全状态。
维护中的 GoogleTest/GoogleMock 目标依据锁定厂商寄存器布局编译真实生产 C。模型仅提供 MMIO/CPU/clock 边界,含捕获读清、W0C、拒绝写入、异步边沿与硬件 break。严格 ARM 编译和类型/对象报告是独立证据。物理边沿速率、ISR 延迟、噪声/过滤响应、duty/deadtime 容差、共享向量负载、break 响应及功率级安全均未执行,须真实工位提供测量。Nexus 不声明安全认证。