aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-nrf-examples/Cargo.toml2
-rw-r--r--embassy-nrf/Cargo.toml10
-rw-r--r--embassy-nrf/src/buffered_uarte.rs26
-rw-r--r--embassy-nrf/src/qspi.rs27
-rw-r--r--embassy-nrf/src/spim.rs21
-rw-r--r--embassy-nrf/src/uarte.rs27
6 files changed, 25 insertions, 88 deletions
diff --git a/embassy-nrf-examples/Cargo.toml b/embassy-nrf-examples/Cargo.toml
index 1f67b6a8c..432e89504 100644
--- a/embassy-nrf-examples/Cargo.toml
+++ b/embassy-nrf-examples/Cargo.toml
@@ -28,5 +28,5 @@ cortex-m = { version = "0.7.1", features = ["inline-asm"] }
28cortex-m-rt = "0.6.13" 28cortex-m-rt = "0.6.13"
29embedded-hal = { version = "0.2.4" } 29embedded-hal = { version = "0.2.4" }
30panic-probe = "0.1.0" 30panic-probe = "0.1.0"
31nrf52840-hal = { version = "0.12.0" } 31nrf52840-hal = { version = "0.12.1" }
32futures = { version = "0.3.8", default-features = false, features = ["async-await"] } \ No newline at end of file 32futures = { version = "0.3.8", default-features = false, features = ["async-await"] } \ No newline at end of file
diff --git a/embassy-nrf/Cargo.toml b/embassy-nrf/Cargo.toml
index 6324792fc..419b7f33f 100644
--- a/embassy-nrf/Cargo.toml
+++ b/embassy-nrf/Cargo.toml
@@ -35,8 +35,8 @@ nrf52832-pac = { version = "0.9.0", optional = true }
35nrf52833-pac = { version = "0.9.0", optional = true } 35nrf52833-pac = { version = "0.9.0", optional = true }
36nrf52840-pac = { version = "0.9.0", optional = true } 36nrf52840-pac = { version = "0.9.0", optional = true }
37 37
38nrf52810-hal = { version = "0.12.0", optional = true } 38nrf52810-hal = { version = "0.12.1", optional = true }
39#nrf52811-hal = { version = "0.12.0", optional = true } # doesn't exist yet 39#nrf52811-hal = { version = "0.12.1", optional = true } # doesn't exist yet
40nrf52832-hal = { version = "0.12.0", optional = true } 40nrf52832-hal = { version = "0.12.1", optional = true }
41nrf52833-hal = { version = "0.12.0", optional = true } 41nrf52833-hal = { version = "0.12.1", optional = true }
42nrf52840-hal = { version = "0.12.0", optional = true } 42nrf52840-hal = { version = "0.12.1", optional = true }
diff --git a/embassy-nrf/src/buffered_uarte.rs b/embassy-nrf/src/buffered_uarte.rs
index 5cbba486e..848687f7b 100644
--- a/embassy-nrf/src/buffered_uarte.rs
+++ b/embassy-nrf/src/buffered_uarte.rs
@@ -15,7 +15,6 @@ use embassy::io::{AsyncBufRead, AsyncWrite, Result};
15use embassy::util::WakerRegistration; 15use embassy::util::WakerRegistration;
16use embedded_hal::digital::v2::OutputPin; 16use embedded_hal::digital::v2::OutputPin;
17 17
18use crate::hal::gpio::Port as GpioPort;
19use crate::hal::ppi::ConfigurablePpi; 18use crate::hal::ppi::ConfigurablePpi;
20use crate::interrupt::{self, Interrupt}; 19use crate::interrupt::{self, Interrupt};
21use crate::pac; 20use crate::pac;
@@ -72,14 +71,6 @@ pub struct BufferedUarte<
72 inner: PeripheralMutex<State<'a, U, T, P1, P2>>, 71 inner: PeripheralMutex<State<'a, U, T, P1, P2>>,
73} 72}
74 73
75#[cfg(any(feature = "52833", feature = "52840"))]
76fn port_bit(port: GpioPort) -> bool {
77 match port {
78 GpioPort::Port0 => false,
79 GpioPort::Port1 => true,
80 }
81}
82
83impl<'a, U: Instance, T: TimerInstance, P1: ConfigurablePpi, P2: ConfigurablePpi> 74impl<'a, U: Instance, T: TimerInstance, P1: ConfigurablePpi, P2: ConfigurablePpi>
84 BufferedUarte<'a, U, T, P1, P2> 75 BufferedUarte<'a, U, T, P1, P2>
85{ 76{
@@ -97,25 +88,19 @@ impl<'a, U: Instance, T: TimerInstance, P1: ConfigurablePpi, P2: ConfigurablePpi
97 ) -> Self { 88 ) -> Self {
98 // Select pins 89 // Select pins
99 uarte.psel.rxd.write(|w| { 90 uarte.psel.rxd.write(|w| {
100 let w = unsafe { w.pin().bits(pins.rxd.pin()) }; 91 unsafe { w.bits(pins.rxd.psel_bits()) };
101 #[cfg(any(feature = "52833", feature = "52840"))]
102 let w = w.port().bit(port_bit(pins.rxd.port()));
103 w.connect().connected() 92 w.connect().connected()
104 }); 93 });
105 pins.txd.set_high().unwrap(); 94 pins.txd.set_high().unwrap();
106 uarte.psel.txd.write(|w| { 95 uarte.psel.txd.write(|w| {
107 let w = unsafe { w.pin().bits(pins.txd.pin()) }; 96 unsafe { w.bits(pins.txd.psel_bits()) };
108 #[cfg(any(feature = "52833", feature = "52840"))]
109 let w = w.port().bit(port_bit(pins.txd.port()));
110 w.connect().connected() 97 w.connect().connected()
111 }); 98 });
112 99
113 // Optional pins 100 // Optional pins
114 uarte.psel.cts.write(|w| { 101 uarte.psel.cts.write(|w| {
115 if let Some(ref pin) = pins.cts { 102 if let Some(ref pin) = pins.cts {
116 let w = unsafe { w.pin().bits(pin.pin()) }; 103 unsafe { w.bits(pin.psel_bits()) };
117 #[cfg(any(feature = "52833", feature = "52840"))]
118 let w = w.port().bit(port_bit(pin.port()));
119 w.connect().connected() 104 w.connect().connected()
120 } else { 105 } else {
121 w.connect().disconnected() 106 w.connect().disconnected()
@@ -124,15 +109,14 @@ impl<'a, U: Instance, T: TimerInstance, P1: ConfigurablePpi, P2: ConfigurablePpi
124 109
125 uarte.psel.rts.write(|w| { 110 uarte.psel.rts.write(|w| {
126 if let Some(ref pin) = pins.rts { 111 if let Some(ref pin) = pins.rts {
127 let w = unsafe { w.pin().bits(pin.pin()) }; 112 unsafe { w.bits(pin.psel_bits()) };
128 #[cfg(any(feature = "52833", feature = "52840"))]
129 let w = w.port().bit(port_bit(pin.port()));
130 w.connect().connected() 113 w.connect().connected()
131 } else { 114 } else {
132 w.connect().disconnected() 115 w.connect().disconnected()
133 } 116 }
134 }); 117 });
135 118
119
136 // Enable UARTE instance 120 // Enable UARTE instance
137 uarte.enable.write(|w| w.enable().enabled()); 121 uarte.enable.write(|w| w.enable().enabled());
138 122
diff --git a/embassy-nrf/src/qspi.rs b/embassy-nrf/src/qspi.rs
index cb7f5a5be..1dc178f26 100644
--- a/embassy-nrf/src/qspi.rs
+++ b/embassy-nrf/src/qspi.rs
@@ -3,7 +3,7 @@ use core::pin::Pin;
3use core::task::Poll; 3use core::task::Poll;
4 4
5use crate::fmt::{assert, assert_eq, *}; 5use crate::fmt::{assert, assert_eq, *};
6use crate::hal::gpio::{Output, Pin as GpioPin, Port as GpioPort, PushPull}; 6use crate::hal::gpio::{Output, Pin as GpioPin, PushPull};
7use crate::interrupt::{self}; 7use crate::interrupt::{self};
8use crate::pac::QSPI; 8use crate::pac::QSPI;
9 9
@@ -59,43 +59,31 @@ pub struct Qspi {
59 inner: PeripheralMutex<State>, 59 inner: PeripheralMutex<State>,
60} 60}
61 61
62fn port_bit(port: GpioPort) -> bool {
63 match port {
64 GpioPort::Port0 => false,
65 GpioPort::Port1 => true,
66 }
67}
68
69impl Qspi { 62impl Qspi {
70 pub fn new(qspi: QSPI, irq: interrupt::QSPI, config: Config) -> Self { 63 pub fn new(qspi: QSPI, irq: interrupt::QSPI, config: Config) -> Self {
71 qspi.psel.sck.write(|w| { 64 qspi.psel.sck.write(|w| {
72 let pin = &config.pins.sck; 65 let pin = &config.pins.sck;
73 let w = unsafe { w.pin().bits(pin.pin()) }; 66 unsafe { w.bits(pin.psel_bits()) };
74 let w = w.port().bit(port_bit(pin.port()));
75 w.connect().connected() 67 w.connect().connected()
76 }); 68 });
77 qspi.psel.csn.write(|w| { 69 qspi.psel.csn.write(|w| {
78 let pin = &config.pins.csn; 70 let pin = &config.pins.csn;
79 let w = unsafe { w.pin().bits(pin.pin()) }; 71 unsafe { w.bits(pin.psel_bits()) };
80 let w = w.port().bit(port_bit(pin.port()));
81 w.connect().connected() 72 w.connect().connected()
82 }); 73 });
83 qspi.psel.io0.write(|w| { 74 qspi.psel.io0.write(|w| {
84 let pin = &config.pins.io0; 75 let pin = &config.pins.io0;
85 let w = unsafe { w.pin().bits(pin.pin()) }; 76 unsafe { w.bits(pin.psel_bits()) };
86 let w = w.port().bit(port_bit(pin.port()));
87 w.connect().connected() 77 w.connect().connected()
88 }); 78 });
89 qspi.psel.io1.write(|w| { 79 qspi.psel.io1.write(|w| {
90 let pin = &config.pins.io1; 80 let pin = &config.pins.io1;
91 let w = unsafe { w.pin().bits(pin.pin()) }; 81 unsafe { w.bits(pin.psel_bits()) };
92 let w = w.port().bit(port_bit(pin.port()));
93 w.connect().connected() 82 w.connect().connected()
94 }); 83 });
95 qspi.psel.io2.write(|w| { 84 qspi.psel.io2.write(|w| {
96 if let Some(ref pin) = config.pins.io2 { 85 if let Some(ref pin) = config.pins.io2 {
97 let w = unsafe { w.pin().bits(pin.pin()) }; 86 unsafe { w.bits(pin.psel_bits()) };
98 let w = w.port().bit(port_bit(pin.port()));
99 w.connect().connected() 87 w.connect().connected()
100 } else { 88 } else {
101 w.connect().disconnected() 89 w.connect().disconnected()
@@ -103,8 +91,7 @@ impl Qspi {
103 }); 91 });
104 qspi.psel.io3.write(|w| { 92 qspi.psel.io3.write(|w| {
105 if let Some(ref pin) = config.pins.io3 { 93 if let Some(ref pin) = config.pins.io3 {
106 let w = unsafe { w.pin().bits(pin.pin()) }; 94 unsafe { w.bits(pin.psel_bits()) };
107 let w = w.port().bit(port_bit(pin.port()));
108 w.connect().connected() 95 w.connect().connected()
109 } else { 96 } else {
110 w.connect().disconnected() 97 w.connect().disconnected()
diff --git a/embassy-nrf/src/spim.rs b/embassy-nrf/src/spim.rs
index 3c0f6e047..b72329631 100644
--- a/embassy-nrf/src/spim.rs
+++ b/embassy-nrf/src/spim.rs
@@ -5,7 +5,6 @@ use core::task::Poll;
5use embassy::util::WakerRegistration; 5use embassy::util::WakerRegistration;
6use futures::future::poll_fn; 6use futures::future::poll_fn;
7 7
8use crate::hal::gpio::Port as GpioPort;
9use crate::interrupt::{self, Interrupt}; 8use crate::interrupt::{self, Interrupt};
10use crate::util::peripheral::{PeripheralMutex, PeripheralState}; 9use crate::util::peripheral::{PeripheralMutex, PeripheralState};
11use crate::{pac, slice_in_ram_or}; 10use crate::{pac, slice_in_ram_or};
@@ -33,14 +32,6 @@ pub struct Spim<T: Instance> {
33 inner: PeripheralMutex<State<T>>, 32 inner: PeripheralMutex<State<T>>,
34} 33}
35 34
36#[cfg(any(feature = "52833", feature = "52840"))]
37fn port_bit(port: GpioPort) -> bool {
38 match port {
39 GpioPort::Port0 => false,
40 GpioPort::Port1 => true,
41 }
42}
43
44pub struct Config { 35pub struct Config {
45 pub pins: Pins, 36 pub pins: Pins,
46 pub frequency: Frequency, 37 pub frequency: Frequency,
@@ -54,26 +45,20 @@ impl<T: Instance> Spim<T> {
54 45
55 // Select pins. 46 // Select pins.
56 r.psel.sck.write(|w| { 47 r.psel.sck.write(|w| {
57 let w = unsafe { w.pin().bits(config.pins.sck.pin()) }; 48 unsafe { w.bits(config.pins.sck.psel_bits()) };
58 #[cfg(any(feature = "52833", feature = "52840"))]
59 let w = w.port().bit(port_bit(config.pins.sck.port()));
60 w.connect().connected() 49 w.connect().connected()
61 }); 50 });
62 51
63 match config.pins.mosi { 52 match config.pins.mosi {
64 Some(mosi) => r.psel.mosi.write(|w| { 53 Some(mosi) => r.psel.mosi.write(|w| {
65 let w = unsafe { w.pin().bits(mosi.pin()) }; 54 unsafe { w.bits(mosi.psel_bits()) };
66 #[cfg(any(feature = "52833", feature = "52840"))]
67 let w = w.port().bit(port_bit(mosi.port()));
68 w.connect().connected() 55 w.connect().connected()
69 }), 56 }),
70 None => r.psel.mosi.write(|w| w.connect().disconnected()), 57 None => r.psel.mosi.write(|w| w.connect().disconnected()),
71 } 58 }
72 match config.pins.miso { 59 match config.pins.miso {
73 Some(miso) => r.psel.miso.write(|w| { 60 Some(miso) => r.psel.miso.write(|w| {
74 let w = unsafe { w.pin().bits(miso.pin()) }; 61 unsafe { w.bits(miso.psel_bits()) };
75 #[cfg(any(feature = "52833", feature = "52840"))]
76 let w = w.port().bit(port_bit(miso.port()));
77 w.connect().connected() 62 w.connect().connected()
78 }), 63 }),
79 None => r.psel.miso.write(|w| w.connect().disconnected()), 64 None => r.psel.miso.write(|w| w.connect().disconnected()),
diff --git a/embassy-nrf/src/uarte.rs b/embassy-nrf/src/uarte.rs
index 0cc9790b2..aea01f95c 100644
--- a/embassy-nrf/src/uarte.rs
+++ b/embassy-nrf/src/uarte.rs
@@ -13,8 +13,6 @@ use embassy::interrupt::InterruptExt;
13use embassy::util::Signal; 13use embassy::util::Signal;
14 14
15use crate::fmt::{assert, *}; 15use crate::fmt::{assert, *};
16#[cfg(any(feature = "52833", feature = "52840"))]
17use crate::hal::gpio::Port as GpioPort;
18use crate::hal::pac; 16use crate::hal::pac;
19use crate::hal::prelude::*; 17use crate::hal::prelude::*;
20use crate::hal::target_constants::EASY_DMA_SIZE; 18use crate::hal::target_constants::EASY_DMA_SIZE;
@@ -40,15 +38,6 @@ pub struct State {
40 rx_done: Signal<u32>, 38 rx_done: Signal<u32>,
41} 39}
42 40
43// TODO: Remove when https://github.com/nrf-rs/nrf-hal/pull/276 has landed
44#[cfg(any(feature = "52833", feature = "52840"))]
45fn port_bit(port: GpioPort) -> bool {
46 match port {
47 GpioPort::Port0 => false,
48 GpioPort::Port1 => true,
49 }
50}
51
52impl<T> Uarte<T> 41impl<T> Uarte<T>
53where 42where
54 T: Instance, 43 T: Instance,
@@ -72,26 +61,20 @@ where
72 assert!(uarte.enable.read().enable().is_disabled()); 61 assert!(uarte.enable.read().enable().is_disabled());
73 62
74 uarte.psel.rxd.write(|w| { 63 uarte.psel.rxd.write(|w| {
75 let w = unsafe { w.pin().bits(pins.rxd.pin()) }; 64 unsafe { w.bits(pins.rxd.psel_bits()) };
76 #[cfg(any(feature = "52833", feature = "52840"))]
77 let w = w.port().bit(port_bit(pins.rxd.port()));
78 w.connect().connected() 65 w.connect().connected()
79 }); 66 });
80 67
81 pins.txd.set_high().unwrap(); 68 pins.txd.set_high().unwrap();
82 uarte.psel.txd.write(|w| { 69 uarte.psel.txd.write(|w| {
83 let w = unsafe { w.pin().bits(pins.txd.pin()) }; 70 unsafe { w.bits(pins.txd.psel_bits()) };
84 #[cfg(any(feature = "52833", feature = "52840"))]
85 let w = w.port().bit(port_bit(pins.txd.port()));
86 w.connect().connected() 71 w.connect().connected()
87 }); 72 });
88 73
89 // Optional pins 74 // Optional pins
90 uarte.psel.cts.write(|w| { 75 uarte.psel.cts.write(|w| {
91 if let Some(ref pin) = pins.cts { 76 if let Some(ref pin) = pins.cts {
92 let w = unsafe { w.pin().bits(pin.pin()) }; 77 unsafe { w.bits(pin.psel_bits()) };
93 #[cfg(any(feature = "52833", feature = "52840"))]
94 let w = w.port().bit(port_bit(pin.port()));
95 w.connect().connected() 78 w.connect().connected()
96 } else { 79 } else {
97 w.connect().disconnected() 80 w.connect().disconnected()
@@ -100,9 +83,7 @@ where
100 83
101 uarte.psel.rts.write(|w| { 84 uarte.psel.rts.write(|w| {
102 if let Some(ref pin) = pins.rts { 85 if let Some(ref pin) = pins.rts {
103 let w = unsafe { w.pin().bits(pin.pin()) }; 86 unsafe { w.bits(pin.psel_bits()) };
104 #[cfg(any(feature = "52833", feature = "52840"))]
105 let w = w.port().bit(port_bit(pin.port()));
106 w.connect().connected() 87 w.connect().connected()
107 } else { 88 } else {
108 w.connect().disconnected() 89 w.connect().disconnected()