启用TRNG DLL
c
复制代码
hc32a4xx_conf.h
#define LL_TRNG_ENABLE (DDL_ON)
初始化TRNG
c
复制代码
void MCU_TRNG_init(void)
{
/* 开启TRNG功能 */
FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_TRNG, ENABLE);
/* TRNG初始化 */
TRNG_Init(TRNG_SHIFT_CNT64, TRNG_RELOAD_INIT_VAL_ENABLE);
TRNG_Cmd(ENABLE);
/* 开启TRNG中断 */
NVIC_ClearPendingIRQ(TRNG_IRQn);
NVIC_SetPriority(TRNG_IRQn, DDL_IRQ_PRIO_15);
NVIC_EnableIRQ(TRNG_IRQn);
}
TRNG中断
c
复制代码
void TRNG_Handler(void)
{
(void)TRNG_GetRandom(MCU_TRNG_au32Random, 2U);
printf(6, 0, "[TRNG] 0x%x, 0x%x\r\n",
(unsigned int)MCU_TRNG_au32Random[0U],
(unsigned int)MCU_TRNG_au32Random[1U]
);
__DSB();
}
主函数
c
复制代码
int32_t main(void)
{
/* Register write unprotected for some required peripherals. */
LL_PERIPH_WE(LL_PERIPH_GPIO | LL_PERIPH_ALL | LL_PERIPH_PWC_CLK_RMU);
//Clock Config
MCU_App_ClkCfg();
//Port Config
App_PortCfg();
/* Register write protected for some required peripherals. */
// 初始化随机数
MCU_TRNG_init();
LL_PERIPH_WP(LL_PERIPH_GPIO | LL_PERIPH_ALL | LL_PERIPH_PWC_CLK_RMU);
while(1) {
DDL_DelayMS(1000);
// 启动生成随机数
TRNG_Start();
DDL_DelayMS(1000);
// 启动生成随机数
TRNG_Start();
}
}
程序执行效果