aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-stm32/src/rng.rs11
m---------stm32-data0
2 files changed, 9 insertions, 2 deletions
diff --git a/embassy-stm32/src/rng.rs b/embassy-stm32/src/rng.rs
index 10fc4a75e..1e16b8478 100644
--- a/embassy-stm32/src/rng.rs
+++ b/embassy-stm32/src/rng.rs
@@ -32,6 +32,11 @@ impl<'d, T: Instance> Rng<'d, T> {
32 } 32 }
33 33
34 pub fn reset(&mut self) { 34 pub fn reset(&mut self) {
35 // rng_v2 locks up on seed error, needs reset
36 #[cfg(rng_v2)]
37 if unsafe { T::regs().sr().read().seis() } {
38 T::reset();
39 }
35 unsafe { 40 unsafe {
36 T::regs().cr().modify(|reg| { 41 T::regs().cr().modify(|reg| {
37 reg.set_rngen(true); 42 reg.set_rngen(true);
@@ -90,8 +95,10 @@ impl<'d, T: Instance> Rng<'d, T> {
90impl<'d, T: Instance> RngCore for Rng<'d, T> { 95impl<'d, T: Instance> RngCore for Rng<'d, T> {
91 fn next_u32(&mut self) -> u32 { 96 fn next_u32(&mut self) -> u32 {
92 loop { 97 loop {
93 let bits = unsafe { T::regs().sr().read() }; 98 let sr = unsafe { T::regs().sr().read() };
94 if bits.drdy() { 99 if sr.seis() | sr.ceis() {
100 self.reset();
101 } else if sr.drdy() {
95 return unsafe { T::regs().dr().read() }; 102 return unsafe { T::regs().dr().read() };
96 } 103 }
97 } 104 }
diff --git a/stm32-data b/stm32-data
Subproject cc93f9d10395077770bebefb6b9488e06b0e581 Subproject 66252982939014e94fc4a1b7423c30c3d108ae0