diff options
| -rw-r--r-- | embassy-nrf/src/gpio.rs | 13 | ||||
| -rw-r--r-- | embassy-nrf/src/twim.rs | 7 |
2 files changed, 17 insertions, 3 deletions
diff --git a/embassy-nrf/src/gpio.rs b/embassy-nrf/src/gpio.rs index 3ae160ca8..b02e77874 100644 --- a/embassy-nrf/src/gpio.rs +++ b/embassy-nrf/src/gpio.rs | |||
| @@ -12,6 +12,8 @@ use gpio::pin_cnf::DRIVE_A; | |||
| 12 | use crate::pac; | 12 | use crate::pac; |
| 13 | use crate::pac::p0 as gpio; | 13 | use crate::pac::p0 as gpio; |
| 14 | 14 | ||
| 15 | use self::sealed::Pin as _; | ||
| 16 | |||
| 15 | /// A GPIO port with up to 32 pins. | 17 | /// A GPIO port with up to 32 pins. |
| 16 | #[derive(Debug, Eq, PartialEq)] | 18 | #[derive(Debug, Eq, PartialEq)] |
| 17 | pub enum Port { | 19 | pub enum Port { |
| @@ -487,6 +489,17 @@ impl OptionalPin for NoPin { | |||
| 487 | 489 | ||
| 488 | // ==================== | 490 | // ==================== |
| 489 | 491 | ||
| 492 | pub(crate) fn deconfigure_pin(psel_bits: u32) { | ||
| 493 | if psel_bits & 0x8000_0000 != 0 { | ||
| 494 | return; | ||
| 495 | } | ||
| 496 | unsafe { | ||
| 497 | AnyPin::steal(psel_bits as _).conf().reset(); | ||
| 498 | } | ||
| 499 | } | ||
| 500 | |||
| 501 | // ==================== | ||
| 502 | |||
| 490 | macro_rules! impl_pin { | 503 | macro_rules! impl_pin { |
| 491 | ($type:ident, $port_num:expr, $pin_num:expr) => { | 504 | ($type:ident, $port_num:expr, $pin_num:expr) => { |
| 492 | impl crate::gpio::Pin for peripherals::$type {} | 505 | impl crate::gpio::Pin for peripherals::$type {} |
diff --git a/embassy-nrf/src/twim.rs b/embassy-nrf/src/twim.rs index 05c4c260f..4812b353f 100644 --- a/embassy-nrf/src/twim.rs +++ b/embassy-nrf/src/twim.rs | |||
| @@ -13,10 +13,10 @@ use embassy::util::{AtomicWaker, Unborrow}; | |||
| 13 | use embassy_extras::unborrow; | 13 | use embassy_extras::unborrow; |
| 14 | 14 | ||
| 15 | use crate::chip::{EASY_DMA_SIZE, FORCE_COPY_BUFFER_SIZE}; | 15 | use crate::chip::{EASY_DMA_SIZE, FORCE_COPY_BUFFER_SIZE}; |
| 16 | use crate::fmt::*; | ||
| 17 | use crate::gpio::Pin as GpioPin; | 16 | use crate::gpio::Pin as GpioPin; |
| 18 | use crate::pac; | 17 | use crate::pac; |
| 19 | use crate::util::{slice_in_ram, slice_in_ram_or}; | 18 | use crate::util::{slice_in_ram, slice_in_ram_or}; |
| 19 | use crate::{fmt::*, gpio}; | ||
| 20 | 20 | ||
| 21 | pub enum Frequency { | 21 | pub enum Frequency { |
| 22 | #[doc = "26738688: 100 kbps"] | 22 | #[doc = "26738688: 100 kbps"] |
| @@ -422,9 +422,10 @@ impl<'a, T: Instance> Drop for Twim<'a, T> { | |||
| 422 | let r = T::regs(); | 422 | let r = T::regs(); |
| 423 | r.enable.write(|w| w.enable().disabled()); | 423 | r.enable.write(|w| w.enable().disabled()); |
| 424 | 424 | ||
| 425 | info!("uarte drop: done"); | 425 | gpio::deconfigure_pin(r.psel.sda.read().bits()); |
| 426 | gpio::deconfigure_pin(r.psel.scl.read().bits()); | ||
| 426 | 427 | ||
| 427 | // TODO: disable pins | 428 | info!("twim drop: done"); |
| 428 | } | 429 | } |
| 429 | } | 430 | } |
| 430 | 431 | ||
