aboutsummaryrefslogtreecommitdiff
path: root/examples/rp235x/src/bin/trng.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/rp235x/src/bin/trng.rs')
-rw-r--r--examples/rp235x/src/bin/trng.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/examples/rp235x/src/bin/trng.rs b/examples/rp235x/src/bin/trng.rs
new file mode 100644
index 000000000..ad19aef3e
--- /dev/null
+++ b/examples/rp235x/src/bin/trng.rs
@@ -0,0 +1,49 @@
1//! This example shows TRNG usage
2
3#![no_std]
4#![no_main]
5
6use defmt::*;
7use embassy_executor::Spawner;
8use embassy_rp::bind_interrupts;
9use embassy_rp::gpio::{Level, Output};
10use embassy_rp::peripherals::TRNG;
11use embassy_rp::trng::Trng;
12use embassy_time::Timer;
13use rand::RngCore;
14use {defmt_rtt as _, panic_probe as _};
15
16bind_interrupts!(struct Irqs {
17 TRNG_IRQ => embassy_rp::trng::InterruptHandler<TRNG>;
18});
19
20#[embassy_executor::main]
21async fn main(_spawner: Spawner) {
22 let peripherals = embassy_rp::init(Default::default());
23
24 // Initialize the TRNG with default configuration
25 let mut trng = Trng::new(peripherals.TRNG, Irqs, embassy_rp::trng::Config::default());
26 // A buffer to collect random bytes in.
27 let mut randomness = [0u8; 58];
28
29 let mut led = Output::new(peripherals.PIN_25, Level::Low);
30
31 loop {
32 trng.fill_bytes(&mut randomness).await;
33 info!("Random bytes async {}", &randomness);
34 trng.blocking_fill_bytes(&mut randomness);
35 info!("Random bytes blocking {}", &randomness);
36 let random_u32 = trng.next_u32();
37 let random_u64 = trng.next_u64();
38 info!("Random u32 {} u64 {}", random_u32, random_u64);
39 // Random number of blinks between 0 and 31
40 let blinks = random_u32 % 32;
41 for _ in 0..blinks {
42 led.set_high();
43 Timer::after_millis(20).await;
44 led.set_low();
45 Timer::after_millis(20).await;
46 }
47 Timer::after_millis(1000).await;
48 }
49}