diff options
| author | Jan Špaček <[email protected]> | 2024-06-03 20:12:33 +0200 |
|---|---|---|
| committer | Jan Špaček <[email protected]> | 2024-06-03 20:12:33 +0200 |
| commit | f3703ff6bfed6f8342b49cfd9a65d543d1c99c27 (patch) | |
| tree | f56bdbb147188fe3ae4ab58c3ddc2b98a199a884 | |
| parent | 664e4a5c032d2291beedf1ead706f5d17b8178da (diff) | |
stm32/usart: set refcount even if initialization failed
| -rw-r--r-- | embassy-stm32/src/usart/buffered.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/usart/mod.rs | 6 |
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 | ||
