diff options
| author | Rasmus Melchior Jacobsen <[email protected]> | 2023-05-26 23:48:49 +0200 |
|---|---|---|
| committer | Rasmus Melchior Jacobsen <[email protected]> | 2023-05-26 23:48:49 +0200 |
| commit | cb5df138d6048878a4311ecec63a632c7e20e34a (patch) | |
| tree | 4ba28a21d1d3865500de7c811488e91e3a049dd0 /embassy-stm32 | |
| parent | f616b2215912dca6fd76523d390d0602dfa27bcd (diff) | |
Use found divider instead of re-reading brr
Diffstat (limited to 'embassy-stm32')
| -rw-r--r-- | embassy-stm32/src/usart/mod.rs | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs index 565416c72..061c859a8 100644 --- a/embassy-stm32/src/usart/mod.rs +++ b/embassy-stm32/src/usart/mod.rs | |||
| @@ -836,7 +836,7 @@ fn configure(r: Regs, config: &Config, pclk_freq: Hertz, kind: Kind, enable_rx: | |||
| 836 | 836 | ||
| 837 | #[cfg(not(usart_v1))] | 837 | #[cfg(not(usart_v1))] |
| 838 | let mut over8 = false; | 838 | let mut over8 = false; |
| 839 | let mut found = false; | 839 | let mut found = None; |
| 840 | for &(presc, _presc_val) in &DIVS { | 840 | for &(presc, _presc_val) in &DIVS { |
| 841 | let denom = (config.baudrate * presc as u32) as u64; | 841 | let denom = (config.baudrate * presc as u32) as u64; |
| 842 | let div = (pclk_freq.0 as u64 * mul + (denom / 2)) / denom; | 842 | let div = (pclk_freq.0 as u64 * mul + (denom / 2)) / denom; |
| @@ -858,26 +858,26 @@ fn configure(r: Regs, config: &Config, pclk_freq: Hertz, kind: Kind, enable_rx: | |||
| 858 | #[cfg(usart_v4)] | 858 | #[cfg(usart_v4)] |
| 859 | r.presc().write(|w| w.set_prescaler(_presc_val)); | 859 | r.presc().write(|w| w.set_prescaler(_presc_val)); |
| 860 | } | 860 | } |
| 861 | found = true; | 861 | found = Some(div); |
| 862 | break; | 862 | break; |
| 863 | } | 863 | } |
| 864 | panic!("USART: baudrate too high"); | 864 | panic!("USART: baudrate too high"); |
| 865 | } | 865 | } |
| 866 | 866 | ||
| 867 | if div < brr_max { | 867 | if div < brr_max { |
| 868 | let div = div as u32; | ||
| 868 | unsafe { | 869 | unsafe { |
| 869 | r.brr().write_value(regs::Brr(div as u32)); | 870 | r.brr().write_value(regs::Brr(div)); |
| 870 | #[cfg(usart_v4)] | 871 | #[cfg(usart_v4)] |
| 871 | r.presc().write(|w| w.set_prescaler(_presc_val)); | 872 | r.presc().write(|w| w.set_prescaler(_presc_val)); |
| 872 | } | 873 | } |
| 873 | found = true; | 874 | found = Some(div); |
| 874 | break; | 875 | break; |
| 875 | } | 876 | } |
| 876 | } | 877 | } |
| 877 | 878 | ||
| 878 | assert!(found, "USART: baudrate too low"); | 879 | let div = found.expect("USART: baudrate too low"); |
| 879 | 880 | ||
| 880 | let brr = unsafe { r.brr().read().brr() as u32 }; | ||
| 881 | #[cfg(not(usart_v1))] | 881 | #[cfg(not(usart_v1))] |
| 882 | let oversampling = if over8 { "8 bit" } else { "16 bit" }; | 882 | let oversampling = if over8 { "8 bit" } else { "16 bit" }; |
| 883 | #[cfg(usart_v1)] | 883 | #[cfg(usart_v1)] |
| @@ -886,7 +886,7 @@ fn configure(r: Regs, config: &Config, pclk_freq: Hertz, kind: Kind, enable_rx: | |||
| 886 | "Using {} oversampling, desired baudrate: {}, actual baudrate: {}", | 886 | "Using {} oversampling, desired baudrate: {}, actual baudrate: {}", |
| 887 | oversampling, | 887 | oversampling, |
| 888 | config.baudrate, | 888 | config.baudrate, |
| 889 | pclk_freq.0 / brr | 889 | pclk_freq.0 / div |
| 890 | ); | 890 | ); |
| 891 | 891 | ||
| 892 | unsafe { | 892 | unsafe { |
