aboutsummaryrefslogtreecommitdiffstats
path: root/mpm/lib
diff options
context:
space:
mode:
Diffstat (limited to 'mpm/lib')
-rw-r--r--mpm/lib/mykonos/ad937x_ctrl.cpp64
-rw-r--r--mpm/lib/mykonos/ad937x_device.cpp65
-rw-r--r--mpm/lib/mykonos/ad937x_device.hpp4
3 files changed, 75 insertions, 58 deletions
diff --git a/mpm/lib/mykonos/ad937x_ctrl.cpp b/mpm/lib/mykonos/ad937x_ctrl.cpp
index a3119cb89..0e76daac0 100644
--- a/mpm/lib/mykonos/ad937x_ctrl.cpp
+++ b/mpm/lib/mykonos/ad937x_ctrl.cpp
@@ -28,7 +28,64 @@
using namespace mpm::chips;
using namespace mpm::ad937x::device;
-
+//Init cals mask
+const uint32_t ad937x_ctrl::TX_BB_FILTER = ::TX_BB_FILTER;
+const uint32_t ad937x_ctrl::ADC_TUNER = ::ADC_TUNER;
+const uint32_t ad937x_ctrl::TIA_3DB_CORNER = ::TIA_3DB_CORNER;
+const uint32_t ad937x_ctrl::DC_OFFSET = ::DC_OFFSET;
+const uint32_t ad937x_ctrl::TX_ATTENUATION_DELAY = ::TX_ATTENUATION_DELAY;
+const uint32_t ad937x_ctrl::RX_GAIN_DELAY = ::RX_GAIN_DELAY;
+const uint32_t ad937x_ctrl::FLASH_CAL = ::FLASH_CAL;
+const uint32_t ad937x_ctrl::PATH_DELAY = ::PATH_DELAY;
+const uint32_t ad937x_ctrl::TX_LO_LEAKAGE_INTERNAL = ::TX_LO_LEAKAGE_INTERNAL;
+const uint32_t ad937x_ctrl::TX_LO_LEAKAGE_EXTERNAL = ::TX_LO_LEAKAGE_EXTERNAL;
+const uint32_t ad937x_ctrl::TX_QEC_INIT = ::TX_QEC_INIT;
+const uint32_t ad937x_ctrl::LOOPBACK_RX_LO_DELAY = ::LOOPBACK_RX_LO_DELAY;
+const uint32_t ad937x_ctrl::LOOPBACK_RX_RX_QEC_INIT = ::LOOPBACK_RX_RX_QEC_INIT;
+const uint32_t ad937x_ctrl::RX_LO_DELAY = ::RX_LO_DELAY;
+const uint32_t ad937x_ctrl::RX_QEC_INIT = ::RX_QEC_INIT;
+const uint32_t ad937x_ctrl::DPD_INIT = ::DPD_INIT;
+const uint32_t ad937x_ctrl::CLGC_INIT = ::CLGC_INIT;
+const uint32_t ad937x_ctrl::VSWR_INIT = ::VSWR_INIT;
+//Tracking Cals mask
+const uint32_t ad937x_ctrl::TRACK_RX1_QEC = ::TRACK_RX1_QEC;
+const uint32_t ad937x_ctrl::TRACK_RX2_QEC = ::TRACK_RX2_QEC;
+const uint32_t ad937x_ctrl::TRACK_ORX1_QEC = ::TRACK_ORX1_QEC;
+const uint32_t ad937x_ctrl::TRACK_ORX2_QEC = ::TRACK_ORX2_QEC;
+const uint32_t ad937x_ctrl::TRACK_TX1_LOL = ::TRACK_TX1_LOL;
+const uint32_t ad937x_ctrl::TRACK_TX2_LOL = ::TRACK_TX2_LOL;
+const uint32_t ad937x_ctrl::TRACK_TX1_QEC = ::TRACK_TX1_QEC;
+const uint32_t ad937x_ctrl::TRACK_TX2_QEC = ::TRACK_TX2_QEC;
+const uint32_t ad937x_ctrl::TRACK_TX1_DPD = ::TRACK_TX1_DPD;
+const uint32_t ad937x_ctrl::TRACK_TX2_DPD = ::TRACK_TX2_DPD;
+const uint32_t ad937x_ctrl::TRACK_TX1_CLGC = ::TRACK_TX1_CLGC;
+const uint32_t ad937x_ctrl::TRACK_TX2_CLGC = ::TRACK_TX2_CLGC;
+const uint32_t ad937x_ctrl::TRACK_TX1_VSWR = ::TRACK_TX1_VSWR;
+const uint32_t ad937x_ctrl::TRACK_TX2_VSWR = ::TRACK_TX2_VSWR;
+const uint32_t ad937x_ctrl::TRACK_ORX1_QEC_SNLO = ::TRACK_ORX1_QEC_SNLO;
+const uint32_t ad937x_ctrl::TRACK_ORX2_QEC_SNLO = ::TRACK_ORX2_QEC_SNLO;
+const uint32_t ad937x_ctrl::TRACK_SRX_QEC = ::TRACK_SRX_QEC;
+const uint32_t ad937x_ctrl::DEFAULT_INIT_CALS_MASKS =
+ ad937x_ctrl::TX_BB_FILTER |
+ ad937x_ctrl::ADC_TUNER |
+ ad937x_ctrl::TIA_3DB_CORNER |
+ ad937x_ctrl::DC_OFFSET |
+ ad937x_ctrl::TX_ATTENUATION_DELAY |
+ ad937x_ctrl::RX_GAIN_DELAY |
+ ad937x_ctrl::FLASH_CAL |
+ ad937x_ctrl::PATH_DELAY |
+ ad937x_ctrl::TX_LO_LEAKAGE_INTERNAL |
+ ad937x_ctrl::TX_QEC_INIT |
+ ad937x_ctrl::LOOPBACK_RX_LO_DELAY |
+ ad937x_ctrl::RX_QEC_INIT
+ ;
+const uint32_t ad937x_ctrl::DEFAULT_TRACKING_CALS_MASKS =
+ ad937x_ctrl::TRACK_RX1_QEC |
+ ad937x_ctrl::TRACK_RX2_QEC |
+ ad937x_ctrl::TRACK_TX1_QEC |
+ ad937x_ctrl::TRACK_TX2_QEC
+ ;
+const uint32_t ad937x_ctrl::DEFAULT_INIT_CALS_TIMEOUT = 60000;
static uhd::direction_t _get_direction_from_antenna(const std::string& antenna)
{
auto sub = antenna.substr(0, 2);
@@ -145,6 +202,11 @@ public:
device.finish_initialization();
}
+ virtual void setup_cal(uint32_t init_cals_mask, uint32_t tracking_cals_mask, uint32_t timeout)
+ {
+ std::lock_guard<std::mutex> lock(*spi_mutex);
+ device.setup_cal(init_cals_mask, tracking_cals_mask, timeout);
+ }
virtual void start_jesd_rx()
{
std::lock_guard<std::mutex> lock(*spi_mutex);
diff --git a/mpm/lib/mykonos/ad937x_device.cpp b/mpm/lib/mykonos/ad937x_device.cpp
index 2614be600..de3671849 100644
--- a/mpm/lib/mykonos/ad937x_device.cpp
+++ b/mpm/lib/mykonos/ad937x_device.cpp
@@ -19,7 +19,6 @@
#include "adi/mykonos.h"
#include "adi/mykonos_gpio.h"
#include "adi/mykonos_debug/mykonos_dbgjesd.h"
-
#include <boost/format.hpp>
#include <functional>
@@ -49,50 +48,6 @@ static const uint32_t AD9371_PRODUCT_ID = 0x3;
static const size_t ARM_BINARY_SIZE = 98304;
static const uint32_t PLL_LOCK_TIMEOUT_MS = 200;
-static const uint32_t INIT_CAL_TIMEOUT_MS = 10000;
-
-// TODO: actually figure out what cals we want to run
-// minimum required cals are 0x4F
-static const uint32_t INIT_CALS =
- TX_BB_FILTER |
- ADC_TUNER |
- TIA_3DB_CORNER |
- DC_OFFSET |
- TX_ATTENUATION_DELAY |
- RX_GAIN_DELAY |
- FLASH_CAL |
- PATH_DELAY |
- TX_LO_LEAKAGE_INTERNAL |
-//// TX_LO_LEAKAGE_EXTERNAL |
- TX_QEC_INIT |
- LOOPBACK_RX_LO_DELAY |
- LOOPBACK_RX_RX_QEC_INIT |
- RX_LO_DELAY |
- RX_QEC_INIT |
-//// DPD_INIT |
-//// CLGC_INIT |
-//// VSWR_INIT |
- 0;
-
-static const uint32_t TRACKING_CALS =
- TRACK_RX1_QEC |
- TRACK_RX2_QEC |
-// TRACK_ORX1_QEC |
-// TRACK_ORX2_QEC |
-//// TRACK_TX1_LOL |
-//// TRACK_TX2_LOL |
- TRACK_TX1_QEC |
- TRACK_TX2_QEC |
-//// TRACK_TX1_DPD |
-//// TRACK_TX2_DPD |
-//// TRACK_TX1_CLGC |
-//// TRACK_TX2_CLGC |
-//// TRACK_TX1_VSWR |
-//// TRACK_TX2_VSWR |
-//// TRACK_ORX1_QEC_SNLO |
-//// TRACK_ORX2_QEC_SNLO |
-//// TRACK_SRX_QEC |
- 0;
/******************************************************
Helper functions
@@ -318,8 +273,7 @@ ad937x_device::ad937x_device(
{
}
-void ad937x_device::_initialize_rf()
-{
+void ad937x_device::_setup_rf(){
// TODO: add setRfPllLoopFilter here
// Set frequencies
@@ -345,19 +299,21 @@ void ad937x_device::_initialize_rf()
set_gain(uhd::TX_DIRECTION, chain_t::ONE, TX_DEFAULT_GAIN);
set_gain(uhd::TX_DIRECTION, chain_t::TWO, TX_DEFAULT_GAIN);
- // Run and wait for init cals
- CALL_API(MYKONOS_runInitCals(mykonos_config.device, INIT_CALS));
+}
+
+void ad937x_device::setup_cal(uint32_t init_cals_mask, uint32_t tracking_cals_mask, uint32_t timeout){
+ // Run and wait for init cals
+ CALL_API(MYKONOS_runInitCals(mykonos_config.device, init_cals_mask));
uint8_t errorFlag = 0, errorCode = 0;
- CALL_API(MYKONOS_waitInitCals(mykonos_config.device, INIT_CAL_TIMEOUT_MS, &errorFlag, &errorCode));
+ CALL_API(MYKONOS_waitInitCals(mykonos_config.device, timeout, &errorFlag, &errorCode));
if ((errorFlag != 0) || (errorCode != 0))
{
throw mpm::runtime_error("Init cals failed!");
// TODO: add more debugging information here
}
-
- CALL_API(MYKONOS_enableTrackingCals(mykonos_config.device, TRACKING_CALS));
+ CALL_API(MYKONOS_enableTrackingCals(mykonos_config.device, tracking_cals_mask));
// ready for radioOn
}
@@ -389,9 +345,8 @@ void ad937x_device::finish_initialization()
// TODO: check ARM version before or after the load of the ARM
// currently binary has no readable version number until after it's loaded
-
- // TODO: separate initialize rf into its own step
- _initialize_rf();
+ //Run setup RF
+ _setup_rf();
}
void ad937x_device::start_jesd_tx()
diff --git a/mpm/lib/mykonos/ad937x_device.hpp b/mpm/lib/mykonos/ad937x_device.hpp
index 8ea0623a0..8dae6f2d3 100644
--- a/mpm/lib/mykonos/ad937x_device.hpp
+++ b/mpm/lib/mykonos/ad937x_device.hpp
@@ -54,6 +54,7 @@ public:
void begin_initialization();
void finish_initialization();
+ void setup_cal(uint32_t init_cals_mask, uint32_t tracking_cals_mask, uint32_t timeout);
void start_jesd_rx();
void start_jesd_tx();
void start_radio();
@@ -109,14 +110,13 @@ private:
ad937x_gain_ctrl_config_t gain_ctrl;
void _apply_gain_pins(uhd::direction_t direction, mpm::ad937x::device::chain_t chain);
-
+ void _setup_rf();
void _call_api_function(const std::function<mykonosErr_t()>& func);
void _call_gpio_api_function(const std::function<mykonosGpioErr_t()>& func);
std::string _get_arm_binary_path();
std::vector<uint8_t> _get_arm_binary();
- void _initialize_rf();
void _verify_product_id();
void _verify_multichip_sync_status(multichip_sync_t mcs);