API GUIDE / DTRNG / LL
G32S10 DTRNG LL 接口
LL 层接口:仅 dtrngx == DTRNG 返回 true。
1. LL 接口
1.1 实例检查
bool ll_dtrng_is_instance(const dtrng_regs_t *dtrngx);
仅 dtrngx == DTRNG 返回 true。
1.2 generator
void ll_dtrng_enable(dtrng_regs_t *dtrngx); void ll_dtrng_disable(dtrng_regs_t *dtrngx);
分别置位和清除 DTRNG_CFG.GEN_EN。
1.3 entropy line
void ll_dtrng_line_enable_set(dtrng_regs_t *dtrngx, uint32_t line_mask); uint32_t ll_dtrng_line_enable_get(const dtrng_regs_t *dtrngx);
设置或读取 DTRNG_CFG.LINE_EN。LL 不校验 line_mask。
1.4 divider
void ll_dtrng_div_num_set(dtrng_regs_t *dtrngx, uint32_t div_num); uint32_t ll_dtrng_div_num_get(const dtrng_regs_t *dtrngx);
设置或读取 DTRNG_CFG.DIV_NUM。LL 不校验范围。
1.5 interrupt mask
void ll_dtrng_interrupt_mask(dtrng_regs_t *dtrngx); void ll_dtrng_interrupt_unmask(dtrng_regs_t *dtrngx); bool ll_dtrng_interrupt_is_masked(const dtrng_regs_t *dtrngx);
控制 DTRNG_CFG.INT_MASK。该 helper 只控制 DTRNG 中断输出,不负责 PLIC 配置。
1.6 ready clear
void ll_dtrng_ready_clear(dtrng_regs_t *dtrngx);
通过 RDY_CLR 形成脉冲,清除 DTRNG_STAT.RANDOM_RDY。
1.7 reset
void ll_dtrng_reset_assert(dtrng_regs_t *dtrngx); void ll_dtrng_reset_release(dtrng_regs_t *dtrngx); bool ll_dtrng_reset_is_released(const dtrng_regs_t *dtrngx);
RSTN 为 active-low,并由硬件自动恢复。读取时 bit 为 1 表示 reset 已释放。
1.8 random 与 status
uint32_t ll_dtrng_random_get(const dtrng_regs_t *dtrngx); uint32_t ll_dtrng_status_get(const dtrng_regs_t *dtrngx); bool ll_dtrng_random_ready(const dtrng_regs_t *dtrngx);
RANDOMNUM:32-bit random wordSTAT:状态寄存器STAT.RANDOM_RDY:随机数可读
2. 寄存器
| Offset | 寄存器 | 访问 | 用途 |
|---|---|---|---|
0x000 | CFG | RW | line enable、reset、ready clear、interrupt mask、divider、gen enable |
0x004 | RANDOMNUM | RO | 随机数输出 |
0x008 | STAT | RO | 随机数 ready 状态 |
2.1 CFG 字段
| 字段 | bit | 说明 |
|---|---|---|
LINE_EN | [25:16] | 10 条 entropy line 使能 |
RSTN | 15 | active-low reset,硬件自动恢复 |
RDY_CLR | 12 | ready-clear 脉冲 |
INT_MASK | 11 | 1 屏蔽中断输出 |
DIV_NUM | [10:1] | divider |
GEN_EN | 0 | generator enable |
2.2 STAT 字段
| 字段 | bit | 说明 |
|---|---|---|
RANDOM_RDY | 0 | 新随机 word 可读 |
3. 使用流程
3.1 LL interrupt
中断路径由调用方申请 SoC IRQ:
配置 lines、divider 和 IRQ 路由。
mask DTRNG,清除旧 ready。
ll_dtrng_interrupt_unmask()。enable generator。
IRQ 中读取
RANDOMNUM,清除 ready,并建议 mask + disable 防止 level interrupt 重复进入。任务上下文决定是否重新 enable 下一轮。
DTRNG HAL 不管理 SoC IRQ。