|
@@ -101,10 +101,10 @@ uint32_t lmx2594regs[LMX_COUNT] = {
|
|
|
0x14D848,
|
|
0x14D848,
|
|
|
0x1327B7,
|
|
0x1327B7,
|
|
|
0x120064,
|
|
0x120064,
|
|
|
- 0x110130,
|
|
|
|
|
|
|
+ 0x11012C,
|
|
|
0x100080,
|
|
0x100080,
|
|
|
0x0F064F,
|
|
0x0F064F,
|
|
|
- 0x0E1E40,
|
|
|
|
|
|
|
+ 0x0E1E70,
|
|
|
0x0D4000,
|
|
0x0D4000,
|
|
|
0x0C5001,
|
|
0x0C5001,
|
|
|
0x0B0018,
|
|
0x0B0018,
|
|
@@ -165,8 +165,16 @@ int lmx_freq_set_main_band(void *bar1, double freq, double f_pd) {
|
|
|
// Set the MASH_ORDER to 3
|
|
// Set the MASH_ORDER to 3
|
|
|
lmx2594regs[112-MASH_ORDER] = lmx2594regs[112-MASH_ORDER] | ENUM_LMX2594_R44_MASH_ORDER_3;
|
|
lmx2594regs[112-MASH_ORDER] = lmx2594regs[112-MASH_ORDER] | ENUM_LMX2594_R44_MASH_ORDER_3;
|
|
|
// Set PF_DLY_SEL to 3
|
|
// Set PF_DLY_SEL to 3
|
|
|
- lmx2594regs[112-PFD_DLY_SEL] = lmx2594regs[112-PFD_DLY_SEL] & (~BITM_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
- lmx2594regs[112-PFD_DLY_SEL] = lmx2594regs[112-PFD_DLY_SEL] | (0x3 << BITP_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
|
|
+ if (freq <= 10e9) {
|
|
|
|
|
+ lmx2594regs[112-PFD_DLY_SEL] = lmx2594regs[112-PFD_DLY_SEL] & (~BITM_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
+ lmx2594regs[112-PFD_DLY_SEL] = lmx2594regs[112-PFD_DLY_SEL] | (0x3 << BITP_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
+ printf("PFD_DLY_SEL = %d\n", 3);
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (freq > 10e9) {
|
|
|
|
|
+ lmx2594regs[112-PFD_DLY_SEL] = lmx2594regs[112-PFD_DLY_SEL] & (~BITM_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
+ lmx2594regs[112-PFD_DLY_SEL] = lmx2594regs[112-PFD_DLY_SEL] | (0x4 << BITP_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
+ printf("PFD_DLY_SEL = %d\n", 4);
|
|
|
|
|
+ }
|
|
|
lmx2594regs[112-PLL_N_S] = lmx2594regs[112-PLL_N_S] &(~0xFFFF);
|
|
lmx2594regs[112-PLL_N_S] = lmx2594regs[112-PLL_N_S] &(~0xFFFF);
|
|
|
lmx2594regs[112-PLL_N_S] = lmx2594regs[112-PLL_N_S] | (N >> 16);
|
|
lmx2594regs[112-PLL_N_S] = lmx2594regs[112-PLL_N_S] | (N >> 16);
|
|
|
//CLear the lower 16 bits of the register
|
|
//CLear the lower 16 bits of the register
|
|
@@ -188,6 +196,8 @@ int lmx_freq_set_main_band(void *bar1, double freq, double f_pd) {
|
|
|
lmx2594regs[112-PLL_DEN_M] = lmx2594regs[112-PLL_DEN_M] & (~0xFFFF);
|
|
lmx2594regs[112-PLL_DEN_M] = lmx2594regs[112-PLL_DEN_M] & (~0xFFFF);
|
|
|
// Next 16 bits of the denominator
|
|
// Next 16 bits of the denominator
|
|
|
lmx2594regs[112-PLL_DEN_M] = lmx2594regs[112-PLL_DEN_M] | (frac_d & 0xFFFF);
|
|
lmx2594regs[112-PLL_DEN_M] = lmx2594regs[112-PLL_DEN_M] | (frac_d & 0xFFFF);
|
|
|
|
|
+ lmx2594regs[112-CHDIV_DIV2] = lmx2594regs[112 - CHDIV_DIV2] & (~BITM_LMX2594_R31_CHDIV_DIV2);
|
|
|
|
|
+ lmx2594regs[112 - CHDIV] = lmx2594regs[112 - CHDIV] & (~BITM_LMX2594_R75_CHDIV);
|
|
|
// Set the OUTA_MUX to channel divider R45[12:11]; 0 - Channel divider, 1 - VCO;
|
|
// Set the OUTA_MUX to channel divider R45[12:11]; 0 - Channel divider, 1 - VCO;
|
|
|
lmx2594regs[112 - OUTA_MUX] = lmx2594regs[112 - OUTA_MUX] & (~BITM_LMX2594_R45_OUTA_MUX);
|
|
lmx2594regs[112 - OUTA_MUX] = lmx2594regs[112 - OUTA_MUX] & (~BITM_LMX2594_R45_OUTA_MUX);
|
|
|
lmx2594regs[112 - OUTA_MUX] = lmx2594regs[112 - OUTA_MUX] | ENUM_LMX2594_R45_OUTA_MUX_VCO;
|
|
lmx2594regs[112 - OUTA_MUX] = lmx2594regs[112 - OUTA_MUX] | ENUM_LMX2594_R45_OUTA_MUX_VCO;
|
|
@@ -204,6 +214,8 @@ int lmx_freq_set_main_band(void *bar1, double freq, double f_pd) {
|
|
|
lmx2594regs[112-PLL_DEN_M],
|
|
lmx2594regs[112-PLL_DEN_M],
|
|
|
lmx2594regs[112-PLL_NUM_S],
|
|
lmx2594regs[112-PLL_NUM_S],
|
|
|
lmx2594regs[112-PLL_NUM_M],
|
|
lmx2594regs[112-PLL_NUM_M],
|
|
|
|
|
+ lmx2594regs[112 - CHDIV],
|
|
|
|
|
+ lmx2594regs[112 - CHDIV_DIV2],
|
|
|
lmx2594regs[112-OUTA_MUX],
|
|
lmx2594regs[112-OUTA_MUX],
|
|
|
lmx2594regs[112-FCAL_ADDR]
|
|
lmx2594regs[112-FCAL_ADDR]
|
|
|
};
|
|
};
|
|
@@ -216,6 +228,12 @@ int lmx_freq_set_main_band(void *bar1, double freq, double f_pd) {
|
|
|
*data_ptr = lmx_change_freq_regs[i];
|
|
*data_ptr = lmx_change_freq_regs[i];
|
|
|
}
|
|
}
|
|
|
usleep(1);
|
|
usleep(1);
|
|
|
|
|
+ printf("N_div = %f\n", N_div);
|
|
|
|
|
+ printf("f_vco = %f\n", freq);
|
|
|
|
|
+ printf("SEG1_EN %08X\n",lmx2594regs[112 - CHDIV_DIV2]);
|
|
|
|
|
+ printf("N = %d\n", N);
|
|
|
|
|
+ printf("frac_n = %d\n", frac_n);
|
|
|
|
|
+ printf("frac_d = %d\n", frac_d);
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -370,9 +388,17 @@ int lmx_freq_set_out_of_band(void *bar1, double freq, double f_pd) {
|
|
|
lmx2594regs[112 - MASH_ORDER] = lmx2594regs[112 - MASH_ORDER] & (~BITM_LMX2594_R44_MASH_ORDER);
|
|
lmx2594regs[112 - MASH_ORDER] = lmx2594regs[112 - MASH_ORDER] & (~BITM_LMX2594_R44_MASH_ORDER);
|
|
|
// Set the MASH_ORDER to 3
|
|
// Set the MASH_ORDER to 3
|
|
|
lmx2594regs[112 - MASH_ORDER] = lmx2594regs[112 - MASH_ORDER] | ENUM_LMX2594_R44_MASH_ORDER_3;
|
|
lmx2594regs[112 - MASH_ORDER] = lmx2594regs[112 - MASH_ORDER] | ENUM_LMX2594_R44_MASH_ORDER_3;
|
|
|
- // Set PF_DLY_SEL to 3
|
|
|
|
|
- lmx2594regs[112 - PFD_DLY_SEL] = lmx2594regs[112 - PFD_DLY_SEL] & (~BITM_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
- lmx2594regs[112 - PFD_DLY_SEL] = lmx2594regs[112 - PFD_DLY_SEL] | (0x3 << BITP_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
|
|
+ // Set PF_DLY_SEL to appropriate value
|
|
|
|
|
+ if (f_vco <=10e9){
|
|
|
|
|
+ lmx2594regs[112 - PFD_DLY_SEL] = lmx2594regs[112 - PFD_DLY_SEL] & (~BITM_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
+ lmx2594regs[112 - PFD_DLY_SEL] = lmx2594regs[112 - PFD_DLY_SEL] | (0x3 << BITP_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
+ printf("PFD_DLY_SEL = %d\n", 3);
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (f_vco > 10e9) {
|
|
|
|
|
+ lmx2594regs[112 - PFD_DLY_SEL] = lmx2594regs[112 - PFD_DLY_SEL] & (~BITM_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
+ lmx2594regs[112 - PFD_DLY_SEL] = lmx2594regs[112 - PFD_DLY_SEL] | (0x4 << BITP_LMX2594_R37_PFD_DLY_SEL);
|
|
|
|
|
+ printf("PFD_DLY_SEL = %d\n", 4);
|
|
|
|
|
+ }
|
|
|
lmx2594regs[112 - PLL_N_S] = lmx2594regs[112 - PLL_N_S] & (~0xFFFF);
|
|
lmx2594regs[112 - PLL_N_S] = lmx2594regs[112 - PLL_N_S] & (~0xFFFF);
|
|
|
lmx2594regs[112 - PLL_N_S] = lmx2594regs[112 - PLL_N_S] | (N >> 16);
|
|
lmx2594regs[112 - PLL_N_S] = lmx2594regs[112 - PLL_N_S] | (N >> 16);
|
|
|
//CLear the lower 16 bits of the register
|
|
//CLear the lower 16 bits of the register
|
|
@@ -403,6 +429,9 @@ int lmx_freq_set_out_of_band(void *bar1, double freq, double f_pd) {
|
|
|
lmx2594regs[112 - CHDIV_DIV2] = lmx2594regs[112 - CHDIV_DIV2] & (~BITM_LMX2594_R31_CHDIV_DIV2);
|
|
lmx2594regs[112 - CHDIV_DIV2] = lmx2594regs[112 - CHDIV_DIV2] & (~BITM_LMX2594_R31_CHDIV_DIV2);
|
|
|
lmx2594regs[112 - CHDIV_DIV2] = lmx2594regs[112 - CHDIV_DIV2] | (ENUM_LMX2594_R31_CHDIV_DIV2_EN);
|
|
lmx2594regs[112 - CHDIV_DIV2] = lmx2594regs[112 - CHDIV_DIV2] | (ENUM_LMX2594_R31_CHDIV_DIV2_EN);
|
|
|
}
|
|
}
|
|
|
|
|
+ else {
|
|
|
|
|
+ lmx2594regs[112-CHDIV_DIV2] = lmx2594regs[112 - CHDIV_DIV2] & (~BITM_LMX2594_R31_CHDIV_DIV2);
|
|
|
|
|
+ }
|
|
|
// Set the OUTA_MUX to channel divider R45[12:11]; 0 - Channel divider, 1 - VCO;
|
|
// Set the OUTA_MUX to channel divider R45[12:11]; 0 - Channel divider, 1 - VCO;
|
|
|
lmx2594regs[112 - OUTA_MUX] = lmx2594regs[112 - OUTA_MUX] & (~BITM_LMX2594_R45_OUTA_MUX);
|
|
lmx2594regs[112 - OUTA_MUX] = lmx2594regs[112 - OUTA_MUX] & (~BITM_LMX2594_R45_OUTA_MUX);
|
|
|
lmx2594regs[112 - OUTA_MUX] = lmx2594regs[112 - OUTA_MUX] | ENUM_LMX2594_R45_OUTA_MUX_CH_DIV;
|
|
lmx2594regs[112 - OUTA_MUX] = lmx2594regs[112 - OUTA_MUX] | ENUM_LMX2594_R45_OUTA_MUX_CH_DIV;
|
|
@@ -419,10 +448,10 @@ int lmx_freq_set_out_of_band(void *bar1, double freq, double f_pd) {
|
|
|
lmx2594regs[112 - PLL_DEN_M],
|
|
lmx2594regs[112 - PLL_DEN_M],
|
|
|
lmx2594regs[112 - PLL_NUM_S],
|
|
lmx2594regs[112 - PLL_NUM_S],
|
|
|
lmx2594regs[112 - PLL_NUM_M],
|
|
lmx2594regs[112 - PLL_NUM_M],
|
|
|
- lmx2594regs[112 - FCAL_ADDR],
|
|
|
|
|
- lmx2594regs[112 - CHDIV_DIV2],
|
|
|
|
|
lmx2594regs[112 - CHDIV],
|
|
lmx2594regs[112 - CHDIV],
|
|
|
- lmx2594regs[112 - OUTA_MUX]
|
|
|
|
|
|
|
+ lmx2594regs[112 - CHDIV_DIV2],
|
|
|
|
|
+ lmx2594regs[112 - OUTA_MUX],
|
|
|
|
|
+ lmx2594regs[112 - FCAL_ADDR]
|
|
|
};
|
|
};
|
|
|
// Create a header for the LMX2594 with the appropriate number of words
|
|
// Create a header for the LMX2594 with the appropriate number of words
|
|
|
uint32_t LMX_HEADER = ((0 << 23) | (DeviceIdLmx2594 << 18) | ((sizeof(lmx_change_freq_regs) / 4) << 1) | 1);
|
|
uint32_t LMX_HEADER = ((0 << 23) | (DeviceIdLmx2594 << 18) | ((sizeof(lmx_change_freq_regs) / 4) << 1) | 1);
|
|
@@ -434,6 +463,14 @@ int lmx_freq_set_out_of_band(void *bar1, double freq, double f_pd) {
|
|
|
*data_ptr = lmx_change_freq_regs[i];
|
|
*data_ptr = lmx_change_freq_regs[i];
|
|
|
}
|
|
}
|
|
|
usleep(1);
|
|
usleep(1);
|
|
|
|
|
+ printf("N_div = %f\n", N_div);
|
|
|
|
|
+ printf("f_vco = %f\n", f_vco);
|
|
|
|
|
+ printf("SEG1_EN %08X\n",lmx2594regs[112 - CHDIV_DIV2]);
|
|
|
|
|
+ printf("N = %d\n", N);
|
|
|
|
|
+ printf("frac_n = %d\n", frac_n);
|
|
|
|
|
+ printf("frac_d = %d\n", frac_d);
|
|
|
|
|
+ printf("chan_div = %d\n", chan_div);
|
|
|
|
|
+ printf("chan_div_reg = %d\n", ch_div_reg);
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|