Browse Source

Нижний диапазон (0.1-1000 МГц) теперь реализован посредством переноса

Anatoliy Chigirinskiy 1 year ago
parent
commit
a14b0e0e43
3 changed files with 55 additions and 28 deletions
  1. 39 21
      Devices/lmx2594.c
  2. 15 6
      Devices/tmsgheaders.c
  3. 1 1
      Devices/tmsgheaders.h

+ 39 - 21
Devices/lmx2594.c

@@ -122,6 +122,8 @@ uint32_t lmx2594regs[LMX_COUNT] = {
         0x00251C
 };
 
+double lmx_freq; // Frequency of the LMX2594
+
 void lmx2594_init(void *bar1) {
     // Header for LMX Reset
     uint32_t *ptr_rst = bar1 + LMX_BASE_ADDR;
@@ -342,10 +344,18 @@ int lmx_freq_set_main_band(void *bar1, double freq, double f_pd) {
 }
 
 int lmx_freq_set_out_of_band(void *bar1, double freq, double f_pd) {
-    double f_vco = 2 * freq;
+
+    if (freq >= 10e6 && freq <= 1000e6) {
+        lmx_freq = lmx_lower_bond_set(freq, f_pd);
+    }
+    else {
+        lmx_freq = freq;
+    }
+
+    double f_vco = 2 * lmx_freq;
     int chan_div = 2;
     uint8_t ch_div_reg = 0; // 2
-    double vco_div = 7.5e9 / freq;
+    double vco_div = 7.5e9 / lmx_freq;
     double N_div;
 
     int vco_core;
@@ -362,70 +372,70 @@ int lmx_freq_set_out_of_band(void *bar1, double freq, double f_pd) {
     if (f_vco < 7.5e9) {
         if (vco_div > 2 && vco_div <= 4)
             chan_div = 4;  // 4
-        f_vco = freq * chan_div;
+        f_vco = lmx_freq * chan_div;
         if (vco_div > 4 && vco_div <= 6) {
             chan_div = 6;  // 6
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 6 && vco_div <= 8) {
             chan_div = 8;  // 8
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 8 && vco_div <= 12) {
             chan_div = 12;  // 12
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 12 && vco_div <= 16) {
             chan_div = 16;  // 16
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 16 && vco_div <= 24) {
             chan_div = 24;  // 24
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 24 && vco_div <= 32) {
             chan_div = 32;  // 32
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 32 && vco_div <= 48) {
             chan_div = 48;  // 48
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 48 && vco_div <= 64) {
             chan_div = 64;  // 64
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 64 && vco_div <= 72) {
             chan_div = 72;  // 72
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 72 && vco_div <= 96) {
             chan_div = 96;  // 96
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 96 && vco_div <= 128) {
             chan_div = 128;  // 128
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 128 && vco_div <= 192) {
             chan_div = 192;  // 192
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 192 && vco_div <= 256) {
             chan_div = 256;  // 256
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 256 && vco_div <= 384) {
             chan_div = 384;  // 384
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 384 && vco_div <= 512) {
             chan_div = 512;  // 512
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
         if (vco_div > 512 && vco_div <= 768) {
             chan_div = 768;  // 768
-            f_vco = freq * chan_div;
+            f_vco = lmx_freq * chan_div;
         }
 
         switch (chan_div) {
@@ -486,7 +496,7 @@ int lmx_freq_set_out_of_band(void *bar1, double freq, double f_pd) {
         }
     } else {
         ch_div_reg = 0;
-        f_vco = freq * 2;
+        f_vco = lmx_freq * 2;
     }
     N_div = f_vco / f_pd;
 
@@ -681,6 +691,14 @@ int lmx_freq_set_out_of_band(void *bar1, double freq, double f_pd) {
     return 0;
 }
 
+double lmx_lower_bond_set (double freq, double f_pd) {
+    double f_max2870 = 4e9;
+
+    double lmx_req_freq = f_max2870-freq; // 4 GHz - freq
+
+    return lmx_req_freq;
+}
+
 int lmx_freq_set(void *bar1, double freq) {
 
     double f_pd = 200e6;
@@ -697,7 +715,7 @@ int lmx_freq_set(void *bar1, double freq) {
         lmx_freq_set_out_of_band(bar1, freq, f_pd);
     }
     // Switch the keys 
-    key_switch(bar1, freq);
+    key_switch(bar1, freq,lmx_freq);
     return 0;
 }
 

+ 15 - 6
Devices/tmsgheaders.c

@@ -14,13 +14,22 @@ void shift_reg (void  *bar1) {
     *data_ptr = SHIFT_REG;
 }
 
-void key_switch (void  *bar1, double freq){
+void key_switch (void  *bar1, double freq, double lmx_freq) {
     if (freq >= 100e3 && freq <= 1000e6) {
-        uint32_t *ptr_header = bar1 + LMX_BASE_ADDR;
-        *ptr_header = InitShRegHeader;
-        // Data for Shift Reg
-        uint32_t *ptr = bar1 + LMX_BASE_ADDR;
-        *ptr = 0x1<<SHIFT_REG_SW1_RF_BITP|0x1<<SHIFT_REG_GPIO_SW_015_RF_BITP | 0x0<<SHIFT_REG_SW_MIXER_RF_BITP | 0x0<<SHIFT_REG_SW2_RF_BITP | 0x1 << SHIFT_REG_SW_RF_BITP;
+        if (lmx_freq >= 2750e6 && lmx_freq <= 3600e6) {
+             uint32_t *ptr_header = bar1 + LMX_BASE_ADDR;
+            *ptr_header = InitShRegHeader;
+            // Data for Shift Reg
+            uint32_t *ptr = bar1 + LMX_BASE_ADDR;
+            *ptr = 0x1<<SHIFT_REG_SW1_RF_BITP|0x1<<SHIFT_REG_GPIO_SW_015_RF_BITP | 0x0<<SHIFT_REG_SW_MIXER_RF_BITP | 0x0<<SHIFT_REG_SW2_RF_BITP | 0x1 << SHIFT_REG_SW_RF_BITP;
+        }
+        else if (lmx_freq > 3600e6 && lmx_freq <=3999.9e6) {
+            uint32_t *ptr_header = bar1 + LMX_BASE_ADDR;
+            *ptr_header = InitShRegHeader;
+            // Data for Shift Reg
+            uint32_t *ptr = bar1 + LMX_BASE_ADDR;
+            *ptr = 0x0<<SHIFT_REG_SW1_RF_BITP | 0x0 <<SHIFT_REG_SW_MIXER_RF_BITP | 0x1 <<SHIFT_REG_GPIO_SW_015_RF_BITP | 0x1 << SHIFT_REG_SW_RF_BITP;
+        }
     }
     else if (freq > 1000e6 && freq <= 1300e6) {
         uint32_t *ptr_header = bar1 + LMX_BASE_ADDR;

+ 1 - 1
Devices/tmsgheaders.h

@@ -160,6 +160,6 @@ void rst_for_fpga(void *bar1);
 
 void shift_reg (void  *bar1);
 
-void key_switch (void  *bar1, double freq);
+void key_switch (void  *bar1, double freq,double lmx_freq);
 
 #endif //DMADRIVER_TMSGHEADERS_H