master/fsm_slave_config.c
branchstable-1.5
changeset 2658 7690a5df7539
parent 2508 6b21b3f88a9a
equal deleted inserted replaced
2657:bb2163e6b145 2658:7690a5df7539
  1363     ec_master_t *master = slave->master;
  1363     ec_master_t *master = slave->master;
  1364     ec_slave_config_t *config = slave->config;
  1364     ec_slave_config_t *config = slave->config;
  1365     uint32_t abs_sync_diff;
  1365     uint32_t abs_sync_diff;
  1366     unsigned long diff_ms;
  1366     unsigned long diff_ms;
  1367     ec_sync_signal_t *sync0 = &config->dc_sync[0];
  1367     ec_sync_signal_t *sync0 = &config->dc_sync[0];
       
  1368     ec_sync_signal_t *sync1 = &config->dc_sync[1];
  1368     u64 start_time;
  1369     u64 start_time;
  1369 
  1370 
  1370     if (!config) { // config removed in the meantime
  1371     if (!config) { // config removed in the meantime
  1371         ec_fsm_slave_config_reconfigure(fsm);
  1372         ec_fsm_slave_config_reconfigure(fsm);
  1372         return;
  1373         return;
  1418 
  1419 
  1419     if (sync0->cycle_time) {
  1420     if (sync0->cycle_time) {
  1420         // find correct phase
  1421         // find correct phase
  1421         if (master->has_app_time) {
  1422         if (master->has_app_time) {
  1422             u64 diff, start;
  1423             u64 diff, start;
  1423             u32 remainder;
  1424             u32 remainder, cycle;
  1424 
  1425 
  1425             diff = start_time - master->app_start_time;
  1426             diff = start_time - master->app_start_time;
  1426             remainder = do_div(diff, sync0->cycle_time);
  1427             cycle = sync0->cycle_time + sync1->cycle_time;
  1427 
  1428             remainder = do_div(diff, cycle);
  1428             start = start_time +
  1429 
  1429                 sync0->cycle_time - remainder + sync0->shift_time;
  1430             start = start_time + cycle - remainder + sync0->shift_time;
  1430 
  1431 
  1431             EC_SLAVE_DBG(slave, 1, "app_start_time=%llu\n",
  1432             EC_SLAVE_DBG(slave, 1, "app_start_time=%llu\n",
  1432                     master->app_start_time);
  1433                     master->app_start_time);
  1433             EC_SLAVE_DBG(slave, 1, "      app_time=%llu\n", master->app_time);
  1434             EC_SLAVE_DBG(slave, 1, "      app_time=%llu\n", master->app_time);
  1434             EC_SLAVE_DBG(slave, 1, "    start_time=%llu\n", start_time);
  1435             EC_SLAVE_DBG(slave, 1, "    start_time=%llu\n", start_time);
  1435             EC_SLAVE_DBG(slave, 1, "    cycle_time=%u\n", sync0->cycle_time);
  1436             EC_SLAVE_DBG(slave, 1, "         cycle=%u\n", cycle);
  1436             EC_SLAVE_DBG(slave, 1, "    shift_time=%i\n", sync0->shift_time);
  1437             EC_SLAVE_DBG(slave, 1, "    shift_time=%i\n", sync0->shift_time);
  1437             EC_SLAVE_DBG(slave, 1, "     remainder=%u\n", remainder);
  1438             EC_SLAVE_DBG(slave, 1, "     remainder=%u\n", remainder);
  1438             EC_SLAVE_DBG(slave, 1, "         start=%llu\n", start);
  1439             EC_SLAVE_DBG(slave, 1, "         start=%llu\n", start);
  1439             start_time = start;
  1440             start_time = start;
  1440         } else {
  1441         } else {