Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. #![no_std]
  2. #![no_main]
  3.  
  4. use core::f32::consts::PI;
  5. use core::fmt::Write;
  6.  
  7. use arduino_mkrzero::atsamd21g18a::{CorePeripherals, Peripherals};
  8. use arduino_mkrzero::clock::{GenericClockController, ClockGenId, ClockSource};
  9. use arduino_mkrzero::delay::Delay;
  10. use arduino_mkrzero::prelude::*;
  11. use arduino_mkrzero::sercom::{self, I2CMaster0, PadPin, UART3, UART5, UART3Pinout, UART5Pinout};
  12. use arduino_mkrzero::entry;
  13. use arduino_mkrzero::gclk::clkctrl::GENR::*;
  14. use arduino_mkrzero::gclk::genctrl::SRCR::*;
  15.  
  16. use nb;
  17. //use libm::F32Ext;
  18.  
  19. //use crate::consts::*;
  20.  
  21. //const MPU9250_ADDRESS: u8 = 0x68;
  22. //const MPU_WHOAMI_REGISTER: u8 = 117;
  23. //const MAG_ADDRESS: u8 = 0x0C;
  24. //const MAG_WHOAMI_REGISTER: u8 = 0x0;
  25.  
  26. //mod stepper;
  27. //mod consts;
  28.  
  29. #[entry]
  30. fn main() -> ! {
  31. let mut peripherals = Peripherals::take().unwrap();
  32. let mut core = CorePeripherals::take().unwrap();
  33. let mut clocks = GenericClockController::with_internal_32kosc(
  34. peripherals.GCLK,
  35. &mut peripherals.PM,
  36. &mut peripherals.SYSCTRL,
  37. &mut peripherals.NVMCTRL,
  38. );
  39.  
  40. let mut pins = arduino_mkrzero::Pins::new(peripherals.PORT);
  41. let gclk0 = clocks.gclk0().clone();
  42.  
  43. let rx_pin = pins.rx.into_pull_down_input(&mut pins.port).into_pad(&mut pins.port);
  44. let tx_pin = pins.tx.into_push_pull_output(&mut pins.port).into_pad(&mut pins.port);
  45. let mut serial = UART5::new(
  46. &clocks.sercom5_core(&gclk0).unwrap(),
  47. 9600.hz(),
  48. peripherals.SERCOM5,
  49. &mut core.NVIC,
  50. &mut peripherals.PM,
  51. UART5Pinout::Rx3Tx2 {rx: rx_pin, tx: tx_pin},
  52. );
  53.  
  54. let mut builtin_led = pins.led_builtin.into_open_drain_output(&mut pins.port);
  55. let mut led_state = true;
  56. let mut delay = Delay::new(core.SYST, &mut clocks);
  57.  
  58. serial.write_str("Initialised\n").unwrap();
  59.  
  60. let gclk2 = clocks
  61. .configure_gclk_divider_and_source(GCLK2, 1, DPLL96M, false)
  62. .unwrap();
  63. let gps_rx_pin: sercom::Sercom0Pad1 = pins.scl.into_pull_down_input(&mut pins.port).into_pad(&mut pins.port);
  64. let gps_tx_pin: sercom::Sercom0Pad0 = pins.sda.into_push_pull_output(&mut pins.port).into_pad(&mut pins.port);
  65. let mut gps_serial = sercom::UART0::new(
  66. &clocks.sercom0_core(&gclk2).unwrap(),
  67. 9600.hz(),
  68. peripherals.SERCOM0,
  69. &mut core.NVIC,
  70. &mut peripherals.PM,
  71. sercom::UART0Pinout::Rx1Tx0 {
  72. rx: gps_rx_pin,
  73. tx: gps_tx_pin,
  74. },
  75. );
  76.  
  77. serial.write_str("GPS Initialised\n").unwrap();
  78.  
  79. serial.write_str("\n").unwrap();
  80.  
  81. loop {
  82. serial.write_str("Loop start").unwrap();
  83. 'inner: loop {
  84. match gps_serial.read() {
  85. Result::Ok(byte) => {
  86. serial.write_str("Byte found: ").unwrap();
  87. serial.write(byte).unwrap();
  88. serial.write_str("\n").unwrap();
  89. },
  90. Result::Err(nb::Error::WouldBlock) => {
  91. serial.write_str("Would Block\n").unwrap();
  92. break 'inner;
  93. },
  94. Result::Err(nb::Error::Other(())) => {
  95. serial.write_str("Other error\n").unwrap();
  96. break 'inner;
  97. },
  98. }
  99. }
  100.  
  101. if led_state {
  102. builtin_led.set_high();
  103. } else {
  104. builtin_led.set_low();
  105. }
  106. led_state = !led_state;
  107. delay.delay_ms(200u8);
  108. }
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement