RNG Interrupt
RNG Interrupt示例实现了通过中断方式获取RNG随机数。示例工程中采用用户提供的种子以及开关振荡器S0提供的种子两种方式产生随机数。
RNG Interrupt示例的源代码和工程文件位于SDK_Folder\projects\peripheral\rng\rng_interrupt,其中工程文件在文件夹Keil_5下。
代码理解
示例工程流程图如图 24所示:
- 使用用户提供的种子生成随机数的初始化。
uint16_t g_random_seed[8] = {0x1234, 0x5678, 0x90AB, 0xCDEF, 0x1468, 0x2345, 0x5329, 0x2411}; g_rng_handle.init.seed_mode = RNG_SEED_USER; g_rng_handle.init.lfsr_mode = RNG_LFSR_MODE_59BIT; g_rng_handle.init.out_mode = RNG_OUTPUT_LFSR; g_rng_handle.init.post_mode = RNG_POST_PRO_NOT; hal_rng_deinit(&g_rng_handle); hal_rng_init(&g_rng_handle);- seed_mode:种子源的选择,可选择RNG_SEED_FR0_S0、RNG_SEED_USER。
- lfsr_mode:为LFSR选择模式,可选择RNG_LFSR_MODE_59BIT、RNG_LFSR_MODE_128BIT。
- out_mode:输出方式,可选择RNG_OUTPUT_FR0_S0、RNG_OUTPUT_CYCLIC_PARITY、RNG_OUTPUT_CYCLIC、
RNG_OUTPUT_LFSR。说明:
当seed_mode种子源的选择为RNG_SEED_USER时,out_mode输出方式不能选择RNG_OUTPUT_FR0_S0。
- post_mode:后处理模式,可选择RNG_POST_PRO_NOT、RNG_POST_PRO_SKIPPING、RNG_POST_PRO_COUNTING、
RNG_POST_PRO_NEUMANN。
- 使用开关振荡器S0种子生成随机数的初始化。
g_rng_handle.init.seed_mode = RNG_SEED_FR0_S0; g_rng_handle.init.lfsr_mode = RNG_LFSR_MODE_128BIT; g_rng_handle.init.out_mode = RNG_OUTPUT_FR0_S0; hal_rng_deinit(&g_rng_handle); hal_rng_init(&g_rng_handle);- seed_mode:种子源的选择,此处选择RNG_SEED_FR0_S0,开关振荡器s0提供的种子。
- lfsr_mode:LFSR选择,此处选择RNG_LFSR_MODE_128BIT。
- out_mode:输出方式,此处选择RNG_OUTPUT_FR0_S0。
- 中断方式接口生成随机数。代码如下:
hal_rng_generate_random_number_it(&g_rng_handle, g_random_seed);
测试验证
- 用GProgrammer下载rng_interrupt.bin至开发板。
- 将开发板串口连接至PC端,打开并配置GRUart。
- 在GRUart的Receive Data窗口中将会显示获取到的随机数。