Commit e52af7f5 authored by Grzegorz Daniluk's avatar Grzegorz Daniluk

VCO characterization command, fix code duplication

parent 6ffd84cd
...@@ -14,49 +14,6 @@ ...@@ -14,49 +14,6 @@
#include "softpll_ng.h" #include "softpll_ng.h"
#include "shell.h" #include "shell.h"
static int calc_apr(int meas_min, int meas_max, int f_center )
{
// apr_min is in PPM
int64_t delta_low = meas_min - f_center;
int64_t delta_hi = meas_max - f_center;
if(delta_low >= 0)
return -1;
if(delta_hi <= 0)
return -1;
int ppm_lo = -(int64_t)delta_low * 1000000LL / f_center;
int ppm_hi = (int64_t)delta_hi * 1000000LL / f_center;
return ppm_lo < ppm_hi ? ppm_lo : ppm_hi;
}
extern void disable_irq();
static void check_vco_frequencies()
{
disable_irq();
int f_min, f_max;
pp_printf("SoftPLL VCO Frequency/APR test:\n");
spll_set_dac(-1, 0);
f_min = spll_measure_frequency(SPLL_OSC_DMTD);
spll_set_dac(-1, 65535);
f_max = spll_measure_frequency(SPLL_OSC_DMTD);
pp_printf("DMTD VCO: Low=%d Hz Hi=%d Hz, APR = %d ppm.\n", f_min, f_max, calc_apr(f_min, f_max, 62500000));
spll_set_dac(0, 0);
f_min = spll_measure_frequency(SPLL_OSC_REF);
spll_set_dac(0, 65535);
f_max = spll_measure_frequency(SPLL_OSC_REF);
pp_printf("REF VCO: Low=%d Hz Hi=%d Hz, APR = %d ppm.\n", f_min, f_max, calc_apr(f_min, f_max, 125000000));
f_min = spll_measure_frequency(SPLL_OSC_EXT);
pp_printf("EXT clock: Freq=%d Hz\n", f_min);
}
static int cmd_pll(const char *args[]) static int cmd_pll(const char *args[])
{ {
int cur, tgt; int cur, tgt;
......
...@@ -644,7 +644,7 @@ void spll_update() ...@@ -644,7 +644,7 @@ void spll_update()
spll_update_aux_clocks(); spll_update_aux_clocks();
} }
int spll_measure_frequency(int osc) static int spll_measure_frequency(int osc)
{ {
volatile uint32_t *reg; volatile uint32_t *reg;
...@@ -663,3 +663,44 @@ int spll_measure_frequency(int osc) ...@@ -663,3 +663,44 @@ int spll_measure_frequency(int osc)
timer_delay_ms(2000); timer_delay_ms(2000);
return (*reg ) & (0xfffffff); return (*reg ) & (0xfffffff);
} }
static int calc_apr(int meas_min, int meas_max, int f_center )
{
// apr_min is in PPM
int64_t delta_low = meas_min - f_center;
int64_t delta_hi = meas_max - f_center;
if(delta_low >= 0)
return -1;
if(delta_hi <= 0)
return -1;
int ppm_lo = -(int64_t)delta_low * 1000000LL / f_center;
int ppm_hi = (int64_t)delta_hi * 1000000LL / f_center;
return ppm_lo < ppm_hi ? ppm_lo : ppm_hi;
}
void check_vco_frequencies()
{
disable_irq();
int f_min, f_max;
TRACE_DEV("SoftPLL VCO Frequency/APR test:\n");
spll_set_dac(-1, 0);
f_min = spll_measure_frequency(SPLL_OSC_DMTD);
spll_set_dac(-1, 65535);
f_max = spll_measure_frequency(SPLL_OSC_DMTD);
TRACE_DEV("DMTD VCO: Low=%d Hz Hi=%d Hz, APR = %d ppm.\n", f_min, f_max, calc_apr(f_min, f_max, 62500000));
spll_set_dac(0, 0);
f_min = spll_measure_frequency(SPLL_OSC_REF);
spll_set_dac(0, 65535);
f_max = spll_measure_frequency(SPLL_OSC_REF);
TRACE_DEV("REF VCO: Low=%d Hz Hi=%d Hz, APR = %d ppm.\n", f_min, f_max, calc_apr(f_min, f_max, REF_CLOCK_FREQ_HZ));
f_min = spll_measure_frequency(SPLL_OSC_EXT);
TRACE_DEV("EXT clock: Freq=%d Hz\n", f_min);
}
...@@ -127,7 +127,7 @@ void spll_set_dac(int out_channel, int value); ...@@ -127,7 +127,7 @@ void spll_set_dac(int out_channel, int value);
/* Returns current DAC sample value for output (out_channel) */ /* Returns current DAC sample value for output (out_channel) */
int spll_get_dac(int out_channel); int spll_get_dac(int out_channel);
int spll_measure_frequency(int osc); void check_vco_frequencies();
#endif // __SOFTPLL_NG_H #endif // __SOFTPLL_NG_H
...@@ -8,49 +8,6 @@ ...@@ -8,49 +8,6 @@
const char *build_revision; const char *build_revision;
const char *build_date; const char *build_date;
static int calc_apr(int meas_min, int meas_max, int f_center )
{
// apr_min is in PPM
int64_t delta_low = meas_min - f_center;
int64_t delta_hi = meas_max - f_center;
if(delta_low >= 0)
return -1;
if(delta_hi <= 0)
return -1;
int ppm_lo = -(int64_t)delta_low * 1000000LL / f_center;
int ppm_hi = (int64_t)delta_hi * 1000000LL / f_center;
return ppm_lo < ppm_hi ? ppm_lo : ppm_hi;
}
extern void disable_irq();
static void check_vco_frequencies()
{
disable_irq();
int f_min, f_max;
TRACE("SoftPLL VCO Frequency/APR test:\n");
spll_set_dac(-1, 0);
f_min = spll_measure_frequency(SPLL_OSC_DMTD);
spll_set_dac(-1, 65535);
f_max = spll_measure_frequency(SPLL_OSC_DMTD);
TRACE("DMTD VCO: Low=%d Hz Hi=%d Hz, APR = %d ppm.\n", f_min, f_max, calc_apr(f_min, f_max, 62500000));
spll_set_dac(0, 0);
f_min = spll_measure_frequency(SPLL_OSC_REF);
spll_set_dac(0, 65535);
f_max = spll_measure_frequency(SPLL_OSC_REF);
TRACE("REF VCO: Low=%d Hz Hi=%d Hz, APR = %d ppm.\n", f_min, f_max, calc_apr(f_min, f_max, 62500000));
f_min = spll_measure_frequency(SPLL_OSC_EXT);
TRACE("EXT clock: Freq=%d Hz\n", f_min);
}
int main(void) int main(void)
{ {
uint32_t start_tics = timer_get_tics(); uint32_t start_tics = timer_get_tics();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment