Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
Software for White Rabbit PTP Core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
29
Issues
29
List
Board
Labels
Milestones
Merge Requests
7
Merge Requests
7
CI / CD
CI / CD
Pipelines
Schedules
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
Software for White Rabbit PTP Core
Commits
d6ba0125
Commit
d6ba0125
authored
May 31, 2012
by
Tomasz Wlostowski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added t2/t4_phase_transition measurement as an user command
parent
2b7a565f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
13 additions
and
245 deletions
+13
-245
measure_t24p.c
tests/measure_t24p.c
+12
-245
tests.mk
tests/tests.mk
+1
-0
No files found.
tests/measure_t24p.c
View file @
d6ba0125
...
...
@@ -15,75 +15,11 @@
#include "ptpd.h"
int
wrc_extra_debug
=
1
;
int
wrc_gui_mode
=
0
;
int
get_bitslide
(
int
ep
)
static
int
get_bitslide
(
int
ep
)
{
return
(
pcs_read
(
16
)
>>
4
)
&
0x1f
;
}
#define MAX_BITSLIDES 20
static
struct
{
int
occupied
;
int
phase_min
,
phase_max
,
phase_dev
;
int
rx_ahead
;
int
delta
;
int
hits
;
}
bslides
[
MAX_BITSLIDES
];
int
bslide_bins
()
{
int
i
,
hits
=
0
;
for
(
i
=
0
;
i
<
MAX_BITSLIDES
;
i
++
)
if
(
bslides
[
i
].
occupied
)
hits
++
;
return
hits
;
}
#define MIN(a,b) ((a)<(b)?(a):(b))
#define MAX(a,b) ((a)>(b)?(a):(b))
void
bslide_update
(
int
phase
,
int
delta
,
int
ahead
,
int
bs
)
{
bslides
[
bs
].
occupied
=
1
;
bslides
[
bs
].
phase_min
=
MIN
(
phase
,
bslides
[
bs
].
phase_min
);
bslides
[
bs
].
phase_max
=
MAX
(
phase
,
bslides
[
bs
].
phase_max
);
bslides
[
bs
].
phase_dev
=
bslides
[
bs
].
phase_max
-
bslides
[
bs
].
phase_min
;
bslides
[
bs
].
delta
=
delta
;
bslides
[
bs
].
rx_ahead
=
ahead
;
bslides
[
bs
].
hits
++
;
}
static
int
quit
=
0
;
static
void
print_cal_stats
()
{
int
i
,
last_occupied
=
-
1
;
printf
(
"Calibration statistics:
\n
"
);
printf
(
"bitslide[UIs] | Delta[ns] | Ahead[bool] | phase_min[tics] | phase_max[tics] | phase_dev[tics] | hits | delta_prev[ps]
\n
"
);
for
(
i
=
0
;
i
<
MAX_BITSLIDES
;
i
++
)
if
(
bslides
[
i
].
occupied
)
{
printf
(
"%-15d %-11d %-13d %-17d %-17d %-17d %-6d %d
\n
"
,
i
,
bslides
[
i
].
delta
,
bslides
[
i
].
rx_ahead
,
bslides
[
i
].
phase_min
,
bslides
[
i
].
phase_max
,
bslides
[
i
].
phase_dev
,
bslides
[
i
].
hits
,
(
last_occupied
>=
0
)
?
bslides
[
i
].
delta
-
bslides
[
last_occupied
].
delta
:
0
);
last_occupied
=
i
;
}
printf
(
"
\n
"
);
}
struct
meas_entry
{
int
delta_ns
;
int
phase
;
...
...
@@ -91,7 +27,7 @@ struct meas_entry {
int
ahead
;
};
void
purge_socket
(
wr_socket_t
*
sock
)
static
void
purge_socket
(
wr_socket_t
*
sock
)
{
wr_sockaddr_t
from
;
char
buf
[
128
];
...
...
@@ -99,7 +35,7 @@ void purge_socket(wr_socket_t *sock)
while
(
ptpd_netif_recvfrom
(
sock
,
&
from
,
buf
,
128
,
NULL
)
>
0
)
update_rx_queues
();
}
int
meas_phase_range
(
wr_socket_t
*
sock
,
int
phase_min
,
int
phase_max
,
int
phase_step
,
struct
meas_entry
*
results
)
static
int
meas_phase_range
(
wr_socket_t
*
sock
,
int
phase_min
,
int
phase_max
,
int
phase_step
,
struct
meas_entry
*
results
)
{
char
buf
[
128
];
wr_timestamp_t
ts_tx
,
ts_rx
,
ts_sync
;
...
...
@@ -107,6 +43,7 @@ int meas_phase_range(wr_socket_t *sock, int phase_min, int phase_max, int phase_
MsgHeader
mhdr
;
int
setpoint
=
phase_min
,
i
=
0
,
phase
;
spll_set_phase_shift
(
SPLL_ALL_CHANNELS
,
phase_min
);
while
(
spll_shifter_busy
(
0
));
purge_socket
(
sock
);
...
...
@@ -130,10 +67,6 @@ int meas_phase_range(wr_socket_t *sock, int phase_min, int phase_max, int phase_
MsgFollowUp
fup
;
msgUnpackFollowUp
(
buf
,
&
fup
);
// mprintf("FUP shift: %d TS_ahead : %d ,nsec :%d ,phase: %d, dmphase: %d delta %d\n",shift,ts_sync.raw_ahead, ts_sync.nsec, ts_sync.phase, phase,
// fup.preciseOriginTimestamp.nanosecondsField - ts_sync.nsec);
mprintf
(
"Shift: %d/%dps [step %dps]
\r
"
,
setpoint
,
phase_max
,
phase_step
);
results
[
i
].
phase
=
phase
;
results
[
i
].
phase_sync
=
ts_sync
.
phase
;
...
...
@@ -154,7 +87,7 @@ int meas_phase_range(wr_socket_t *sock, int phase_min, int phase_max, int phase_
return
i
;
}
int
find_transition
(
struct
meas_entry
*
results
,
int
n
,
int
positive
)
static
int
find_transition
(
struct
meas_entry
*
results
,
int
n
,
int
positive
)
{
int
i
;
for
(
i
=
0
;
i
<
n
;
i
++
)
...
...
@@ -166,8 +99,7 @@ int find_transition(struct meas_entry *results, int n, int positive)
extern
void
ptpd_netif_set_phase_transition
(
wr_socket_t
*
sock
,
int
phase
);
void
calc_trans
()
int
measure_t24p
(
int
*
value
)
{
wr_socket_t
*
sock
;
wr_sockaddr_t
sock_addr
;
...
...
@@ -185,28 +117,21 @@ void calc_trans()
sock_addr
.
mac
[
4
]
=
0
;
sock_addr
.
mac
[
5
]
=
0
;
mprintf
(
"---------------------------------
\n
WR PTP Core phase_transition parameter calibration program
\n
\
Make sure your SPEC is connected to a WR switch (running PTP in master mode)
\n
---------------------------------
\n
"
);
mprintf
(
"Waiting for link to go up"
);
mprintf
(
"LNK: "
);
while
(
!
ep_link_up
(
NULL
)
)
{
mprintf
(
"."
);
timer_delay
(
1000
);
}
mprintf
(
"
\n
"
);
mprintf
(
"
\n
PLL:
"
);
spll_init
(
SPLL_MODE_SLAVE
,
0
,
1
);
mprintf
(
"Locking the PLL..."
);
while
(
!
spll_check_lock
(
0
));
mprintf
(
"
locked
\n
"
);
mprintf
(
"
\n
"
);
if
(
ptpd_netif_init
()
!=
0
)
{
mprintf
(
"ptpd-netif initialization failed
\n
"
);
return
;
}
return
-
1
;
sock
=
ptpd_netif_create_socket
(
PTPD_SOCK_RAW_ETHERNET
,
0
,
&
sock_addr
);
nr
=
meas_phase_range
(
sock
,
0
,
8000
,
1000
,
results
);
...
...
@@ -238,166 +163,8 @@ Make sure your SPEC is connected to a WR switch (running PTP in master mode)\n--
for
(
i
=
0
;
i
<
nr
;
i
++
)
mprintf
(
"phase_dmtd: %d delta_ns: %d, phase_sync: %d
\n
"
,
results
[
i
].
phase
,
results
[
i
].
delta_ns
,
results
[
i
].
phase_sync
);
for
(;;);
// print_cal_stats();
}
void
pps_adjustment_test
()
{
wr_timestamp_t
ts_tx
,
ts_rx
;
wr_socket_t
*
sock
;
wr_sockaddr_t
sock_addr
,
to
,
from
;
int
adjust_count
=
0
;
sock_addr
.
family
=
PTPD_SOCK_RAW_ETHERNET
;
// socket type
sock_addr
.
ethertype
=
0x88f7
;
sock_addr
.
mac
[
0
]
=
0x1
;
sock_addr
.
mac
[
1
]
=
0x1b
;
sock_addr
.
mac
[
2
]
=
0x19
;
sock_addr
.
mac
[
3
]
=
0
;
sock_addr
.
mac
[
4
]
=
0
;
sock_addr
.
mac
[
5
]
=
0
;
ptpd_netif_init
();
sock
=
ptpd_netif_create_socket
(
PTPD_SOCK_RAW_ETHERNET
,
0
,
&
sock_addr
);
while
(
!
quit
)
{
char
buf
[
128
];
wr_sockaddr_t
to
;
// memset(to.mac, 0xff, 6);
to
.
mac
[
0
]
=
0x1
;
to
.
mac
[
1
]
=
0x1b
;
to
.
mac
[
2
]
=
0x19
;
to
.
mac
[
3
]
=
0
;
to
.
mac
[
4
]
=
0
;
to
.
mac
[
5
]
=
0
;
to
.
ethertype
=
0x88f7
;
to
.
family
=
PTPD_SOCK_RAW_ETHERNET
;
// socket type
if
(
adjust_count
==
0
)
{
ptpd_netif_adjust_counters
(
1
,
0
);
// 500000000);
adjust_count
=
8
;
}
// if(!ptpd_netif_adjust_in_progress())
{
ptpd_netif_sendto
(
sock
,
&
to
,
buf
,
64
,
&
ts_tx
);
update_rx_queues
();
int
n
=
ptpd_netif_recvfrom
(
sock
,
&
from
,
buf
,
128
,
&
ts_rx
);
mprintf
(
"TX timestamp: correct %d %d:%d
\n
"
,
ts_tx
.
correct
,
(
int
)
ts_tx
.
utc
,
ts_tx
.
nsec
);
mprintf
(
"RX timestamp: correct %d %d:%d
\n
"
,
ts_rx
.
correct
,
(
int
)
ts_rx
.
utc
,
ts_rx
.
nsec
);
adjust_count
--
;
}
// else printf("AdjustInProgress\n");
timer_delay
(
1000
);
}
}
void
wrc_debug_printf
(
int
subsys
,
const
char
*
fmt
,
...)
{
va_list
ap
;
if
(
wrc_gui_mode
)
return
;
va_start
(
ap
,
fmt
);
if
(
wrc_extra_debug
||
(
!
wrc_extra_debug
))
vprintf
(
fmt
,
ap
);
va_end
(
ap
);
}
void
wrc_initialize
()
{
int
ret
,
i
;
uint8_t
mac_addr
[
6
],
ds18_id
[
8
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
char
sfp_pn
[
17
];
uart_init
();
uart_write_string
(
__FILE__
" is up (compiled on "
__DATE__
" "
__TIME__
")
\n
"
);
if
(
value
)
*
value
=
ttrans
;
mac_addr
[
0
]
=
0x08
;
//
mac_addr
[
1
]
=
0x00
;
// CERN OUI
mac_addr
[
2
]
=
0x30
;
//
mac_addr
[
3
]
=
0xca
;
mac_addr
[
4
]
=
0xfe
;
mac_addr
[
5
]
=
0xba
;
timer_init
(
1
);
ep_init
(
mac_addr
);
ep_enable
(
1
,
1
);
minic_init
();
pps_gen_init
();
}
#define LINK_UP 0
#define LINK_WENT_UP 1
#define LINK_DOWN 2
#define LINK_WENT_DOWN 3
int
wrc_check_link
()
{
static
int
prev_link_state
=
-
1
;
int
link_state
=
ep_link_up
(
NULL
);
int
rv
=
0
;
if
(
!
prev_link_state
&&
link_state
)
{
TRACE_DEV
(
"Link up.
\n
"
);
gpio_out
(
GPIO_LED_LINK
,
1
);
rv
=
LINK_WENT_UP
;
}
else
if
(
prev_link_state
&&
!
link_state
)
{
TRACE_DEV
(
"Link down.
\n
"
);
gpio_out
(
GPIO_LED_LINK
,
0
);
rv
=
LINK_WENT_DOWN
;
}
else
rv
=
(
link_state
?
LINK_UP
:
LINK_DOWN
);
prev_link_state
=
link_state
;
return
rv
;
}
int
main
(
void
)
{
wrc_initialize
();
calc_trans
();
for
(;;);
for
(;;)
{
int
l_status
=
wrc_check_link
();
switch
(
l_status
)
{
case
LINK_WENT_UP
:
mprintf
(
"Link up.
\n
"
);
spll_init
(
SPLL_MODE_SLAVE
,
0
,
1
);
case
LINK_UP
:
break
;
case
LINK_WENT_DOWN
:
mprintf
(
"Link down.
\n
"
);
break
;
}
spll_show_stats
();
// timer_delay(1000);
}
return
0
;
}
tests/tests.mk
0 → 100644
View file @
d6ba0125
OBJS_TESTS = tests/measure_t24p.o
\ No newline at end of file
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