aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2021-03-28 22:39:09 +0200
committerDario Nieuwenhuis <[email protected]>2021-03-29 00:58:58 +0200
commitaa0341056ea086a6ec084d78a381066ae2333e53 (patch)
tree87e46e4f38342b2ca5340e580f23eea215351a7a
parentb6496a85d89beb0f9bc4d3db2f39d82e8768e5da (diff)
nrf/uarte: deal with hwfc correctly
-rw-r--r--embassy-nrf/src/uarte.rs18
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};
11use embassy_extras::unborrow; 11use embassy_extras::unborrow;
12use futures::future::poll_fn; 12use futures::future::poll_fn;
13 13
14use crate::fmt::{assert, *}; 14use crate::fmt::{assert, panic, *};
15use crate::gpio::sealed::Pin as _; 15use crate::gpio::sealed::Pin as _;
16use crate::gpio::{OptionalPin as GpioOptionalPin, Pin as GpioPin}; 16use crate::gpio::{OptionalPin as GpioOptionalPin, Pin as GpioPin};
17use crate::hal::pac;
18use crate::hal::target_constants::EASY_DMA_SIZE;
19use crate::interrupt; 17use crate::interrupt;
20use crate::interrupt::Interrupt; 18use crate::interrupt::Interrupt;
19use crate::pac;
21use crate::peripherals; 20use crate::peripherals;
21use 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.
24pub use pac::uarte0::{baudrate::BAUDRATE_A as Baudrate, config::PARITY_A as Parity}; 24pub 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) });