diff -r f859d567f94e -r 42b62867574d master/fmmu_config.c --- a/master/fmmu_config.c Fri Jan 22 10:11:58 2016 +0100 +++ b/master/fmmu_config.c Fri Jan 22 13:09:43 2016 +0100 @@ -60,13 +60,23 @@ fmmu->sync_index = sync_index; fmmu->dir = dir; - fmmu->logical_start_address = domain->data_size; - fmmu->data_size = ec_pdo_list_total_size( - &sc->sync_configs[sync_index].pdos); + fmmu->logical_domain_offset = 0; + fmmu->data_size = 0; ec_domain_add_fmmu_config(domain, fmmu); } +void ec_fmmu_set_domain_offset_size( + ec_fmmu_config_t *fmmu, /**< EtherCAT FMMU configuration. */ + uint32_t logical_domain_offset, /**< Logical offset address + relative to domain->logical_base_address. */ + unsigned data_size /**< Covered PDO size. */ + ) +{ + fmmu->logical_domain_offset = logical_domain_offset; + fmmu->data_size = data_size; +} + /*****************************************************************************/ /** Initializes an FMMU configuration page. @@ -79,13 +89,14 @@ uint8_t *data /**> Configuration page memory. */ ) { - EC_CONFIG_DBG(fmmu->sc, 1, "FMMU: LogAddr 0x%08X, Size %3u," + EC_CONFIG_DBG(fmmu->sc, 1, "FMMU: LogOff 0x%08X, Size %3u," " PhysAddr 0x%04X, SM%u, Dir %s\n", - fmmu->logical_start_address, fmmu->data_size, + fmmu->logical_domain_offset, fmmu->data_size, sync->physical_start_address, fmmu->sync_index, fmmu->dir == EC_DIR_INPUT ? "in" : "out"); - EC_WRITE_U32(data, fmmu->logical_start_address); + EC_WRITE_U32(data, fmmu->domain->logical_base_address + + fmmu->logical_domain_offset); EC_WRITE_U16(data + 4, fmmu->data_size); // size of fmmu EC_WRITE_U8 (data + 6, 0x00); // logical start bit EC_WRITE_U8 (data + 7, 0x07); // logical end bit