独立的有限 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 均未执行。