diff options
| -rw-r--r-- | embassy-rp/src/gpio.rs | 17 |
1 files changed, 17 insertions, 0 deletions
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> { | |||
| 131 | let val = 1 << self.pin.pin(); | 131 | let val = 1 << self.pin.pin(); |
| 132 | unsafe { (self.pin.sio_out().value().read() & val) == 0 } | 132 | unsafe { (self.pin.sio_out().value().read() & val) == 0 } |
| 133 | } | 133 | } |
| 134 | |||
| 135 | /// Toggle pin output | ||
| 136 | #[inline] | ||
| 137 | pub fn toggle(&mut self) { | ||
| 138 | let val = 1 << self.pin.pin(); | ||
| 139 | unsafe { | ||
| 140 | self.pin.sio_out().value_xor().write_value(val); | ||
| 141 | } | ||
| 142 | } | ||
| 134 | } | 143 | } |
| 135 | 144 | ||
| 136 | impl<'d, T: Pin> Drop for Output<'d, T> { | 145 | impl<'d, T: Pin> Drop for Output<'d, T> { |
| @@ -295,6 +304,14 @@ mod eh02 { | |||
| 295 | Ok(self.is_set_low()) | 304 | Ok(self.is_set_low()) |
| 296 | } | 305 | } |
| 297 | } | 306 | } |
| 307 | |||
| 308 | impl<'d, T: Pin> embedded_hal_02::digital::v2::ToggleableOutputPin for Output<'d, T> { | ||
| 309 | type Error = Infallible; | ||
| 310 | #[inline] | ||
| 311 | fn toggle(&mut self) -> Result<(), Self::Error> { | ||
| 312 | Ok(self.toggle()) | ||
| 313 | } | ||
| 314 | } | ||
| 298 | } | 315 | } |
| 299 | 316 | ||
| 300 | #[cfg(feature = "unstable-traits")] | 317 | #[cfg(feature = "unstable-traits")] |
