From 4e0d14def2e9a42803bd9324c7ba327a10b99470 Mon Sep 17 00:00:00 2001 From: linuswck Date: Tue, 30 Jan 2024 13:01:33 +0800 Subject: [PATCH] laser: Add driver and fn to get termination status --- src/device/gpio.rs | 1 + src/laser_diode/laser_diode.rs | 4 ++++ src/laser_diode/ld_ctrl.rs | 11 +++++++++-- src/main.rs | 1 + 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/device/gpio.rs b/src/device/gpio.rs index aefea69..67b448e 100644 --- a/src/device/gpio.rs +++ b/src/device/gpio.rs @@ -82,6 +82,7 @@ pub fn setup( gpiob.pb14.into_push_pull_output(), ), current_source_short_pin: gpioa.pa4.into_push_pull_output(), + termination_status_pin: gpiod.pd7.internal_pull_up(true), }; let pd_mon_phy = LdPwrExcProtectorPhy { diff --git a/src/laser_diode/laser_diode.rs b/src/laser_diode/laser_diode.rs index 1fe5fd9..7282ce3 100644 --- a/src/laser_diode/laser_diode.rs +++ b/src/laser_diode/laser_diode.rs @@ -174,4 +174,8 @@ impl LdDrive{ pub fn set_pd_i_limit(&mut self, i: ElectricCurrent){ LdPwrExcProtector::set_trigger_threshold_v(i / Settings::PD_MON_TRANSCONDUCTANCE); } + + pub fn get_term_status(&mut self)->bool{ + self.ctrl.get_term_status() + } } diff --git a/src/laser_diode/ld_ctrl.rs b/src/laser_diode/ld_ctrl.rs index 7b225c9..745c662 100644 --- a/src/laser_diode/ld_ctrl.rs +++ b/src/laser_diode/ld_ctrl.rs @@ -1,6 +1,6 @@ use stm32f4xx_hal::{ - gpio::{gpioa::*, gpiob::*, gpiod::*, Alternate, Output, PushPull}, - hal::{blocking::spi::Transfer, digital::v2::OutputPin}, + gpio::{gpioa::*, gpiob::*, gpiod::*, Alternate, Input, Output, PushPull}, + hal::{blocking::spi::Transfer, digital::{v2::OutputPin, v2::InputPin}}, pac::SPI2, spi::{NoMiso, Spi, TransferModeNormal}, }; @@ -15,6 +15,7 @@ use crate::laser_diode::laser_diode::TransimpedanceUnit; pub trait ChannelPins { type CurrentSourceShort: OutputPin; + type TerminationStatus: InputPin; type Max5719Load: OutputPin; type Max5719Cs: OutputPin; type Max5719Spi: Transfer; @@ -23,11 +24,13 @@ pub trait ChannelPins { pub struct LdCtrlPhy { pub dac: Dac, pub current_source_short_pin: C::CurrentSourceShort, + pub termination_status_pin: C::TerminationStatus } pub struct Channel0; impl ChannelPins for Channel0 { type CurrentSourceShort = PA4>; + type TerminationStatus = PD7; type Max5719Load = DacLoad; type Max5719Cs = DacCs; type Max5719Spi = DacSpi; @@ -58,6 +61,10 @@ impl LdCtrl { self.phy.current_source_short_pin.set_high(); } + pub fn get_term_status(&mut self)-> bool{ + self.phy.termination_status_pin.is_high() + } + pub fn set_dac(&mut self, voltage: ElectricPotential, dac_out_v_max: ElectricPotential) -> ElectricPotential { let value = ((voltage / dac_out_v_max).get::() * (max5719::MAX_VALUE as f64)) as u32; diff --git a/src/main.rs b/src/main.rs index e78e436..aec093a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -84,6 +84,7 @@ fn main() -> ! { info!("pd_mon_v: {:?}", volt_fmt.with(laser.pd_mon_status().v)); info!("power_excursion: {:?}", laser.pd_mon_status().pwr_excursion); + info!("Termination Status: {:?}", laser.get_term_status()); sys_timer::sleep(500); } }