aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Špaček <[email protected]>2024-06-03 20:12:33 +0200
committerJan Špaček <[email protected]>2024-06-03 20:12:33 +0200
commitf3703ff6bfed6f8342b49cfd9a65d543d1c99c27 (patch)
treef56bdbb147188fe3ae4ab58c3ddc2b98a199a884
parent664e4a5c032d2291beedf1ead706f5d17b8178da (diff)
stm32/usart: set refcount even if initialization failed
-rw-r--r--embassy-stm32/src/usart/buffered.rs2
-rw-r--r--embassy-stm32/src/usart/mod.rs6
2 files changed, 4 insertions, 4 deletions
diff --git a/embassy-stm32/src/usart/buffered.rs b/embassy-stm32/src/usart/buffered.rs
index 09d020a7b..fd79e035e 100644
--- a/embassy-stm32/src/usart/buffered.rs
+++ b/embassy-stm32/src/usart/buffered.rs
@@ -315,6 +315,7 @@ impl<'d> BufferedUart<'d> {
315 ) -> Result<(), ConfigError> { 315 ) -> Result<(), ConfigError> {
316 let info = self.rx.info; 316 let info = self.rx.info;
317 let state = self.rx.state; 317 let state = self.rx.state;
318 state.tx_rx_refcount.store(2, Ordering::Relaxed);
318 319
319 info.rcc.enable_and_reset(); 320 info.rcc.enable_and_reset();
320 321
@@ -339,7 +340,6 @@ impl<'d> BufferedUart<'d> {
339 info.interrupt.unpend(); 340 info.interrupt.unpend();
340 unsafe { info.interrupt.enable() }; 341 unsafe { info.interrupt.enable() };
341 342
342 state.tx_rx_refcount.store(2, Ordering::Relaxed);
343 Ok(()) 343 Ok(())
344 } 344 }
345 345
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs
index df5121f67..53321391a 100644
--- a/embassy-stm32/src/usart/mod.rs
+++ b/embassy-stm32/src/usart/mod.rs
@@ -446,6 +446,7 @@ impl<'d, M: Mode> UartTx<'d, M> {
446 fn enable_and_configure(&mut self, config: &Config) -> Result<(), ConfigError> { 446 fn enable_and_configure(&mut self, config: &Config) -> Result<(), ConfigError> {
447 let info = self.info; 447 let info = self.info;
448 let state = self.state; 448 let state = self.state;
449 state.tx_rx_refcount.store(1, Ordering::Relaxed);
449 450
450 info.rcc.enable_and_reset(); 451 info.rcc.enable_and_reset();
451 452
@@ -454,7 +455,6 @@ impl<'d, M: Mode> UartTx<'d, M> {
454 }); 455 });
455 configure(info, self.kernel_clock, config, false, true)?; 456 configure(info, self.kernel_clock, config, false, true)?;
456 457
457 state.tx_rx_refcount.store(1, Ordering::Relaxed);
458 Ok(()) 458 Ok(())
459 } 459 }
460 460
@@ -798,6 +798,7 @@ impl<'d, M: Mode> UartRx<'d, M> {
798 fn enable_and_configure(&mut self, config: &Config) -> Result<(), ConfigError> { 798 fn enable_and_configure(&mut self, config: &Config) -> Result<(), ConfigError> {
799 let info = self.info; 799 let info = self.info;
800 let state = self.state; 800 let state = self.state;
801 state.tx_rx_refcount.store(1, Ordering::Relaxed);
801 802
802 info.rcc.enable_and_reset(); 803 info.rcc.enable_and_reset();
803 804
@@ -809,7 +810,6 @@ impl<'d, M: Mode> UartRx<'d, M> {
809 info.interrupt.unpend(); 810 info.interrupt.unpend();
810 unsafe { info.interrupt.enable() }; 811 unsafe { info.interrupt.enable() };
811 812
812 state.tx_rx_refcount.store(1, Ordering::Relaxed);
813 Ok(()) 813 Ok(())
814 } 814 }
815 815
@@ -1271,6 +1271,7 @@ impl<'d, M: Mode> Uart<'d, M> {
1271 fn enable_and_configure(&mut self, config: &Config) -> Result<(), ConfigError> { 1271 fn enable_and_configure(&mut self, config: &Config) -> Result<(), ConfigError> {
1272 let info = self.rx.info; 1272 let info = self.rx.info;
1273 let state = self.rx.state; 1273 let state = self.rx.state;
1274 state.tx_rx_refcount.store(2, Ordering::Relaxed);
1274 1275
1275 info.rcc.enable_and_reset(); 1276 info.rcc.enable_and_reset();
1276 1277
@@ -1285,7 +1286,6 @@ impl<'d, M: Mode> Uart<'d, M> {
1285 info.interrupt.unpend(); 1286 info.interrupt.unpend();
1286 unsafe { info.interrupt.enable() }; 1287 unsafe { info.interrupt.enable() };
1287 1288
1288 state.tx_rx_refcount.store(2, Ordering::Relaxed);
1289 Ok(()) 1289 Ok(())
1290 } 1290 }
1291 1291