#![feature(used, asm)] #![no_std] #![no_main] extern crate circuit_playground_express as hal; extern crate panic_abort; #[macro_use(entry)] extern crate cortex_m_rt; use hal::clock::GenericClockController; use hal::delay::Delay; use hal::prelude::*; use hal::{CorePeripherals, Peripherals}; entry!(main); fn main() -> ! { let mut peripherals = Peripherals::take().unwrap(); let core = CorePeripherals::take().unwrap(); let mut clocks = GenericClockController::with_internal_32kosc( peripherals.GCLK, &mut peripherals.PM, &mut peripherals.SYSCTRL, &mut peripherals.NVMCTRL, ); let mut pins = hal::Pins::new(peripherals.PORT); let mut neopixel = pins.neopixel.into_open_drain_output(&mut pins.port); let mut delay = Delay::new(core.SYST, &mut clocks); let pixels: [u8;3] = [0xff, 0x00, 0x00]; let mut counter: usize = 0; let mut p: u8 = pixels[counter]; counter += 1; let mut bitmask: u8 = 0x80; loop { neopixel.set_high(); unsafe{ asm!("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;"); } if p & bitmask != 0 { unsafe{ asm!("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;"); } neopixel.set_low(); } else { neopixel.set_low(); unsafe{ asm!("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;"); } } unsafe { asm!("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;"); } bitmask >>= 1; if bitmask != 0 { unsafe { asm!("nop; nop; nop; nop; nop; nop; nop;"); } } else { if counter >= pixels.len() { break; } p = pixels[counter]; counter += 1; bitmask = 0x80; } } loop {} }