master/fsm_slave_config.c
changeset 1225 4d5b739edcb5
parent 1180 846907b8cc4b
child 1277 1189e040fe12
equal deleted inserted replaced
1224:784bb76105cd 1225:4d5b739edcb5
   216                slave->ring_position);
   216                slave->ring_position);
   217 
   217 
   218     // clear FMMU configurations
   218     // clear FMMU configurations
   219     ec_datagram_fpwr(datagram, slave->station_address,
   219     ec_datagram_fpwr(datagram, slave->station_address,
   220             0x0600, EC_FMMU_PAGE_SIZE * slave->base_fmmu_count);
   220             0x0600, EC_FMMU_PAGE_SIZE * slave->base_fmmu_count);
   221     memset(datagram->data, 0x00, EC_FMMU_PAGE_SIZE * slave->base_fmmu_count);
   221     ec_datagram_zero(datagram);
   222     fsm->retries = EC_FSM_RETRIES;
   222     fsm->retries = EC_FSM_RETRIES;
   223     fsm->state = ec_fsm_slave_config_state_clear_fmmus;
   223     fsm->state = ec_fsm_slave_config_state_clear_fmmus;
   224 }
   224 }
   225 
   225 
   226 /*****************************************************************************/
   226 /*****************************************************************************/
   293     }
   293     }
   294 
   294 
   295     if (slave->sii.sync_count >= 2) { // mailbox configuration provided
   295     if (slave->sii.sync_count >= 2) { // mailbox configuration provided
   296         ec_datagram_fpwr(datagram, slave->station_address, 0x0800,
   296         ec_datagram_fpwr(datagram, slave->station_address, 0x0800,
   297                 EC_SYNC_PAGE_SIZE * slave->sii.sync_count);
   297                 EC_SYNC_PAGE_SIZE * slave->sii.sync_count);
   298         memset(datagram->data, 0x00,
   298         ec_datagram_zero(datagram);
   299                 EC_SYNC_PAGE_SIZE * slave->sii.sync_count);
       
   300 
   299 
   301         for (i = 0; i < 2; i++) {
   300         for (i = 0; i < 2; i++) {
   302             ec_sync_page(&slave->sii.syncs[i], i,
   301             ec_sync_page(&slave->sii.syncs[i], i,
   303                     slave->sii.syncs[i].default_length,
   302                     slave->sii.syncs[i].default_length,
   304                     EC_DIR_INVALID, // use default direction
   303                     EC_DIR_INVALID, // use default direction
   312                     " mailbox sync manager configurations.\n",
   311                     " mailbox sync manager configurations.\n",
   313                     slave->ring_position);
   312                     slave->ring_position);
   314 
   313 
   315         ec_datagram_fpwr(datagram, slave->station_address, 0x0800,
   314         ec_datagram_fpwr(datagram, slave->station_address, 0x0800,
   316                 EC_SYNC_PAGE_SIZE * 2);
   315                 EC_SYNC_PAGE_SIZE * 2);
   317         memset(datagram->data, 0x00, EC_SYNC_PAGE_SIZE * 2);
   316         ec_datagram_zero(datagram);
   318 
   317 
   319         ec_sync_init(&sync, slave);
   318         ec_sync_init(&sync, slave);
   320         sync.physical_start_address = slave->sii.rx_mailbox_offset;
   319         sync.physical_start_address = slave->sii.rx_mailbox_offset;
   321         sync.control_register = 0x26;
   320         sync.control_register = 0x26;
   322         sync.enable = 1;
   321         sync.enable = 1;
   551 
   550 
   552     // configure sync managers for process data
   551     // configure sync managers for process data
   553     ec_datagram_fpwr(datagram, slave->station_address,
   552     ec_datagram_fpwr(datagram, slave->station_address,
   554             0x0800 + EC_SYNC_PAGE_SIZE * offset,
   553             0x0800 + EC_SYNC_PAGE_SIZE * offset,
   555             EC_SYNC_PAGE_SIZE * num_pdo_syncs);
   554             EC_SYNC_PAGE_SIZE * num_pdo_syncs);
   556     memset(datagram->data, 0x00, EC_SYNC_PAGE_SIZE * num_pdo_syncs);
   555     ec_datagram_zero(datagram);
   557 
   556 
   558     for (i = 0; i < num_pdo_syncs; i++) {
   557     for (i = 0; i < num_pdo_syncs; i++) {
   559         sync_index = i + offset;
   558         sync_index = i + offset;
   560         sync = &slave->sii.syncs[sync_index];
   559         sync = &slave->sii.syncs[sync_index];
   561         sync_config = &slave->config->sync_configs[sync_index];
   560         sync_config = &slave->config->sync_configs[sync_index];
   631     }
   630     }
   632 
   631 
   633     // configure FMMUs
   632     // configure FMMUs
   634     ec_datagram_fpwr(datagram, slave->station_address,
   633     ec_datagram_fpwr(datagram, slave->station_address,
   635                      0x0600, EC_FMMU_PAGE_SIZE * slave->base_fmmu_count);
   634                      0x0600, EC_FMMU_PAGE_SIZE * slave->base_fmmu_count);
   636     memset(datagram->data, 0x00, EC_FMMU_PAGE_SIZE * slave->base_fmmu_count);
   635     ec_datagram_zero(datagram);
   637     for (i = 0; i < slave->config->used_fmmus; i++) {
   636     for (i = 0; i < slave->config->used_fmmus; i++) {
   638         fmmu = &slave->config->fmmu_configs[i];
   637         fmmu = &slave->config->fmmu_configs[i];
   639         if (!(sync = ec_slave_get_sync(slave, fmmu->sync_index))) {
   638         if (!(sync = ec_slave_get_sync(slave, fmmu->sync_index))) {
   640             slave->error_flag = 1;
   639             slave->error_flag = 1;
   641             fsm->state = ec_fsm_slave_config_state_error;
   640             fsm->state = ec_fsm_slave_config_state_error;