-
- #![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 {}
- }
-