diff --git a/embassy-rp/src/gpio.rs b/embassy-rp/src/gpio.rs index 28dfce476..aa3c3a646 100644 --- a/embassy-rp/src/gpio.rs +++ b/embassy-rp/src/gpio.rs @@ -131,6 +131,15 @@ impl<'d, T: Pin> Output<'d, T> { let val = 1 << self.pin.pin(); unsafe { (self.pin.sio_out().value().read() & val) == 0 } } + + /// Toggle pin output + #[inline] + pub fn toggle(&mut self) { + let val = 1 << self.pin.pin(); + unsafe { + self.pin.sio_out().value_xor().write_value(val); + } + } } impl<'d, T: Pin> Drop for Output<'d, T> { @@ -295,6 +304,14 @@ mod eh02 { Ok(self.is_set_low()) } } + + impl<'d, T: Pin> embedded_hal_02::digital::v2::ToggleableOutputPin for Output<'d, T> { + type Error = Infallible; + #[inline] + fn toggle(&mut self) -> Result<(), Self::Error> { + Ok(self.toggle()) + } + } } #[cfg(feature = "unstable-traits")]