API GUIDE / Bus Monitor / OVERVIEW

G32S10 Bus Monitor API 概述

模块概述:本文档定义 G32S10 SDK Bus Monitor 模块的正式接口,覆盖以下两层:

1. 文档范围

本文档定义 G32S10 SDK Bus Monitor 模块的正式接口,覆盖以下两层:

  • HAL Bus Monitor:面向 BSP、性能统计和异常诊断模块的功能级接口

  • LL Bus Monitor:面向寄存器与位操作的低层接口

2. 分层关系

Application / BSP / Diagnosis / Profiling
           |
           v
    HAL Bus Monitor
           |
           v
     LL Bus Monitor
           |
           v
 Bus Monitor Registers

分层职责如下:

  • HAL Bus Monitor

    • 封装带宽监测、自动/手动停止、done IRQ callback 和 debug 快照读取

    • 维护参数合法性、通道类型约束和统一返回码

    • 提供便于上层使用的计数结果、带宽计算辅助与 debug 状态结构体

  • LL Bus Monitor

    • 提供寄存器位级访问入口

    • 不维护软件状态,不做复杂业务语义判断

  • bus_monitor_regs.h

    • 定义 Bus Monitor 基地址、寄存器结构体布局、通道数量和位域 mask

3. 资源模型与公开类型

3.1 通道类型

typedef enum {
    HAL_BUS_MONITOR_CHANNEL_TYPE_AXI = 0,
    HAL_BUS_MONITOR_CHANNEL_TYPE_AHB,
} hal_bus_monitor_channel_type_t;

通道类型由 hal_bus_monitor_decode_debug_channel() 自动填入hal_bus_monitor_debug_channel_status_t.type:

  • AXI 通道使用 detail.axi

  • AHB 通道使用 detail.ahb

HAL 不提供单独查询通道类型的 API;上层若需静态判断,可按本节通道表或使用 LLll_bus_monitor_is_axi_channel()、ll_bus_monitor_is_ahb_channel()。

4. 当前实现约束与行为说明

4.1 Debug 功能通过 Kconfig 维护

  • debug 寄存器访问和解码 API 始终可用;hal_bus_monitor_regs_dump() 是可选 debug helper。

  • 寄存器 dump 仅在 CONFIG_SDK_ENABLE_DEBUG_HELPERS=y 和CONFIG_BUS_MONITOR_ENABLE_DEBUG_HELPERS=y 时输出,否则返回 IM_ERR_UNSUPPORTED。

  • debug 捕获现场应优先以 hal_bus_monitor_read_debug_snapshot() 的 raw 值保存,再按需解码。

4.2 Debug 快照应在复位释放后尽早读取

  • 规格书建议 watchdog 复位或 pprst 复位后读取 debug 信息。

  • Debug 信息锁存在 Bus Monitor 内部寄存器中。

  • 复位释放后应第一时间读取 DBG_DDRC_CHn、DBG_SORT、DBG_SYSTEM_0/1,并同时记录复位原因和时间。

4.3 LL 接口不做参数保护

  • LL 接口默认调用方已保证 channel、channel_mask 和地址范围合法。

  • HAL 接口负责参数检查并返回 IM_ERR_INVALID_PARAM、IM_ERR_NOT_READY 或IM_ERR_BUSY。

  • LL 的 clear helper 对 W1C 字段执行 0 -> 1 -> 0 脉冲;调用返回后 clear 位保持为 0。

5. 推荐关注的错误码

错误码含义
IM_OK操作成功
IM_ERR_INVALID_PARAM输入参数非法,或参数组合不满足接口约束
IM_ERR_NOT_READYhandle、通道或 callback 尚未就绪
IM_ERR_BUSY唯一实例已被占用、通道正在采样、auto-stop done IRQ 尚未处理完,或 debug 已使能
IM_ERR_UNSUPPORTED所请求的可选 debug helper 未由 Kconfig 启用