From 8a4ab298192c388bed09fc198ee1786561cd50f9 Mon Sep 17 00:00:00 2001 From: Liam Murphy Date: Tue, 29 Jun 2021 17:26:16 +1000 Subject: Add an nRF RNG driver Resolves #187 Like the stm32 driver, this has both a non-blocking and blocking API, and implements `rand_core::RngCore` for the blocking API. --- examples/nrf/src/bin/rng.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 examples/nrf/src/bin/rng.rs (limited to 'examples/nrf/src') diff --git a/examples/nrf/src/bin/rng.rs b/examples/nrf/src/bin/rng.rs new file mode 100644 index 000000000..a4c204c2e --- /dev/null +++ b/examples/nrf/src/bin/rng.rs @@ -0,0 +1,30 @@ +#![no_std] +#![no_main] +#![feature(min_type_alias_impl_trait)] +#![feature(impl_trait_in_bindings)] +#![feature(type_alias_impl_trait)] +#![allow(incomplete_features)] + +#[path = "../example_common.rs"] +mod example_common; + +use defmt::panic; +use embassy::executor::Spawner; +use embassy_nrf::Peripherals; +use embassy_nrf::rng::Rng; +use embassy_nrf::interrupt; +use embassy::traits::rng::Rng as _; +use rand::Rng as _; + +#[embassy::main] +async fn main(_spawner: Spawner, p: Peripherals) { + let mut rng = Rng::new(p.RNG, interrupt::take!(RNG)); + + // Async API + let mut bytes = [0; 4]; + rng.fill_bytes(&mut bytes).await.unwrap(); // nRF RNG is infallible + defmt::info!("Some random bytes: {:?}", bytes); + + // Sync API with `rand` + defmt::info!("A random number from 1 to 10: {:?}", rng.gen_range(1..=10)); +} -- cgit