硬件随机数发生器错误Arm M4

时间:2017-01-17 21:01:25

标签: c arm embedded microcontroller

我是Arm微控制器编程的新手。我阅读了数据表,发现了这个:

  1. 复位/初始化。
  2. 将1写入CR[INTM]CR[HA]CR[GO]
  3. 轮询SR[OREG_LVL],直到它不为0.
  4. SR[OREG_LVL]不为0时,请从中读取可用的随机数据 OR[RANDOUT]
  5. 根据需要重复步骤3和4.
  6. 这些是生成随机数的步骤。有人可以给我一个代码示例吗?我正在使用k64子系列,特别是MK64FX512VLL12

    这是我尝试过的:

    void Rng_Test() 
    { 
      RNG->CR |= RNG_CR_SLP_MASK; 
      RNG->CR |= RNG_CR_GO_MASK; 
      RNG->CR |= RNG_CR_HA_MASK; 
      RNG->CR |= RNG_CR_INTM_MASK; 
      while (RNG_SR_OREG_LVL_MASK == 0) { } 
    }
    

1 个答案:

答案 0 :(得分:0)

使用您已有的代码

void Rng_Init() {
    RNG->CR |= RNG_CR_SLP_MASK; 
    RNG->CR |= RNG_CR_GO_MASK; 
    RNG->CR |= RNG_CR_HA_MASK;
    RNG->CR |= RNG_CR_INTM_MASK; 
}

int Rng_GetRand() {
    while ((RNG->SR & RNG_SR_OREG_LVL_MASK) == 0);
    return RNG->OR;
}

上述内容应该有效,Rng_Init()只需要一次,Rng_GetRand每次调用都应该返回一个新的随机数(不一定不同)。