diff options
| author | Dario Nieuwenhuis <[email protected]> | 2021-03-28 22:39:09 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2021-03-29 00:58:58 +0200 |
| commit | aa0341056ea086a6ec084d78a381066ae2333e53 (patch) | |
| tree | 87e46e4f38342b2ca5340e580f23eea215351a7a | |
| parent | b6496a85d89beb0f9bc4d3db2f39d82e8768e5da (diff) | |
nrf/uarte: deal with hwfc correctly
| -rw-r--r-- | embassy-nrf/src/uarte.rs | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/embassy-nrf/src/uarte.rs b/embassy-nrf/src/uarte.rs index 63dedcdcc..5effe046a 100644 --- a/embassy-nrf/src/uarte.rs +++ b/embassy-nrf/src/uarte.rs | |||
| @@ -11,14 +11,14 @@ use embassy_extras::peripheral_shared::{Peripheral, PeripheralState}; | |||
| 11 | use embassy_extras::unborrow; | 11 | use embassy_extras::unborrow; |
| 12 | use futures::future::poll_fn; | 12 | use futures::future::poll_fn; |
| 13 | 13 | ||
| 14 | use crate::fmt::{assert, *}; | 14 | use crate::fmt::{assert, panic, *}; |
| 15 | use crate::gpio::sealed::Pin as _; | 15 | use crate::gpio::sealed::Pin as _; |
| 16 | use crate::gpio::{OptionalPin as GpioOptionalPin, Pin as GpioPin}; | 16 | use crate::gpio::{OptionalPin as GpioOptionalPin, Pin as GpioPin}; |
| 17 | use crate::hal::pac; | ||
| 18 | use crate::hal::target_constants::EASY_DMA_SIZE; | ||
| 19 | use crate::interrupt; | 17 | use crate::interrupt; |
| 20 | use crate::interrupt::Interrupt; | 18 | use crate::interrupt::Interrupt; |
| 19 | use crate::pac; | ||
| 21 | use crate::peripherals; | 20 | use crate::peripherals; |
| 21 | use crate::target_constants::EASY_DMA_SIZE; | ||
| 22 | 22 | ||
| 23 | // Re-export SVD variants to allow user to directly set values. | 23 | // Re-export SVD variants to allow user to directly set values. |
| 24 | pub use pac::uarte0::{baudrate::BAUDRATE_A as Baudrate, config::PARITY_A as Parity}; | 24 | pub use pac::uarte0::{baudrate::BAUDRATE_A as Baudrate, config::PARITY_A as Parity}; |
| @@ -94,8 +94,18 @@ impl<'d, T: Instance> Uarte<'d, T> { | |||
| 94 | } | 94 | } |
| 95 | r.psel.rts.write(|w| unsafe { w.bits(rts.psel_bits()) }); | 95 | r.psel.rts.write(|w| unsafe { w.bits(rts.psel_bits()) }); |
| 96 | 96 | ||
| 97 | // Configure | ||
| 98 | let hardware_flow_control = match (rts.pin().is_some(), cts.pin().is_some()) { | ||
| 99 | (false, false) => false, | ||
| 100 | (true, true) => true, | ||
| 101 | _ => panic!("RTS and CTS pins must be either both set or none set."), | ||
| 102 | }; | ||
| 103 | r.config.write(|w| { | ||
| 104 | w.hwfc().bit(hardware_flow_control); | ||
| 105 | w.parity().variant(config.parity); | ||
| 106 | w | ||
| 107 | }); | ||
| 97 | r.baudrate.write(|w| w.baudrate().variant(config.baudrate)); | 108 | r.baudrate.write(|w| w.baudrate().variant(config.baudrate)); |
| 98 | r.config.write(|w| w.parity().variant(config.parity)); | ||
| 99 | 109 | ||
| 100 | // Disable all interrupts | 110 | // Disable all interrupts |
| 101 | r.intenclr.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); | 111 | r.intenclr.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); |
