From f9e2cef7f23cb4471f1b7a14c5bf771a09a56cbc Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Wed, 23 Sep 2020 00:32:49 +0200 Subject: Add GPIOTE async hal. --- examples/src/bin/gpiote.rs | 84 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 examples/src/bin/gpiote.rs (limited to 'examples/src/bin') diff --git a/examples/src/bin/gpiote.rs b/examples/src/bin/gpiote.rs new file mode 100644 index 000000000..f55b0386d --- /dev/null +++ b/examples/src/bin/gpiote.rs @@ -0,0 +1,84 @@ +#![no_std] +#![no_main] +#![feature(type_alias_impl_trait)] + +#[path = "../example_common.rs"] +mod example_common; +use example_common::*; + +use core::pin::Pin; +use cortex_m_rt::entry; +use embassy::io::{AsyncBufRead, AsyncBufReadExt, AsyncWrite, AsyncWriteExt}; +use embassy_nrf::gpiote; +use futures::pin_mut; +use nrf52840_hal::gpio; + +#[static_executor::task] +async fn run() { + let p = embassy_nrf::pac::Peripherals::take().dewrap(); + let port0 = gpio::p0::Parts::new(p.P0); + + let g = gpiote::Gpiote::new(p.GPIOTE); + + info!("Starting!"); + + let pin1 = port0.p0_11.into_pullup_input().degrade(); + let button1 = async { + let ch = g + .new_input_channel(pin1, gpiote::EventPolarity::HiToLo) + .dewrap(); + + loop { + ch.wait().await; + info!("Button 1 pressed") + } + }; + + let pin2 = port0.p0_12.into_pullup_input().degrade(); + let button2 = async { + let ch = g + .new_input_channel(pin2, gpiote::EventPolarity::LoToHi) + .dewrap(); + + loop { + ch.wait().await; + info!("Button 2 released") + } + }; + + let pin3 = port0.p0_24.into_pullup_input().degrade(); + let button3 = async { + let ch = g + .new_input_channel(pin3, gpiote::EventPolarity::Toggle) + .dewrap(); + + loop { + ch.wait().await; + info!("Button 3 toggled") + } + }; + + let pin4 = port0.p0_25.into_pullup_input().degrade(); + let button4 = async { + let ch = g + .new_input_channel(pin4, gpiote::EventPolarity::Toggle) + .dewrap(); + + loop { + ch.wait().await; + info!("Button 4 toggled") + } + }; + + futures::join!(button1, button2, button3, button4); +} + +#[entry] +fn main() -> ! { + info!("Hello World!"); + + unsafe { + run.spawn().dewrap(); + static_executor::run(); + } +} -- cgit