fixed tuning bug
This commit is contained in:
@ -406,6 +406,7 @@ void rffc5071_enable(void) {
|
|||||||
|
|
||||||
#define LO_MAX 5400
|
#define LO_MAX 5400
|
||||||
#define REF_FREQ 50
|
#define REF_FREQ 50
|
||||||
|
#define FREQ_ONE_MHZ (1000*1000)
|
||||||
|
|
||||||
/* configure frequency synthesizer in integer mode (lo in MHz) */
|
/* configure frequency synthesizer in integer mode (lo in MHz) */
|
||||||
uint64_t rffc5071_config_synth_int(uint16_t lo) {
|
uint64_t rffc5071_config_synth_int(uint16_t lo) {
|
||||||
@ -422,7 +423,7 @@ uint64_t rffc5071_config_synth_int(uint16_t lo) {
|
|||||||
/* Calculate n_lo */
|
/* Calculate n_lo */
|
||||||
uint8_t n_lo = 0;
|
uint8_t n_lo = 0;
|
||||||
uint16_t x = LO_MAX / lo;
|
uint16_t x = LO_MAX / lo;
|
||||||
while (x > 1) {
|
while ((x > 1) && (n_lo < 5)) {
|
||||||
n_lo++;
|
n_lo++;
|
||||||
x >>= 1;
|
x >>= 1;
|
||||||
}
|
}
|
||||||
@ -445,11 +446,12 @@ uint64_t rffc5071_config_synth_int(uint16_t lo) {
|
|||||||
|
|
||||||
uint64_t tmp_n = ((uint64_t)fvco << 29ULL) / (fbkdiv*REF_FREQ) ;
|
uint64_t tmp_n = ((uint64_t)fvco << 29ULL) / (fbkdiv*REF_FREQ) ;
|
||||||
n = tmp_n >> 29ULL;
|
n = tmp_n >> 29ULL;
|
||||||
|
|
||||||
p1nmsb = (tmp_n >> 13ULL) & 0xffff;
|
p1nmsb = (tmp_n >> 13ULL) & 0xffff;
|
||||||
p1nlsb = (tmp_n >> 5ULL) & 0xff;
|
p1nlsb = (tmp_n >> 5ULL) & 0xff;
|
||||||
|
|
||||||
//~ tune_freq = REF_FREQ*tmp_n*fbkdiv/lodiv / (1 << 29);
|
tune_freq_hz = (REF_FREQ * (tmp_n >> 5ULL) * fbkdiv * FREQ_ONE_MHZ)
|
||||||
tune_freq_hz = REF_FREQ*tmp_n*fbkdiv/lodiv * 1000*1000 / (1 << 29ULL);
|
/ (lodiv * (1 << 24ULL));
|
||||||
LOG("# lo=%d n_lo=%d lodiv=%d fvco=%d fbkdiv=%d n=%d tune_freq_hz=%d\n",
|
LOG("# lo=%d n_lo=%d lodiv=%d fvco=%d fbkdiv=%d n=%d tune_freq_hz=%d\n",
|
||||||
lo, n_lo, lodiv, fvco, fbkdiv, n, tune_freq);
|
lo, n_lo, lodiv, fvco, fbkdiv, n, tune_freq);
|
||||||
|
|
||||||
|
@ -70,15 +70,7 @@ bool set_freq(const uint64_t freq)
|
|||||||
RFFC5071_freq_mhz = (max2837_freq_nominal_hz / FREQ_ONE_MHZ) - freq_mhz;
|
RFFC5071_freq_mhz = (max2837_freq_nominal_hz / FREQ_ONE_MHZ) - freq_mhz;
|
||||||
/* Set Freq and read real freq */
|
/* Set Freq and read real freq */
|
||||||
real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz);
|
real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz);
|
||||||
if(real_RFFC5071_freq_hz < RFFC5071_freq_mhz * FREQ_ONE_MHZ)
|
max2837_set_frequency(freq + real_RFFC5071_freq_hz);
|
||||||
{
|
|
||||||
tmp_hz = -(RFFC5071_freq_mhz * FREQ_ONE_MHZ - real_RFFC5071_freq_hz);
|
|
||||||
}else
|
|
||||||
{
|
|
||||||
tmp_hz = (real_RFFC5071_freq_hz - RFFC5071_freq_mhz * FREQ_ONE_MHZ);
|
|
||||||
}
|
|
||||||
MAX2837_freq_hz = max2837_freq_nominal_hz + tmp_hz + freq_hz;
|
|
||||||
max2837_set_frequency(MAX2837_freq_hz);
|
|
||||||
}else if( (freq_mhz >= MIN_BYPASS_FREQ_MHZ) && (freq_mhz < MAX_BYPASS_FREQ_MHZ) )
|
}else if( (freq_mhz >= MIN_BYPASS_FREQ_MHZ) && (freq_mhz < MAX_BYPASS_FREQ_MHZ) )
|
||||||
{
|
{
|
||||||
rf_path_set_filter(RF_PATH_FILTER_BYPASS);
|
rf_path_set_filter(RF_PATH_FILTER_BYPASS);
|
||||||
@ -101,15 +93,7 @@ bool set_freq(const uint64_t freq)
|
|||||||
RFFC5071_freq_mhz = freq_mhz - (max2837_freq_nominal_hz / FREQ_ONE_MHZ);
|
RFFC5071_freq_mhz = freq_mhz - (max2837_freq_nominal_hz / FREQ_ONE_MHZ);
|
||||||
/* Set Freq and read real freq */
|
/* Set Freq and read real freq */
|
||||||
real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz);
|
real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz);
|
||||||
if(real_RFFC5071_freq_hz < RFFC5071_freq_mhz * FREQ_ONE_MHZ)
|
max2837_set_frequency(freq - real_RFFC5071_freq_hz);
|
||||||
{
|
|
||||||
tmp_hz = (RFFC5071_freq_mhz * FREQ_ONE_MHZ - real_RFFC5071_freq_hz);
|
|
||||||
}else
|
|
||||||
{
|
|
||||||
tmp_hz = -(real_RFFC5071_freq_hz - RFFC5071_freq_mhz * FREQ_ONE_MHZ);
|
|
||||||
}
|
|
||||||
MAX2837_freq_hz = max2837_freq_nominal_hz + tmp_hz + freq_hz;
|
|
||||||
max2837_set_frequency(MAX2837_freq_hz);
|
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
/* Error freq_mhz too high */
|
/* Error freq_mhz too high */
|
||||||
|
Reference in New Issue
Block a user