API GUIDE / DTRNG / OVERVIEW
G32S10 DTRNG API 概述
模块概述:本文档定义 G32S10 SDK 当前 DTRNG 模块的正式接口,覆盖:
1. 文档范围
本文档定义 G32S10 SDK 当前 DTRNG 模块的正式接口,覆盖:
HAL DTRNG:初始化、配置、polling 随机数读取和 deinitLL DTRNG:控制、状态、随机数、ready clear 和 reset helper
本文档基于以下文件:
code/include/drivers/g32s10/dtrng/hal_dtrng.hcode/include/drivers/g32s10/dtrng/ll_dtrng.hcode/include/drivers/g32s10/dtrng/dtrng_regs.hcode/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.cLL 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_READY | systick 未初始化或 reset 未释放 |
IM_ERR_TIMEOUT | RANDOM_RDY 在超时内未置位 |
IM_ERR_IO | 示例中的配置读回不一致或随机结果退化 |
IM_ERR_UNSUPPORTED | debug dump 未编译 |