diff --git a/master/master.c b/master/master.c index da9627ea531704a662879c8596143178d7a81437..90dfc8cd7f5118aafac4b4a0291aea2bb5db1e8f 100644 --- a/master/master.c +++ b/master/master.c @@ -710,6 +710,18 @@ void ec_fmmu_config(const ec_fmmu_t *fmmu, /**< FMMU */ sync_size = ec_slave_calc_sync_size(slave, fmmu->sync); + if (slave->master->debug_level) { + EC_DBG("Slave %i, FMMU %i:\n", + slave->ring_position, fmmu->index); + + EC_DBG(" Logical address: 0x%04X\n", fmmu->logical_start_address); + EC_DBG(" Size: %i\n", sync_size); + EC_DBG(" Physical address: 0x%04X\n", + fmmu->sync->physical_start_address); + EC_DBG(" Direction: %s\n", + ((fmmu->sync->control_register & 0x04) ? "output" : "input")); + } + EC_WRITE_U32(data, fmmu->logical_start_address); EC_WRITE_U16(data + 4, sync_size); // size of fmmu EC_WRITE_U8 (data + 6, 0x00); // logical start bit diff --git a/master/slave.c b/master/slave.c index b4412d45b626939cd1c2fa88bf8e1893eee775aa..6a491ad341f3c5cfb487df1e6d7c6664162e2fcd 100644 --- a/master/slave.c +++ b/master/slave.c @@ -464,11 +464,14 @@ int ec_slave_prepare_fmmu(ec_slave_t *slave, /**< EtherCAT slave */ ) { unsigned int i; + ec_fmmu_t *fmmu; // FMMU configuration already prepared? - for (i = 0; i < slave->fmmu_count; i++) - if (slave->fmmus[i].domain == domain && slave->fmmus[i].sync == sync) + for (i = 0; i < slave->fmmu_count; i++) { + fmmu = &slave->fmmus[i]; + if (fmmu->domain == domain && fmmu->sync == sync) return 0; + } // reserve new FMMU... @@ -477,9 +480,13 @@ int ec_slave_prepare_fmmu(ec_slave_t *slave, /**< EtherCAT slave */ return -1; } - slave->fmmus[slave->fmmu_count].domain = domain; - slave->fmmus[slave->fmmu_count].sync = sync; - slave->fmmus[slave->fmmu_count].logical_start_address = 0; + fmmu = &slave->fmmus[slave->fmmu_count]; + + fmmu->index = slave->fmmu_count; + fmmu->domain = domain; + fmmu->sync = sync; + fmmu->logical_start_address = 0; + slave->fmmu_count++; slave->registered = 1; diff --git a/master/slave.h b/master/slave.h index e53a4fea010f444e6080401b8e21c3071ff01f42..d4128ea5f9fbd94630f52d5f9ec3410b7785c3e1 100644 --- a/master/slave.h +++ b/master/slave.h @@ -173,6 +173,7 @@ ec_sii_pdo_entry_t; typedef struct { + unsigned int index; /**< FMMU index */ const ec_domain_t *domain; /**< domain */ const ec_sii_sync_t *sync; /**< sync manager */ uint32_t logical_start_address; /**< logical start address */