Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
W
wr2rf-vme
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
5
Issues
5
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
wr2rf-vme
Commits
dd7412b7
Commit
dd7412b7
authored
Mar 25, 2021
by
John Robert Gill
Browse files
Options
Browse Files
Download
Plain Diff
merge software_oddr
parents
af935e7c
38bcb264
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
57 additions
and
35 deletions
+57
-35
wr2rf.c
software/libwr2rf/wr2rf.c
+57
-35
No files found.
software/libwr2rf/wr2rf.c
View file @
dd7412b7
...
...
@@ -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
,
f
delay
);
printf
(
"RF1 T1 sync delay: %02d cycles (16ns) and %01d nsec
odelay=%d
\n
"
,
cdelay
,
fdelay
,
o
delay
);
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_
i
odelay
(
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
}
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment