Commit dd7412b7 authored by John Robert Gill's avatar John Robert Gill

merge software_oddr

parents af935e7c 38bcb264
......@@ -321,9 +321,10 @@ nco_reset_delay (struct libwr2rf_dev *dev, int argc, char **argv)
unsigned addr;
unsigned cdelay = 0;
unsigned fdelay = 0;
unsigned odelay = 0;
unsigned val;
if (argc != 2 && argc != 3 && argc != 4)
if (argc != 2 && argc != 3 && argc != 4 && argc != 5)
goto usage;
if (strcmp(argv[1], "1") == 0)
......@@ -338,18 +339,22 @@ nco_reset_delay (struct libwr2rf_dev *dev, int argc, char **argv)
else if (argc == 4) {
cdelay = strtoul(argv[2], NULL, 0);
fdelay = strtoul(argv[3], NULL, 0);
} else if (argc == 5) {
cdelay = strtoul(argv[2], NULL, 0);
fdelay = strtoul(argv[3], NULL, 0);
odelay = strtoul(argv[4], NULL, 0);
}
addr = WR2RF_VME_REGS_INIT + WR2RF_INIT_REGS_RF + WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY;
printf("Your cdelay=%d fdelay=%d\n", cdelay, fdelay);
printf("Your cdelay=%d fdelay=%d odelay=%d\n", cdelay, fdelay, odelay);
if (argc == 3) {
val = libwr2rf_read16(dev, addr + WR2RF_INIT_RF_REGS_RF1);
cdelay = (cdelay << WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_CDELAY_SHIFT) &
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_CDELAY_MASK;
fdelay = val & WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_FDELAY_MASK;
val = fdelay | cdelay;
odelay = val & WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_ODELAY_MASK;
val = odelay | fdelay | cdelay;
if (ch == 1) {
libwr2rf_write16(dev, addr + WR2RF_INIT_RF_REGS_RF1, val);
......@@ -357,11 +362,27 @@ nco_reset_delay (struct libwr2rf_dev *dev, int argc, char **argv)
libwr2rf_write16(dev, addr + WR2RF_INIT_RF_REGS_RF2, val);
}
} else if (argc == 4) {
val = libwr2rf_read16(dev, addr + WR2RF_INIT_RF_REGS_RF1);
cdelay = (cdelay << WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_CDELAY_SHIFT) &
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_CDELAY_MASK;
fdelay = (fdelay << WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_FDELAY_SHIFT) &
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_FDELAY_MASK;
odelay = val & WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_ODELAY_MASK;
val = odelay | fdelay | cdelay;
printf ("writing nco_reset to: %02x\n", val);
if (ch == 1)
libwr2rf_write16(dev, addr + WR2RF_INIT_RF_REGS_RF1, val);
else
libwr2rf_write16(dev, addr + WR2RF_INIT_RF_REGS_RF2, val);
} else if (argc == 5) {
cdelay = (cdelay << WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_CDELAY_SHIFT) &
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_CDELAY_MASK;
fdelay = (fdelay << WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_FDELAY_SHIFT) &
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_FDELAY_MASK;
val = fdelay | cdelay;
odelay = (odelay << WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_ODELAY_SHIFT) &
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_ODELAY_MASK;
val = odelay | fdelay | cdelay;
printf ("writing nco_reset to: %02x\n", val);
if (ch == 1)
......@@ -375,15 +396,19 @@ nco_reset_delay (struct libwr2rf_dev *dev, int argc, char **argv)
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_CDELAY_SHIFT;
fdelay = (val & WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_FDELAY_MASK) >>
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_FDELAY_SHIFT;
odelay = (val & WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_ODELAY_MASK) >>
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_ODELAY_SHIFT;
printf ("RF1 T1 sync delay: %02d cycles (16ns) and %01d nsec\n", cdelay, fdelay);
printf ("RF1 T1 sync delay: %02d cycles (16ns) and %01d nsec odelay=%d\n", cdelay, fdelay, odelay);
val = libwr2rf_read16(dev, addr + WR2RF_INIT_RF_REGS_RF2);
cdelay = (val & WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_CDELAY_MASK) >>
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_CDELAY_SHIFT;
fdelay = (val & WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_FDELAY_MASK) >>
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_FDELAY_SHIFT;
printf ("RF2 T1 sync delay: %02d cycles (16ns) and %01d nsec\n", cdelay, fdelay);
odelay = (val & WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_ODELAY_MASK) >>
WR2RF_INIT_RF_CH_REGS_T1_SYNC_PROGDELAY_ODELAY_SHIFT;
printf ("RF2 T1 sync delay: %02d cycles (16ns) and %01d nsec odelay=%d\n", cdelay, fdelay, odelay);
return;
usage:
......@@ -2661,10 +2686,6 @@ vtu (struct libwr2rf_dev *dev, int argc, char **argv)
v64 = libwr2rf_be_read64(dev, addr + TRIGUNIT_REGS_WVALUEONLINE);
printf ("wvalueonline: %lu\n", v64);
v = libwr2rf_read16(dev, addr + TRIGUNIT_REGS_SYNCIDELAY);
printf ("syncidelay: 0x%04x\n",
(unsigned)(v & TRIGUNIT_REGS_SYNCIDELAY_DELAY_MASK));
v = libwr2rf_read16(dev, addr + TRIGUNIT_REGS_TRIGODELAY);
printf ("trigodelay: 0x%04x\n",
(unsigned)(v & TRIGUNIT_REGS_TRIGODELAY_DELAY_MASK));
......@@ -2984,11 +3005,12 @@ vtu_out (struct libwr2rf_dev *dev, int argc, char **argv)
}
static void
vtu_iodelay (struct libwr2rf_dev *dev, int argc, char **argv)
vtu_odelay (struct libwr2rf_dev *dev, int argc, char **argv)
{
unsigned baddr = 0;
unsigned addr = 0;
unsigned v = 0;
unsigned hc = 0;
if (argc > 1) {
baddr = parse_vtu(argv[1],
......@@ -2996,34 +3018,34 @@ vtu_iodelay (struct libwr2rf_dev *dev, int argc, char **argv)
WR2RF_CTRL_REGS_RF1_VTUS, WR2RF_CTRL_REGS_RF2_VTUS,
WR2RF_RFTRIGGER_REGS_T1, WR2RF_RFTRIGGER_REGS_T2);
if (baddr == BADADDR)
return;
goto usage;
}
printf("BaseAddr=%08x\n", baddr);
if (argc == 4 && strcmp(argv[2], "sync_idelay") == 0) {
v = strtoul (argv[3], NULL, 0);
libwr2rf_write16(dev, baddr + TRIGUNIT_REGS_SYNCIDELAY, v);
} else if (argc == 4 && strcmp(argv[2], "trig_odelay") == 0) {
v = strtoul (argv[3], NULL, 0);
libwr2rf_write16(dev, baddr + TRIGUNIT_REGS_TRIGODELAY, v);
} else if (argc > 2) {
printf ("usage: %s RF.TU [sync_idelay|trig_odelay] val_in_iodelay_units \n", argv[0]);
return;
if (argc != 2 && argc != 4 ) {
goto usage;
}
if (argc == 4) {
hc = strtoul (argv[2], NULL, 0);
v = strtoul (argv[3], NULL, 0);
printf ("Your delay request: hc=%01x, odelay=0x%02x (~%d ps)\n", hc, v, v*78);
//if ((hc != 0 && hc != 1) || v > 31) {
// goto usage;
//}
addr = baddr + TRIGUNIT_REGS_TRIGOHCDELAY;
libwr2rf_write16(dev, addr, hc);
addr = baddr + TRIGUNIT_REGS_TRIGODELAY;
libwr2rf_write16(dev, addr, v);
}
printf ("Your delay request = %x\n", v);
addr = baddr + TRIGUNIT_REGS_SYNCIDELAY;
v = libwr2rf_read16(dev, addr);
v = v & TRIGUNIT_REGS_SYNCIDELAY_DELAY_MASK;
printf ("syncidelay: 0x%04x @addr=%08x\n", (unsigned)v, addr);
addr = baddr + TRIGUNIT_REGS_TRIGOHCDELAY;
hc = libwr2rf_read16(dev, addr);
addr = baddr + TRIGUNIT_REGS_TRIGODELAY;
v = libwr2rf_read16(dev, addr);
v = v & TRIGUNIT_REGS_TRIGODELAY_DELAY_MASK;
printf ("trigodelay: 0x%04x, in picoseconds %d @addr=%08x\n",
(unsigned)v, (unsigned)v * 78, addr);
printf ("VTU %s: hc=%01x, odelay=%02x (~%d ps)\n", argv[1], hc, v, v*78);
return;
usage:
printf ("usage: %s RF.TU [hc=0|1] [delay_odelay_units] #(78 ps steps for odelay value) \n", argv[0]);
}
static void
......@@ -3393,7 +3415,7 @@ static struct cmds cmds[] =
{ "rf-diag", rf_diag, "rf diagnostics"},
{ "vtu", vtu, "trigger unit"},
{ "vtu-out", vtu_out, "trigger unit outputs (delay, shapper, reset)"},
{ "vtu-iodelay", vtu_iodelay, "Can be used to set the fpga i/odelay cells. Used for validation only of sync idelay and trig odelay, not runtime."},
{ "vtu-odelay", vtu_odelay, "Can be used to set the fpga VTU odelay cells. Used for validation only of trig odelay, not runtime."},
{ NULL, NULL, NULL }
};
......
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