aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus Melchior Jacobsen <[email protected]>2023-05-26 23:48:49 +0200
committerRasmus Melchior Jacobsen <[email protected]>2023-05-26 23:48:49 +0200
commitcb5df138d6048878a4311ecec63a632c7e20e34a (patch)
tree4ba28a21d1d3865500de7c811488e91e3a049dd0
parentf616b2215912dca6fd76523d390d0602dfa27bcd (diff)
Use found divider instead of re-reading brr
-rw-r--r--embassy-stm32/src/usart/mod.rs14
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 {