第4章 软硬件接口规范:寄存器访问、中断、DMA、共享内存

4.1 模块边界与分层

在MPU平台中,软硬件接口规范定义了CPU(应用核或实时核)与片内外设、外部存储器、专用加速器之间的通信契约。本章关注的四类接口——寄存器访问、中断、DMA、共享内存——分别覆盖了控制面、事件面、数据搬运面和数据共享面。下图展示了这些接口在系统层次中的位置和交互关系。

层次图说明: 物理层(外设寄存器、总线)之上是硬件抽象层(HAL)与裸机驱动,再上层为RTOS或Linux内核驱动。本章规范聚焦于HAL与硬件寄存器之间的定义,以及中断/DMA/共享内存的协议约束。
软硬件接口规范 – 核心节点与数据流 CPU核 寄存器接口 中断控制器 DMA 控制器 共享内存 外设/加速器 寄存器访问 (LD/STR) 中断配置 配置 DMA DMA 搬运 中断请求 数据通知/标志 说明: 实线箭头表示数据流(寄存器访问、DMA搬运),虚线箭头表示控制流(中断配置、中断请求、cache维护)。 信任链路体现在:CPU对寄存器/中断配置的写操作必须保证可见性,共享内存两端需协商一致性协议。

4.2 组件职责

接口类型职责描述典型硬件实体
寄存器访问CPU通过load/store指令读写外设控制/状态寄存器;定义地址偏移、位域语义、访问权限(RO/RW/W1C)。APB/AHB从设备寄存器组
中断外设通过中断线向CPU发送事件信号;规范中断号、触发方式(边沿/电平)、优先级、向量表映射。GIC (ARM), PLIC (RISC-V)
DMA硬件批量搬运数据,释放CPU;规范通道号、源/目的地址、传输粒度、描述符链、完成通知方式。AXI DMA, IDMA, DMAC
共享内存CPU与加速器/其他核通过共享RAM交换数据;规范物理地址、对齐要求、Cache一致性策略、同步标志。OCM, BRAM, 片外DDR中预留区域
关键设计原则: 每种接口都必须提供 边界保护:寄存器访问需加写保护位;中断需支持使能/屏蔽/清除分离;DMA描述符应位于安全内存区;共享内存需配合互斥锁或原子操作。

4.3 数据流 / 控制流 / 信任链路

  • 寄存器访问数据流:CPU (特权/非特权态) → 总线矩阵 → 外设寄存器 → 状态反馈。信任链路依赖MPU区域配置确保只有授权软件可访问特定地址。
  • 中断控制流:外设事件 → 中断控制器 (硬件清pending) → CPU异常入口 → ISR执行 → 中断清除。信任链路确保中断号不冲突、优先级不导致死锁。
  • DMA控制流:CPU配置描述符 → DMA搬运 (源→目的) → 搬完中断/轮询标志。信任链路要求DMA描述符由可信实体写入,且目的地址不能覆盖关键代码/数据区。
  • 共享内存流:生产者写入数据 → 内存屏障 → 更新标志/发送通知 → 消费者读取。信任链路依赖Cache一致性协议 (如ACE/CHI) 或显式flush/invalidate操作。

4.4 选型权衡

维度寄存器访问中断DMA共享内存
延迟低 (1~10 cycles)中等 (10~100 cycles)取决于传输数据量依赖Cache策略
吞吐低 (1 reg/access)事件触发高 (可并发大数据块)高 (批量共享)
CPU占用轮询时高ISR执行短暂占用配置后释放CPU同步操作需开销
复杂性简单中等 (嵌套/优先级)高 (描述符管理)中等 (一致性维护)
典型场景配置/查询事件通知大数据搬运多核交互
选型风险点:
  • 寄存器访问未对齐地址或违反MPU分区 → BusFault。
  • 中断优先级反转或ISR过长 → 系统抖动。
  • DMA描述符链接错误或地址越界 → 内存污染。
  • 共享内存缺少内存屏障 → 数据不一致 (尤其是MPU带Cache场景)。

4.5 落地步骤

  1. 确定硬件文档:获取外设寄存器表、中断号分配表、DMA通道与描述符格式、共享内存物理地址范围。
  2. 定义寄存器访问宏/函数:使用volatile修饰符,确保编译优化不重排;实现读/写/置位/清除宏。
  3. 配置中断控制器:使能全局中断 → 配置外设中断触发方式 → 注册ISR到向量表 → 设置优先级 → 使能外设中断。
  4. 实现DMA驱动:实现描述符分配器、通道控制函数、传输完成回调。
  5. 共享内存初始化:MPU划分非cache区域或配置cache策略;实现自旋锁/原子标志。
  6. 集成测试:逐接口进行功能验证,使用逻辑分析仪或追踪器确认时序。

4.6 验收标准

  • 寄存器读写操作在验证环境中能正确驱动外设状态变化,无未对齐异常。
  • 中断触发后CPU响应延迟低于设计指标(如< 1 µs)。
  • DMA传输完成后目标缓冲区内容与源一致,且CPU负载降低至预期水平。
  • 共享内存两端数据经过1000次并发写入读取无丢失、无旧数据。
  • 所有接口均通过安全审计:无越权访问、无描述符溢出、无缓存一致性问题。