Notes
The true random number generator continuously generates new bits. Each new bit is shifted into the RNGSEED
register from the right.
Old bit ← RNGSEED2
← RNGSEED1
← New bit.
Example
ao_leds_t ld;
ao_leds_t le;
uint32_t v;
ao_rngt_enable();
while (1)
{
// Wait until 3 bits have been generated.
while (ao_rngt_bits() < 3);
// Read the random number.
v = ao_rngt_value_lo();
v = v & 0b111;
// LEDs.
le = AO_LEDS_NONE;
ld = AO_LEDS_NONE;
if (v & (1 << 0)) { le |= AO_LEDS_0; } else { ld |= AO_LEDS_0; }
if (v & (1 << 1)) { le |= AO_LEDS_1; } else { ld |= AO_LEDS_1; }
if (v & (1 << 2)) { le |= AO_LEDS_2; } else { ld |= AO_LEDS_2; }
ao_leds_enable(le);
ao_leds_disable(ld);
// Spin.
ao_spin(AO_MILLISECONDS(100));
}
Include
stdint.h |
xc.h |
Functions
ao_rngt_enable
ao_rngt_disable
#define ao_rngt_enable() { RNGCONbits.TRNGEN = 1; }
#define ao_rngt_disable() { RNGCONbits.TRNGEN = 0; }
Enables or disables the true random number generator.
ao_rngt_bits
#define ao_rngt_bits() (RNGCNT)
Gets the number of bits that have been generate since the last read.
ao_rngt_value
#define ao_rngt_value() \
( \
((uint64_t) RNGSEED2 << 32) | \
(uint64_t) RNGSEED1 \
)
Gets the generated value.
ao_rngt_value_hi
ao_rngt_value_lo
#define ao_rngt_value_hi() (RNGSEED2)
#define ao_rngt_value_lo() (RNGSEED1)
Gets the most or least significant 32 bits, respectively, of the generated value.