diff --git a/src/main.rs b/src/main.rs index 8cae8b1..6214812 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ use defmt::*; use embassy_executor::Spawner; use embassy_stm32::{Config, bind_interrupts, dma::InterruptHandler, i2c::{self, ErrorInterruptHandler, EventInterruptHandler, I2c}, peripherals::{DMA1_CH1, DMA1_CH2, I2C2}}; +use embassy_time::Timer; use defmt_rtt as _; use panic_probe as _; @@ -14,24 +15,33 @@ bind_interrupts!(struct Irqs { I2C2_3 => EventInterruptHandler, ErrorInterruptHandler; }); +const ADDR: u8 = 0x1A; + #[embassy_executor::main] async fn main(_spawner: Spawner) { - let config = Config::default(); - let p = embassy_stm32::init(config); + let p = embassy_stm32::init(Config::default()); let mut i2c_cfg = i2c::Config::default(); - // i2c_cfg.sda_pullup = true; - // i2c_cfg.scl_pullup = true; i2c_cfg.sda_pullup = false; i2c_cfg.scl_pullup = false; - let mut i2c = I2c::new( - p.I2C2, - p.PA7, p.PA6, - p.DMA1_CH1, p.DMA1_CH2, - Irqs, - i2c_cfg); + let mut i2c = I2c::new(p.I2C2, p.PA7, p.PA6, p.DMA1_CH1, p.DMA1_CH2, Irqs, i2c_cfg); - i2c.write(0x1A, &[0x02u8]).await.unwrap(); + i2c.write(ADDR, &[0x01, 0x01]).await.unwrap(); + Timer::after_millis(30).await; - info!("Success!"); + // Start a PTAT measurement of block 0 (1<<3 | 1). + i2c.write(ADDR, &[0x01, 0x09]).await.unwrap(); + + let mut status = [0u8; 1]; + while { + i2c.write_read(ADDR, &[0x02], &mut status).await.unwrap(); + status[0] & 0x01 == 0 + } { + Timer::after_millis(250).await; + } + + let mut data = [0u8; 258]; + i2c.write_read(ADDR, &[0x0A], &mut data).await.unwrap(); + + info!("Measurement: {:?}", data); }