diff options
| author | Dario Nieuwenhuis <[email protected]> | 2021-03-05 14:35:29 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-03-05 14:35:29 +0100 |
| commit | f8172316cd6a44bf5b6dc596ea24248c2a279224 (patch) | |
| tree | f772f2fcfed3df008dd9d866b53efd0cfbbf88bf | |
| parent | bd3deb785a1e821a1d3a34cdcceca490dedf523f (diff) | |
| parent | 28b2365ef3d42659e52c5189064bbd0017c31cf8 (diff) | |
Merge pull request #68 from timokroeger/update-nrf-hal
Update `nrf-hal` to v0.12.1
| -rw-r--r-- | embassy-nrf-examples/Cargo.toml | 2 | ||||
| -rw-r--r-- | embassy-nrf/Cargo.toml | 10 | ||||
| -rw-r--r-- | embassy-nrf/src/buffered_uarte.rs | 26 | ||||
| -rw-r--r-- | embassy-nrf/src/qspi.rs | 27 | ||||
| -rw-r--r-- | embassy-nrf/src/spim.rs | 21 | ||||
| -rw-r--r-- | embassy-nrf/src/uarte.rs | 27 |
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"] } | |||
| 28 | cortex-m-rt = "0.6.13" | 28 | cortex-m-rt = "0.6.13" |
| 29 | embedded-hal = { version = "0.2.4" } | 29 | embedded-hal = { version = "0.2.4" } |
| 30 | panic-probe = "0.1.0" | 30 | panic-probe = "0.1.0" |
| 31 | nrf52840-hal = { version = "0.12.0" } | 31 | nrf52840-hal = { version = "0.12.1" } |
| 32 | futures = { version = "0.3.8", default-features = false, features = ["async-await"] } \ No newline at end of file | 32 | futures = { 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 } | |||
| 35 | nrf52833-pac = { version = "0.9.0", optional = true } | 35 | nrf52833-pac = { version = "0.9.0", optional = true } |
| 36 | nrf52840-pac = { version = "0.9.0", optional = true } | 36 | nrf52840-pac = { version = "0.9.0", optional = true } |
| 37 | 37 | ||
| 38 | nrf52810-hal = { version = "0.12.0", optional = true } | 38 | nrf52810-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 |
| 40 | nrf52832-hal = { version = "0.12.0", optional = true } | 40 | nrf52832-hal = { version = "0.12.1", optional = true } |
| 41 | nrf52833-hal = { version = "0.12.0", optional = true } | 41 | nrf52833-hal = { version = "0.12.1", optional = true } |
| 42 | nrf52840-hal = { version = "0.12.0", optional = true } | 42 | nrf52840-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}; | |||
| 15 | use embassy::util::WakerRegistration; | 15 | use embassy::util::WakerRegistration; |
| 16 | use embedded_hal::digital::v2::OutputPin; | 16 | use embedded_hal::digital::v2::OutputPin; |
| 17 | 17 | ||
| 18 | use crate::hal::gpio::Port as GpioPort; | ||
| 19 | use crate::hal::ppi::ConfigurablePpi; | 18 | use crate::hal::ppi::ConfigurablePpi; |
| 20 | use crate::interrupt::{self, Interrupt}; | 19 | use crate::interrupt::{self, Interrupt}; |
| 21 | use crate::pac; | 20 | use 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"))] | ||
| 76 | fn port_bit(port: GpioPort) -> bool { | ||
| 77 | match port { | ||
| 78 | GpioPort::Port0 => false, | ||
| 79 | GpioPort::Port1 => true, | ||
| 80 | } | ||
| 81 | } | ||
| 82 | |||
| 83 | impl<'a, U: Instance, T: TimerInstance, P1: ConfigurablePpi, P2: ConfigurablePpi> | 74 | impl<'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; | |||
| 3 | use core::task::Poll; | 3 | use core::task::Poll; |
| 4 | 4 | ||
| 5 | use crate::fmt::{assert, assert_eq, *}; | 5 | use crate::fmt::{assert, assert_eq, *}; |
| 6 | use crate::hal::gpio::{Output, Pin as GpioPin, Port as GpioPort, PushPull}; | 6 | use crate::hal::gpio::{Output, Pin as GpioPin, PushPull}; |
| 7 | use crate::interrupt::{self}; | 7 | use crate::interrupt::{self}; |
| 8 | use crate::pac::QSPI; | 8 | use crate::pac::QSPI; |
| 9 | 9 | ||
| @@ -59,43 +59,31 @@ pub struct Qspi { | |||
| 59 | inner: PeripheralMutex<State>, | 59 | inner: PeripheralMutex<State>, |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | fn port_bit(port: GpioPort) -> bool { | ||
| 63 | match port { | ||
| 64 | GpioPort::Port0 => false, | ||
| 65 | GpioPort::Port1 => true, | ||
| 66 | } | ||
| 67 | } | ||
| 68 | |||
| 69 | impl Qspi { | 62 | impl 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; | |||
| 5 | use embassy::util::WakerRegistration; | 5 | use embassy::util::WakerRegistration; |
| 6 | use futures::future::poll_fn; | 6 | use futures::future::poll_fn; |
| 7 | 7 | ||
| 8 | use crate::hal::gpio::Port as GpioPort; | ||
| 9 | use crate::interrupt::{self, Interrupt}; | 8 | use crate::interrupt::{self, Interrupt}; |
| 10 | use crate::util::peripheral::{PeripheralMutex, PeripheralState}; | 9 | use crate::util::peripheral::{PeripheralMutex, PeripheralState}; |
| 11 | use crate::{pac, slice_in_ram_or}; | 10 | use 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"))] | ||
| 37 | fn port_bit(port: GpioPort) -> bool { | ||
| 38 | match port { | ||
| 39 | GpioPort::Port0 => false, | ||
| 40 | GpioPort::Port1 => true, | ||
| 41 | } | ||
| 42 | } | ||
| 43 | |||
| 44 | pub struct Config { | 35 | pub 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; | |||
| 13 | use embassy::util::Signal; | 13 | use embassy::util::Signal; |
| 14 | 14 | ||
| 15 | use crate::fmt::{assert, *}; | 15 | use crate::fmt::{assert, *}; |
| 16 | #[cfg(any(feature = "52833", feature = "52840"))] | ||
| 17 | use crate::hal::gpio::Port as GpioPort; | ||
| 18 | use crate::hal::pac; | 16 | use crate::hal::pac; |
| 19 | use crate::hal::prelude::*; | 17 | use crate::hal::prelude::*; |
| 20 | use crate::hal::target_constants::EASY_DMA_SIZE; | 18 | use 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"))] | ||
| 45 | fn port_bit(port: GpioPort) -> bool { | ||
| 46 | match port { | ||
| 47 | GpioPort::Port0 => false, | ||
| 48 | GpioPort::Port1 => true, | ||
| 49 | } | ||
| 50 | } | ||
| 51 | |||
| 52 | impl<T> Uarte<T> | 41 | impl<T> Uarte<T> |
| 53 | where | 42 | where |
| 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() |
