spacepaste

  1.  
  2. #![feature(used, asm)]
  3. #![no_std]
  4. #![no_main]
  5. extern crate circuit_playground_express as hal;
  6. extern crate panic_abort;
  7. #[macro_use(entry)]
  8. extern crate cortex_m_rt;
  9. use hal::clock::GenericClockController;
  10. use hal::delay::Delay;
  11. use hal::prelude::*;
  12. use hal::{CorePeripherals, Peripherals};
  13. entry!(main);
  14. fn main() -> ! {
  15. let mut peripherals = Peripherals::take().unwrap();
  16. let core = CorePeripherals::take().unwrap();
  17. let mut clocks = GenericClockController::with_internal_32kosc(
  18. peripherals.GCLK,
  19. &mut peripherals.PM,
  20. &mut peripherals.SYSCTRL,
  21. &mut peripherals.NVMCTRL,
  22. );
  23. let mut pins = hal::Pins::new(peripherals.PORT);
  24. let mut neopixel = pins.neopixel.into_open_drain_output(&mut pins.port);
  25. let mut delay = Delay::new(core.SYST, &mut clocks);
  26. let pixels: [u8;3] = [0xff, 0x00, 0x00];
  27. let mut counter: usize = 0;
  28. let mut p: u8 = pixels[counter];
  29. counter += 1;
  30. let mut bitmask: u8 = 0x80;
  31. loop {
  32. neopixel.set_high();
  33. unsafe{
  34. asm!("nop; nop; nop; nop; nop; nop; nop; nop;
  35. nop; nop; nop;");
  36. }
  37. if p & bitmask != 0 {
  38. unsafe{
  39. asm!("nop; nop; nop; nop; nop; nop; nop; nop;
  40. nop; nop; nop; nop; nop; nop; nop; nop;
  41. nop; nop; nop; nop; nop; nop; nop; nop;
  42. nop; nop; nop;");
  43. }
  44. neopixel.set_low();
  45. } else {
  46. neopixel.set_low();
  47. unsafe{
  48. asm!("nop; nop; nop; nop; nop; nop; nop; nop;
  49. nop; nop; nop; nop; nop; nop; nop; nop;
  50. nop; nop; nop; nop; nop; nop; nop; nop;
  51. nop; nop; nop;");
  52. }
  53. }
  54. unsafe {
  55. asm!("nop; nop; nop; nop; nop; nop; nop; nop;
  56. nop; nop; nop; nop; nop; nop; nop; nop;
  57. nop; nop; nop; nop; nop; nop; nop; nop;
  58. nop; nop; nop; nop; nop; nop; nop; nop;");
  59. }
  60. bitmask >>= 1;
  61. if bitmask != 0 {
  62. unsafe {
  63. asm!("nop; nop; nop; nop; nop; nop; nop;");
  64. }
  65. } else {
  66. if counter >= pixels.len() {
  67. break;
  68. }
  69. p = pixels[counter];
  70. counter += 1;
  71. bitmask = 0x80;
  72. }
  73. }
  74. loop {}
  75. }
  76.