From b4424476b960ed3d301073f0e61d8fa67f566c2b Mon Sep 17 00:00:00 2001 From: morgan Date: Tue, 26 Mar 2024 17:39:42 +0800 Subject: [PATCH] si549 fw: del stb = 0&move nack after while loop --- src/libboard_artiq/src/si549.rs | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/libboard_artiq/src/si549.rs b/src/libboard_artiq/src/si549.rs index b542210..cc7b986 100644 --- a/src/libboard_artiq/src/si549.rs +++ b/src/libboard_artiq/src/si549.rs @@ -284,8 +284,6 @@ pub fn helper_setup(timer: &mut GlobalTimer, settings: &FrequencySetting) -> Res Ok(()) } -/// set adpll using gateware i2c -/// Note: disable main/helper i2c bitbang before using this function fn set_adpll(dcxo: i2c::DCXO, adpll: i32) -> Result<(), &'static str> { if adpll.abs() > ADPLL_MAX { return Err("adpll is too large"); @@ -298,15 +296,14 @@ fn set_adpll(dcxo: i2c::DCXO, adpll: i32) -> Result<(), &'static str> { } while csr::wrpll::main_dcxo_adpll_busy_read() == 1 {} + if csr::wrpll::main_dcxo_nack_read() == 1 { + return Err("Main si549 failed to ack adpll write"); + } + csr::wrpll::main_dcxo_i2c_address_write(ADDRESS); csr::wrpll::main_dcxo_adpll_write(adpll as u32); csr::wrpll::main_dcxo_adpll_stb_write(1); - csr::wrpll::main_dcxo_adpll_stb_write(0); - - if csr::wrpll::main_dcxo_nack_read() == 1 { - return Err("Main si549 failed to ack adpll write"); - } }, i2c::DCXO::Helper => unsafe { if csr::wrpll::helper_dcxo_bitbang_enable_read() == 1 { @@ -314,15 +311,14 @@ fn set_adpll(dcxo: i2c::DCXO, adpll: i32) -> Result<(), &'static str> { } while csr::wrpll::helper_dcxo_adpll_busy_read() == 1 {} + if csr::wrpll::helper_dcxo_nack_read() == 1 { + return Err("Helper si549 failed to ack adpll write"); + } + csr::wrpll::helper_dcxo_i2c_address_write(ADDRESS); csr::wrpll::helper_dcxo_adpll_write(adpll as u32); csr::wrpll::helper_dcxo_adpll_stb_write(1); - csr::wrpll::helper_dcxo_adpll_stb_write(0); - - if csr::wrpll::helper_dcxo_nack_read() == 1 { - return Err("Helper si549 failed to ack adpll write"); - } }, };