From e83c13b94462b3d3d552c2a0a8e741a47340e085 Mon Sep 17 00:00:00 2001 From: Ricardas Jonaitis Date: Wed, 9 Aug 2023 15:23:48 +0300 Subject: [PATCH] Adapt some procedure sleep times depending on reference clock frequency --- src/lms7002m/LMS7002M.cpp | 12 ++++++++++-- src/lms7002m/LMS7002M.h | 1 + src/lms7002m/LMS7002M_BaseCalibrations.cpp | 5 ++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/lms7002m/LMS7002M.cpp b/src/lms7002m/LMS7002M.cpp index 8fa36943a8..54cd1fa37d 100644 --- a/src/lms7002m/LMS7002M.cpp +++ b/src/lms7002m/LMS7002M.cpp @@ -2749,7 +2749,7 @@ float_type LMS7002M::GetTemperature() uint16_t biasMux = Get_SPI_Reg_bits(LMS7_MUX_BIAS_OUT); Modify_SPI_Reg_bits(LMS7_MUX_BIAS_OUT, 2); - this_thread::sleep_for(chrono::microseconds(250)); + SleepForRefClkTicks(7680); const uint16_t reg606 = SPI_read(0x0606, true); float Vtemp = (reg606 >> 8) & 0xFF; Vtemp *= 1.84; @@ -2818,7 +2818,7 @@ int LMS7002M::CalibrateAnalogRSSI_DC_Offset() if(value < 0) wrValue |= 0x40; Modify_SPI_Reg_bits(LMS7param(RSSIDC_DCO1), wrValue, true); - this_thread::sleep_for(chrono::microseconds(5)); + SleepForRefClkTicks(154); cmp = Get_SPI_Reg_bits(LMS7param(RSSIDC_CMPSTATUS), true); if(cmp != cmpPrev) { @@ -2842,3 +2842,11 @@ int LMS7002M::CalibrateAnalogRSSI_DC_Offset() Modify_SPI_Reg_bits(LMS7_EN_INSHSW_W_RFE, 0); return 0; } + +void LMS7002M::SleepForRefClkTicks(uint32_t ticks) +{ + float refclk = GetReferenceClk_SX(Rx); + int64_t period_ns = 1e9/refclk; + chrono::nanoseconds duration_ns = chrono::nanoseconds(ticks*period_ns); + this_thread::sleep_for(duration_ns); +} diff --git a/src/lms7002m/LMS7002M.h b/src/lms7002m/LMS7002M.h index eb0c184069..5c97fde153 100644 --- a/src/lms7002m/LMS7002M.h +++ b/src/lms7002m/LMS7002M.h @@ -479,6 +479,7 @@ class LIME_API LMS7002M int Modify_SPI_Reg_mask(const uint16_t *addr, const uint16_t *masks, const uint16_t *values, uint8_t start, uint8_t stop); ///@} + void SleepForRefClkTicks(uint32_t ticks); virtual void Log(const char* text, LogType type); void Log(LogType type, const char *format, ...) diff --git a/src/lms7002m/LMS7002M_BaseCalibrations.cpp b/src/lms7002m/LMS7002M_BaseCalibrations.cpp index 18f4e234c3..5b6bb34514 100644 --- a/src/lms7002m/LMS7002M_BaseCalibrations.cpp +++ b/src/lms7002m/LMS7002M_BaseCalibrations.cpp @@ -40,6 +40,7 @@ int LMS7002M::CalibrateInternalADC(int clkDiv) } ++bias; Modify_SPI_Reg_bits(LMS7_RSSI_BIAS, bias); + SleepForRefClkTicks(7575); regValue = SPI_read(0x0601, true); } Modify_SPI_Reg_bits(LMS7_RSSI_PD, 0); @@ -63,7 +64,7 @@ int LMS7002M::CalibrateRP_BIAS() const uint16_t biasMux = Get_SPI_Reg_bits(LMS7_MUX_BIAS_OUT); Modify_SPI_Reg_bits(LMS7_MUX_BIAS_OUT, 1); - this_thread::sleep_for(chrono::microseconds(250)); + SleepForRefClkTicks(7575); uint16_t reg606 = SPI_read(0x0606, true); uint16_t Vref = (reg606 >> 8) & 0xFF; uint16_t Vptat = reg606 & 0xFF; @@ -75,6 +76,7 @@ int LMS7002M::CalibrateRP_BIAS() { --rpCalib; Modify_SPI_Reg_bits(LMS7_RP_CALIB_BIAS, rpCalib); + SleepForRefClkTicks(7575); reg606 = SPI_read(0x0606, true); Vref = (reg606 >> 8) & 0xFF; Vptat = reg606 & 0xFF; @@ -87,6 +89,7 @@ int LMS7002M::CalibrateRP_BIAS() { ++rpCalib; Modify_SPI_Reg_bits(LMS7_RP_CALIB_BIAS, rpCalib); + SleepForRefClkTicks(7575); reg606 = SPI_read(0x0606, true); Vref = (reg606 >> 8) & 0xFF; Vptat = reg606 & 0xFF;