独立的有限 UART 与 SPI DMA 控制器

既有类型化接口面、共享不可变方法表及调用方持有的请求/状态存储仍是权威合同。冷态实例选择一组精确审阅的寄存器/IRQ/DMA 事实。没有 stream 分配器、运行时注册表、额外可变路由指针或隐藏复制池。可变 DMA 状态布局不变;新增路由只消耗所选实例资源。

提供者

首组路由

第二组路由

STM32 UART

USART1,APB2 84 MHz,DMA2 stream7 channel4

USART2,APB1 42 MHz,DMA1 stream6 channel4

GD32 UART

USART0,APB2 100 MHz,厂商 DMA1 channel7 selector4

USART1,APB1 50 MHz,厂商 DMA0 channel6 selector4

STM32 SPI

SPI1,APB2 84 MHz,DMA2 RXstream0/TXstream3 channel3

SPI2,APB1 42 MHz,DMA1 RXstream3/TXstream4 channel0

GD32 SPI

SPI4,APB2 100 MHz,厂商 DMA1 RXchannel3/TXchannel4 selector2

SPI0,APB2 100 MHz,厂商 DMA1 RXchannel2/TXchannel5 selector3

已审阅硅片 AF 为 USART2/USART1 PA2/PA3 AF7、SPI2 PB13/PB14/PB15 AF5 和 SPI0 PA5/PA6/PA7 AF5。这些事实不提供外部 Board 接线、连接器、电气上拉或资格。类型化配置保持唯一装配权威。第二 UART TX 与首个 I2C TX 引擎冲突,必须在资源解析时拒绝。GD 原始 DMA0/1 与公共不透明控制器 ID 1/2 不同。

STM UART 初始化使用保留的精确 IRQ、DMA、stream 与时钟事实。STM SPI 初始化校验所选总线、时钟与引擎指针;即使总线空闲,只要 DMA 向量仍使能,就不能由另一个冷态对象取得。GD 冷态 _initialize_at 只选择两组维护中的只读控制器描述符,原首控制器初始化器仍是薄包装。重复/活动硬件、保留的已使能 DMA 发布者及不支持组合均在效果发生前拒绝。引擎关闭但向量租约仍使能时仍有所有者;冷态取得保持该所有者的标志与优先级。

有限 DMA 完成独立于线侧完成。热路径 W1C 只清除已观察完成/半完成位,保留新错误位锁存。提供者在实际引擎撤销后及最终完成发布前再次读取错误,检测到 DMA 错误后绝不报告成功。SPI 释放 CS 与发布 SETTLED 前必须排空两个引擎、IRQ 源与线侧;UART 还需真实 TC。撤销失败保留 QUARANTINED 请求与缓冲区。对等实例的标志、时钟、向量、CS 与借用相互独立。共享 DMA 时钟归外层装配所有,单实例停止不释放它。

显式 SPI 固定内存标志保留调用方持有的 dummy/discard 标量存储、精确单字节 DMA 域及 MINC 身份;没有隐式临时存储回退。STM SPI2 轮询中止/恢复只脉冲 APB1 SPI2 复位,不复位邻近 APB2 SPI1 控制器。

本页只实现第二控制器的有限 UART TX/SPI DMA。首控制器既有接收模式由各自测试覆盖;新增事实不接纳第二控制器连续 RX。真实 GoogleTest/GoogleMock MMIO 回归和严格 ARM SDK 对象/布局报告属于开发证据;factory/所选完整镜像验证另行记录。物理 DMA、IRQ 延迟、CS/线侧时序与 Board HIL 均未执行。