IGH接口函数

ecrt_master_application_time

1
2
3
4
5
6
7
8
9
void ecrt_master_application_time(ec_master_t *master, uint64_t app_time)
{
master->app_time = app_time;

if (unlikely(!master->has_app_time)) {
master->app_start_time = app_time;
master->has_app_time = 1;
}
}

ecrt_master_reference_clock_time

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int ecrt_master_reference_clock_time(ec_master_t *master, uint32_t *time)
{
if (!master->dc_ref_clock) {
return -ENXIO;
}

if (master->sync_datagram.state != EC_DATAGRAM_RECEIVED) {
return -EIO;
}

// Get returned datagram time, transmission delay removed.
*time = EC_READ_U32(master->sync_datagram.data) -
master->dc_ref_clock->transmission_delay;

return 0;
}

ecrt_master_sync_reference_clock

1
2
3
4
5
6
7
void ecrt_master_sync_reference_clock(ec_master_t *master)
{
if (master->dc_ref_clock) {
EC_WRITE_U32(master->ref_sync_datagram.data, master->app_time);
ec_master_queue_datagram(master, &master->ref_sync_datagram);
}
}

ecrt_master_sync_slave_clocks

1
2
3
4
5
6
7
void ecrt_master_sync_slave_clocks(ec_master_t *master)
{
if (master->dc_ref_clock) {
ec_datagram_zero(&master->sync_datagram);
ec_master_queue_datagram(master, &master->sync_datagram);
}
}