API GUIDE / DTRNG / OVERVIEW

G32S10 DTRNG API 概述

模块概述:本文档定义 G32S10 SDK 当前 DTRNG 模块的正式接口,覆盖:

1. 文档范围

本文档定义 G32S10 SDK 当前 DTRNG 模块的正式接口,覆盖:

  • HAL DTRNG:初始化、配置、polling 随机数读取和 deinit

  • LL DTRNG:控制、状态、随机数、ready clear 和 reset helper

本文档基于以下文件:

  • code/include/drivers/g32s10/dtrng/hal_dtrng.h

  • code/include/drivers/g32s10/dtrng/ll_dtrng.h

  • code/include/drivers/g32s10/dtrng/dtrng_regs.h

  • code/drivers/g32s10/dtrng/hal_dtrng.c

2. 分层关系

APPLICATION  Application / example / test  业务代码、板级支持与示例入口
↓
HAL  HAL DTRNG  模块级配置、状态管理与硬件访问
↓
LL  LL DTRNG  寄存器访问与字段级控制
↓
HARDWARE REGISTERS  DTRNG registers  实例地址、寄存器布局与位域定义

HAL 负责配置校验、默认配置、polling 随机数读取和 deinit。

LL 直接读写寄存器,不负责参数校验、超时、时钟门控或中断生命周期。

3. 资源与时钟

3.1 时钟门控要求

HAL 和 LL 都不会自动打开 DTRNG 的 CPM 时钟门控。调用方必须先执行:

ret = hal_cpm_clk_enable(HAL_CPM_ID_GATE_DTRNG);

完成后关闭:

ret = hal_cpm_clk_disable(HAL_CPM_ID_GATE_DTRNG);

如果时钟门控未打开,写 CFG 可能不能生效,line/divider 读回也会错误;典型表现是配置读回不一致并返回 IM_ERR_IO。

4. 使用流程

4.1 LL polling

hal_cpm_clk_enable(HAL_CPM_ID_GATE_DTRNG)
ll_dtrng_reset_release()
ll_dtrng_line_enable_set(DTRNG_LINE_ENABLE_ALL)
ll_dtrng_div_num_set(0)
ll_dtrng_interrupt_mask()
ll_dtrng_enable()
wait ll_dtrng_random_ready()
ll_dtrng_random_get()
ll_dtrng_ready_clear()
...
ll_dtrng_disable()
ll_dtrng_reset_assert()
hal_cpm_clk_disable(HAL_CPM_ID_GATE_DTRNG)

5. 示例

  • HAL polling:code/examples/hal/dtrng_hal_example.c

  • LL polling:code/examples/ll/dtrng_ll_example.c

接口:

error_code_t dtrng_hal_example_run(void);
error_code_t dtrng_ll_example_run(void);

两个示例都打开 DTRNG clock gate,生成 8 个 random words,并检查结果不是单值重复。

6. 错误码

错误码来源
IM_ERR_INVALID_PARAM实例或参数指针非法,字段超范围
IM_ERR_NOT_READYsystick 未初始化或 reset 未释放
IM_ERR_TIMEOUTRANDOM_RDY 在超时内未置位
IM_ERR_IO示例中的配置读回不一致或随机结果退化
IM_ERR_UNSUPPORTEDdebug dump 未编译