第4章 软硬件接口规范:寄存器访问、中断、DMA、共享内存
4.1 模块边界与分层
在MPU平台中,软硬件接口规范定义了CPU(应用核或实时核)与片内外设、外部存储器、专用加速器之间的通信契约。本章关注的四类接口——寄存器访问、中断、DMA、共享内存——分别覆盖了控制面、事件面、数据搬运面和数据共享面。下图展示了这些接口在系统层次中的位置和交互关系。
层次图说明: 物理层(外设寄存器、总线)之上是硬件抽象层(HAL)与裸机驱动,再上层为RTOS或Linux内核驱动。本章规范聚焦于HAL与硬件寄存器之间的定义,以及中断/DMA/共享内存的协议约束。
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 落地步骤
- 确定硬件文档:获取外设寄存器表、中断号分配表、DMA通道与描述符格式、共享内存物理地址范围。
- 定义寄存器访问宏/函数:使用volatile修饰符,确保编译优化不重排;实现读/写/置位/清除宏。
- 配置中断控制器:使能全局中断 → 配置外设中断触发方式 → 注册ISR到向量表 → 设置优先级 → 使能外设中断。
- 实现DMA驱动:实现描述符分配器、通道控制函数、传输完成回调。
- 共享内存初始化:MPU划分非cache区域或配置cache策略;实现自旋锁/原子标志。
- 集成测试:逐接口进行功能验证,使用逻辑分析仪或追踪器确认时序。
4.6 验收标准
- 寄存器读写操作在验证环境中能正确驱动外设状态变化,无未对齐异常。
- 中断触发后CPU响应延迟低于设计指标(如< 1 µs)。
- DMA传输完成后目标缓冲区内容与源一致,且CPU负载降低至预期水平。
- 共享内存两端数据经过1000次并发写入读取无丢失、无旧数据。
- 所有接口均通过安全审计:无越权访问、无描述符溢出、无缓存一致性问题。