#![no_main]
#![no_std]
#![allow(warnings)]
extern crate panic_halt;
extern crate nrf52840_hal as hal;
use cortex_m_rt::entry;
use hal::gpio::{p0, p1, Level, Floating, Input};
use hal::twim::{self, Twim};
use hal::prelude::*;
use hal::timer::Timer;
use hal::target::Peripherals;
#[entry]
fn main() -> ! {
let p = Peripherals::take().unwrap();
let pins = Pins::new(p0::Parts::new(p.P0), p1::Parts::new(p.P1));
let mut red_led = pins.red_led.into_push_pull_output(Level::Low);
let mut blue_led = pins.blue_led.into_push_pull_output(Level::Low);
let mut green_led = pins.green_led.into_push_pull_output(Level::Low);
green_led.set_high();
red_led.set_high();
blue_led.set_high();
let mut timer = Timer::new(p.TIMER0);
// Alternately flash the red, green and blue leds
loop {
green_led.set_high();
red_led.set_low();
blue_led.set_high();
timer.delay(250_000); // 250ms
red_led.set_high();
blue_led.set_low();
timer.delay(1_000_000); // 1s
green_led.set_low();
blue_led.set_high();
red_led.set_high();
timer.delay(250_000); // 250ms
}
}
// Macro to re-defines nrf-mdk pins.
macro_rules! define_pins {
($(#[$topattr:meta])* struct $Type:ident,
p0: {
$( $(#[$attr:meta])* pin $name:ident = $pin_ident:ident : $pin_type:ident),+ ,
},
p1: {
$( $(#[$attr1:meta])* pin $name1:ident = $pin_ident1:ident: $pin_type1:ident),+ ,
}) => {
$(#[$topattr])*
pub struct $Type {
$($(#[$attr])* pub $name: p0:: $pin_type >,)+
$($(#[$attr1])* pub $name1: p1:: $pin_type1 >,)+
}
impl $Type {
/// Returns the pins for the device
pub fn new(pins0: p0::Parts, pins1: p1::Parts) -> Self {
$Type {
$($name: pins0.$pin_ident, )+
$($name1: pins1.$pin_ident1, )+
}
}
}
}}
define_pins!(
/// Maps the pins to the names printed on the device
struct Pins,
p0: {
/// Uart RXD
pin rxd = p0_19: P0_19,
/// Uart TXD
pin txd = p0_20: P0_20,
pin p6 = p0_06: P0_06,
pin p7 = p0_07: P0_07,
pin p8 = p0_08: P0_08,
pin p11 = p0_11: P0_11,
pin p12 = p0_12: P0_12,
pin p13 = p0_13: P0_13,
pin p14 = p0_14: P0_14,
pin p15 = p0_15: P0_15,
pin p16 = p0_16: P0_16,
pin p17 = p0_17: P0_17,
pin p21 = p0_21: P0_21,
pin p25 = p0_25: P0_25,
pin p26 = p0_26: P0_26,
pin p27 = p0_27: P0_27,
pin ain0 = p0_02: P0_02,
pin ain1 = p0_03: P0_03,
pin ain2 = p0_04: P0_04,
pin ain3 = p0_05: P0_05,
pin ain4 = p0_28: P0_28,
pin ain5 = p0_29: P0_29,
pin ain6 = p0_30: P0_30,
pin ain7 = p0_31: P0_31,
pin nfc1 = p0_09: P0_09,
pin nfc2 = p0_10: P0_10,
pin red_led = p0_23: P0_23,
pin green_led = p0_22: P0_22,
pin blue_led = p0_24: P0_24,
},
p1: {
pin button = p1_00: P1_00,
/// ~RESET line to the QSPI flash
pin qspi_reset = p1_01: P1_01,
/// ~WP Write protect pin on the QSPI flash.
pin qspi_wp = p1_02: P1_02,
/// SPI SCLK for QSPI flash
pin qspi_sclk = p1_03: P1_03,
/// SPI MISO for QSPI flash
pin qspi_miso = p1_04: P1_04,
/// SPI MOSI for QSPI flash
pin qspi_mosi = p1_05: P1_05,
/// ~CS for the QSPI flash
pin qspi_cs = p1_06: P1_06,
}
);