2017-01-17 4 views
0

Armのマイクロコントローラプログラミングでは新しいです。私はデータシートを読んで、これを見つけた:ハードウェア乱数ジェネレータエラーアームM4

  1. リセット/初期化。
  2. CR[INTM]への書き込み1、CR[HA]、及びCR[GO]
  3. ポーリングSR[OREG_LVL]SR[OREG_LVL]が0でない場合には0
  4. なくなるまで、 OR[RANDOUT]
  5. 必要に応じて繰り返し3及び4ステップから利用可能なランダムデータを読み出します。

これは、乱数を生成する手順です。誰かが私にコード例を教えてもらえますか?私は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) { } 
} 
+4

ARMは、マイクロプロセッサ*コア用のアーキテクチャの全ファミリです。コア自体にはRNGハードウェアはありません。特定のチップに固有のもので、データシートへのリンクを指定して指定する必要があります。 –

+0

@EugeneのSh https://www.google.com.ar/url?sa=t&source=web&rct=j&url=https://www.pjrc.com/teensy/K64P144M120SF5RM.pdf&ved=0ahUKEwii1YabkcrRAhVHD5AKHcw_Ai4QFgggMAE&usg=AFQjCNG3n8izN9FYRkglnYBFnIbsGBW1jA MK64FX512VLL12 –

+1

特には何あなたはやっていることに問題がありますデータシートが作成するステップは明らかです(いくつかのレジスタを書いて、他のものを読んでください)。どのような手順で問題が発生していますか?データシートのメモによると、OREG_LVLは0x4002_9004のRNG_SRにあります。0x4002_900CのRNG_ORはRANDOUT ... – Ross

答えて

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は、新たな乱数を返す必要があります(必ずしも異なるとは限りません)。