From e6127bcf84980d4108d8c664b55e489a83d99de6 Mon Sep 17 00:00:00 2001 From: Lucas Schumacher Date: Tue, 24 Oct 2023 16:44:55 -0400 Subject: [PATCH] Try polling with delay --- src/main.rs | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/main.rs b/src/main.rs index 399d2ce..6a9e143 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,8 +11,7 @@ use hal::{ timer::{self, TimerIFace}, HighSpeed, LEDC, }, - uart, Uart, /*Delay*/ - IO, + uart, Delay, Uart, IO, }; use si5351::{Si5351, Si5351Device}; @@ -20,11 +19,10 @@ use si5351::{Si5351, Si5351Device}; #[entry] fn main() -> ! { let peripherals = Peripherals::take(); - //let uart = peripherals.UART0; let mut system = peripherals.DPORT.split(); let io = IO::new(peripherals.GPIO, peripherals.IO_MUX); let clocks = ClockControl::max(system.clock_control).freeze(); - //let mut delay = Delay::new(&clocks); + let delay = Delay::new(&clocks); let serial = { uart::Uart::new(peripherals.UART0, &mut system.peripheral_clock_control) }; @@ -34,7 +32,6 @@ fn main() -> ! { // this requires a clean rebuild because of https://github.com/rust-lang/cargo/issues/10358 esp_println::logger::init_logger_from_env(); log::info!("Logger is setup"); - //println!("Hello world!"); let i2c = I2C::new( peripherals.I2C0, @@ -46,13 +43,12 @@ fn main() -> ! { ); log::info!("I2C Initialized"); - //i2c.write(0b0110_0000, &[0x64]); - let mut clock = Si5351Device::new_adafruit_module(i2c); match clock.init_adafruit_module() { Ok(_) => { log::info!("Si5351 Initialized succesfully"); - main_loop(clock, serial); + clock.set_freq(1_000_000).unwrap(); + main_loop(clock, serial, delay); } Err(e) => { match e { @@ -88,14 +84,18 @@ fn main() -> ! { }) .unwrap(); - main_loop(ledc, serial); + main_loop(ledc, serial, delay); } } } -fn main_loop(mut clock: T, mut serial: Uart<'_, U>) -> ! { +fn main_loop( + mut clock: T, + mut serial: Uart<'_, U>, + mut delay: Delay, +) -> ! { loop { - let freq = read_freq(&mut serial); + let freq = read_freq(&mut serial, &mut delay); log::info!("Got Freq: {}", freq); match clock.set_freq(freq) { Ok(_) => log::info!("Set frequency to {}", freq), @@ -136,13 +136,6 @@ where } } } -struct Dummy; -impl Clockable for Dummy { - fn set_freq(&mut self, freq: u32) -> Result<(), ()> { - log::info!("Dummy set freq: {}", freq); - Ok(()) - } -} // bool inval = false; // char c = serial.read(); @@ -162,11 +155,12 @@ impl Clockable for Dummy { // return freq; // fn rf>(serial: &mut T) -> u32 { 0 } -fn read_freq(serial: &mut Uart<'_, T>) -> u32 { +fn read_freq(serial: &mut Uart<'_, T>, delay: &mut Delay) -> u32 { let mut freq = 0; let mut invalid = false; loop { - match nb::block!(serial.read()) { + //match nb::block!(serial.read()) { + match serial.read() { Ok(input) if input >= b'0' && input <= b'9' => { log::debug!("Got char: {}", char::from(input)); freq = (freq * 10) + (input - b'0') as u32; @@ -188,9 +182,12 @@ fn read_freq(serial: &mut Uart<'_, T>) -> u32 { log::debug!("Got inval: {}", char::from(input)); invalid = true; } - Err(e) => { + Err(nb::Error::Other(e)) => { log::debug!("Got error: {:?}", e); } + Err(nb::Error::WouldBlock) => { + delay.delay(10); + } } }