aboutsummaryrefslogtreecommitdiff
path: root/embassy-nrf/src
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2021-05-26 18:09:18 +0200
committerDario Nieuwenhuis <[email protected]>2021-05-26 18:23:10 +0200
commitb449f6de9dd504e010154450e4e5f4a39fa5c10b (patch)
tree9bc9587cfed270f93943e3f0f50bd94ab69b1976 /embassy-nrf/src
parenta126e17fb2d5544f1506aec860cc1b218008e9fd (diff)
nrf/twim: deconfigure pins on drop
Diffstat (limited to 'embassy-nrf/src')
-rw-r--r--embassy-nrf/src/gpio.rs13
-rw-r--r--embassy-nrf/src/twim.rs7
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;
12use crate::pac; 12use crate::pac;
13use crate::pac::p0 as gpio; 13use crate::pac::p0 as gpio;
14 14
15use 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)]
17pub enum Port { 19pub enum Port {
@@ -487,6 +489,17 @@ impl OptionalPin for NoPin {
487 489
488// ==================== 490// ====================
489 491
492pub(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
490macro_rules! impl_pin { 503macro_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};
13use embassy_extras::unborrow; 13use embassy_extras::unborrow;
14 14
15use crate::chip::{EASY_DMA_SIZE, FORCE_COPY_BUFFER_SIZE}; 15use crate::chip::{EASY_DMA_SIZE, FORCE_COPY_BUFFER_SIZE};
16use crate::fmt::*;
17use crate::gpio::Pin as GpioPin; 16use crate::gpio::Pin as GpioPin;
18use crate::pac; 17use crate::pac;
19use crate::util::{slice_in_ram, slice_in_ram_or}; 18use crate::util::{slice_in_ram, slice_in_ram_or};
19use crate::{fmt::*, gpio};
20 20
21pub enum Frequency { 21pub 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