diff options
| author | Lucas Granberg <[email protected]> | 2023-08-10 16:16:45 +0300 |
|---|---|---|
| committer | Lucas Granberg <[email protected]> | 2023-08-10 16:16:45 +0300 |
| commit | bc156afbb2950ae073d0f271f26517cf16b35263 (patch) | |
| tree | 4d8d6133648beb955ae4cf1542a13ec03ced2e3d | |
| parent | 8d71fbd032f148fdeb96794c1f34b8a9c8a6abdf (diff) | |
fix rng ced toggling sequence on reset.
| -rw-r--r-- | embassy-stm32/src/rng.rs | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/embassy-stm32/src/rng.rs b/embassy-stm32/src/rng.rs index 2a4978ec5..30816e436 100644 --- a/embassy-stm32/src/rng.rs +++ b/embassy-stm32/src/rng.rs | |||
| @@ -73,15 +73,20 @@ impl<'d, T: Instance> Rng<'d, T> { | |||
| 73 | #[cfg(not(rng_v1))] | 73 | #[cfg(not(rng_v1))] |
| 74 | pub fn reset(&mut self) { | 74 | pub fn reset(&mut self) { |
| 75 | T::regs().cr().write(|reg| { | 75 | T::regs().cr().write(|reg| { |
| 76 | reg.set_rngen(false); | ||
| 77 | reg.set_condrst(true); | 76 | reg.set_condrst(true); |
| 77 | reg.set_nistc(pac::rng::vals::Nistc::CUSTOM); | ||
| 78 | // set RNG config "A" according to reference manual | 78 | // set RNG config "A" according to reference manual |
| 79 | // this has to be written within the same write access as setting the CONDRST bit | 79 | // this has to be written within the same write access as setting the CONDRST bit |
| 80 | reg.set_nistc(pac::rng::vals::Nistc::DEFAULT); | ||
| 81 | reg.set_rng_config1(pac::rng::vals::RngConfig1::CONFIGA); | 80 | reg.set_rng_config1(pac::rng::vals::RngConfig1::CONFIGA); |
| 81 | reg.set_clkdiv(pac::rng::vals::Clkdiv::NODIV); | ||
| 82 | reg.set_rng_config2(pac::rng::vals::RngConfig2::CONFIGA_B); | 82 | reg.set_rng_config2(pac::rng::vals::RngConfig2::CONFIGA_B); |
| 83 | reg.set_rng_config3(pac::rng::vals::RngConfig3::CONFIGA); | 83 | reg.set_rng_config3(pac::rng::vals::RngConfig3::CONFIGA); |
| 84 | reg.set_clkdiv(pac::rng::vals::Clkdiv::NODIV); | 84 | reg.set_ced(true); |
| 85 | reg.set_ie(false); | ||
| 86 | reg.set_rngen(true); | ||
| 87 | }); | ||
| 88 | T::regs().cr().write(|reg| { | ||
| 89 | reg.set_ced(false); | ||
| 85 | }); | 90 | }); |
| 86 | // wait for CONDRST to be set | 91 | // wait for CONDRST to be set |
| 87 | while !T::regs().cr().read().condrst() {} | 92 | while !T::regs().cr().read().condrst() {} |
