1 // 2 // Copyright 2018 Ettus Research, a National Instruments Company 3 // 4 // SPDX-License-Identifier: GPL-3.0-or-later 5 // 6 7 #ifndef INCLUDED_LIBUHD_RHODIUM_CONSTANTS_HPP 8 #define INCLUDED_LIBUHD_RHODIUM_CONSTANTS_HPP 9 10 #include <array> 11 #include <cstddef> 12 #include <string> 13 #include <vector> 14 15 static constexpr double RHODIUM_FREQ_COMPARE_EPSILON = 1e-5; 16 17 static constexpr size_t NUM_RHODIUM_RADIO_RATES = 3; 18 19 static constexpr std::array<double, NUM_RHODIUM_RADIO_RATES> RHODIUM_RADIO_RATES = { 20 200e6, 245.76e6, 250e6}; 21 22 static constexpr double RHODIUM_MIN_FREQ = 1e6; // Hz 23 static constexpr double RHODIUM_MAX_FREQ = 6e9; // Hz 24 25 static constexpr double RHODIUM_LO1_MIN_FREQ = 450e6; // Hz 26 static constexpr double RHODIUM_LO1_MAX_FREQ = 6e9; // Hz 27 static constexpr double RHODIUM_LO1_REF_FREQ = 122.88e6; // Hz 28 29 static constexpr double RHODIUM_LO_0_9_GHZ_LPF_THRESHOLD_FREQ = 0.975e9; // Hz 30 static constexpr double RHODIUM_LO_2_25_GHZ_LPF_THRESHOLD_FREQ = 2.3e9; // Hz 31 32 static constexpr double RHODIUM_LOWBAND_FREQ = 450e6; // Hz 33 static constexpr double RHODIUM_RX_IF_FREQ = 2.44e9; // Hz 34 static constexpr double RHODIUM_TX_IF_FREQ = 1.95e9; // Hz 35 36 static constexpr double RX_MIN_GAIN = 0.0; 37 static constexpr double RX_MAX_GAIN = 60.0; 38 static constexpr double RX_GAIN_STEP = 1.0; 39 static constexpr double TX_MIN_GAIN = 0.0; 40 static constexpr double TX_MAX_GAIN = 60.0; 41 static constexpr double TX_GAIN_STEP = 1.0; 42 43 static constexpr double LO_MIN_GAIN = 0.0; 44 static constexpr double LO_MAX_GAIN = 30.0; 45 static constexpr double LO_GAIN_STEP = 1.0; 46 47 static constexpr double LO_MIN_POWER = 0.0; 48 static constexpr double LO_MAX_POWER = 63.0; 49 static constexpr double LO_POWER_STEP = 1.0; 50 51 static constexpr double RHODIUM_DEFAULT_BANDWIDTH = 250e6; // Hz 52 53 static const std::vector<std::string> RHODIUM_RX_ANTENNAS = { 54 "TX/RX", "RX2", "CAL", "TERM"}; 55 56 static const std::vector<std::string> RHODIUM_TX_ANTENNAS = {"TX/RX", "CAL", "TERM"}; 57 58 // These names are taken from radio_rhodium.xml 59 static constexpr char SPUR_DODGING_PROP_NAME[] = "spur_dodging"; 60 static constexpr char SPUR_DODGING_THRESHOLD_PROP_NAME[] = "spur_dodging_threshold"; 61 static constexpr char HIGHBAND_SPUR_REDUCTION_PROP_NAME[] = "highband_spur_reduction"; 62 static constexpr char RHODIUM_DEFAULT_SPUR_DOGING_MODE[] = "disabled"; 63 static constexpr double RHODIUM_DEFAULT_SPUR_DOGING_THRESHOLD = 2e6; 64 static constexpr char RHODIUM_DEFAULT_HB_SPUR_REDUCTION_MODE[] = "disabled"; 65 66 67 static constexpr char RHODIUM_FPGPIO_BANK[] = "FP0"; 68 static constexpr uint32_t RHODIUM_GPIO_MASK = 0x1F; 69 static constexpr uint32_t SW10_GPIO_MASK = 0x3; 70 static constexpr uint32_t LED_GPIO_MASK = 0x1C; 71 72 static constexpr uint32_t SW10_FROMTXLOWBAND = 0x0; 73 static constexpr uint32_t SW10_FROMTXHIGHBAND = 0x1; 74 static constexpr uint32_t SW10_ISOLATION = 0x2; 75 static constexpr uint32_t SW10_TORX = 0x3; 76 77 static constexpr uint32_t LED_RX = 0x04; 78 static constexpr uint32_t LED_RX2 = 0x08; 79 static constexpr uint32_t LED_TX = 0x10; 80 81 //! Main LO 82 static constexpr char RHODIUM_LO1[] = "lo1"; 83 //! Low-band LO (for IF conversion) 84 static constexpr char RHODIUM_LO2[] = "lowband"; 85 //! DSA attenuation 86 static constexpr char RHODIUM_GAIN[] = "gain_table"; 87 //! LO DSA attenuation 88 static constexpr char RHODIUM_LO_GAIN[] = "dsa"; 89 //! LO output power 90 static constexpr char RHODIUM_LO_POWER[] = "lo"; 91 92 static constexpr char RHODIUM_FE_NAME[] = "Rhodium"; 93 94 static constexpr int NUM_LO_OUTPUT_PORT_NAMES = 4; 95 static constexpr std::array<const char*, NUM_LO_OUTPUT_PORT_NAMES> LO_OUTPUT_PORT_NAMES = 96 {"LO_OUT_0", "LO_OUT_1", "LO_OUT_2", "LO_OUT_3"}; 97 98 static constexpr size_t RHODIUM_NUM_CHANS = 1; 99 100 namespace n320_regs { 101 102 static constexpr uint32_t PERIPH_BASE = 0x80000; 103 static constexpr uint32_t PERIPH_REG_OFFSET = 8; 104 105 // db_control registers 106 static constexpr uint32_t SR_MISC_OUTS = PERIPH_BASE + 160 * PERIPH_REG_OFFSET; 107 static constexpr uint32_t SR_SPI = PERIPH_BASE + 168 * PERIPH_REG_OFFSET; 108 static constexpr uint32_t SR_LEDS = PERIPH_BASE + 176 * PERIPH_REG_OFFSET; 109 static constexpr uint32_t SR_FP_GPIO = PERIPH_BASE + 184 * PERIPH_REG_OFFSET; 110 static constexpr uint32_t SR_DB_GPIO = PERIPH_BASE + 192 * PERIPH_REG_OFFSET; 111 112 static constexpr uint32_t RB_MISC_IO = PERIPH_BASE + 16 * PERIPH_REG_OFFSET; 113 static constexpr uint32_t RB_SPI = PERIPH_BASE + 17 * PERIPH_REG_OFFSET; 114 static constexpr uint32_t RB_LEDS = PERIPH_BASE + 18 * PERIPH_REG_OFFSET; 115 static constexpr uint32_t RB_DB_GPIO = PERIPH_BASE + 19 * PERIPH_REG_OFFSET; 116 static constexpr uint32_t RB_FP_GPIO = PERIPH_BASE + 20 * PERIPH_REG_OFFSET; 117 118 //! Delta between frontend offsets for channel 0 and 1 119 constexpr uint32_t SR_TX_FE_BASE = PERIPH_BASE + 208 * PERIPH_REG_OFFSET; 120 constexpr uint32_t SR_RX_FE_BASE = PERIPH_BASE + 224 * PERIPH_REG_OFFSET; 121 122 } // namespace n320_regs 123 124 #endif /* INCLUDED_LIBUHD_RHODIUM_CONSTANTS_HPP */ 125