CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

RNG Interrupt

RNG Interrupt示例实现了通过中断方式获取RNG随机数。示例工程中采用用户提供的种子以及开关振荡器S0提供的种子两种方式产生随机数。

RNG Interrupt示例的源代码和工程文件位于SDK_Folder\projects\peripheral\rng\rng_interrupt,其中工程文件在文件夹Keil_5下。

代码理解

示例工程流程图如图 24所示:

图 24 RNG Interrupt示例工程流程图
  1. 使用用户提供的种子生成随机数的初始化。
    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。

  2. 使用开关振荡器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。
  3. 中断方式接口生成随机数。代码如下:
    hal_rng_generate_random_number_it(&g_rng_handle, g_random_seed);

测试验证

  1. 用GProgrammer下载rng_interrupt.bin至开发板。
  2. 将开发板串口连接至PC端,打开并配置GRUart。
  3. 在GRUart的Receive Data窗口中将会显示获取到的随机数。

扫描关注

打开微信,使用“扫一扫”即可关注。