diff --git a/master/globals.h b/master/globals.h index 1ab13dba..1e13bece 100644 --- a/master/globals.h +++ b/master/globals.h @@ -52,6 +52,9 @@ /** size of the EoE tx queue */ #define EC_EOE_TX_QUEUE_SIZE 100 +/** clock frequency for the EoE state machines */ +#define EC_EOE_FREQUENCY 1000 + /****************************************************************************** * EtherCAT protocol *****************************************************************************/ diff --git a/master/master.c b/master/master.c index 3afd54f9..c8dd9c8c 100644 --- a/master/master.c +++ b/master/master.c @@ -876,22 +876,23 @@ void ec_master_run_eoe(void *data /**< master pointer */) ec_eoe_t *eoe; // request_cb must return 0, if the lock has been aquired! - if (master->request_cb(master->cb_data)) goto queue; + if (!master->request_cb(master->cb_data)) + { + ecrt_master_async_receive(master); + list_for_each_entry(eoe, &master->eoe_slaves, list) { + ec_eoe_run(eoe); + } + ecrt_master_async_send(master); - ecrt_master_async_receive(master); - list_for_each_entry(eoe, &master->eoe_slaves, list) { - ec_eoe_run(eoe); + master->release_cb(master->cb_data); } - ecrt_master_async_send(master); - master->release_cb(master->cb_data); - - queue: #ifdef EOE_TIMER - master->eoe_timer.expires += HZ / 1000; + master->eoe_timer.expires += HZ / EC_EOE_FREQUENCY; add_timer(&master->eoe_timer); #else - queue_delayed_work(master->eoe_workqueue, &master->eoe_work, HZ / 1000); + queue_delayed_work(master->eoe_workqueue, &master->eoe_work, + HZ / EC_EOE_FREQUENCY); #endif }