equal
deleted
inserted
replaced
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; |