examples/mini/mini.c
changeset 2589 2b9c78543663
parent 2271 1798bcdaa8d0
equal deleted inserted replaced
2415:af21f0bdc7c9 2589:2b9c78543663
   329         // check for master state (optional)
   329         // check for master state (optional)
   330         check_master_state();
   330         check_master_state();
   331 
   331 
   332         // check for islave configuration state(s) (optional)
   332         // check for islave configuration state(s) (optional)
   333         check_slave_config_states();
   333         check_slave_config_states();
   334         
   334 
   335 #if SDO_ACCESS
   335 #if SDO_ACCESS
   336         // read process data SDO
   336         // read process data SDO
   337         read_sdo();
   337         read_sdo();
   338 #endif
   338 #endif
   339 
   339 
   356     add_timer(&timer);
   356     add_timer(&timer);
   357 }
   357 }
   358 
   358 
   359 /*****************************************************************************/
   359 /*****************************************************************************/
   360 
   360 
   361 void request_lock_callback(void *cb_data)
   361 void send_callback(void *cb_data)
   362 {
   362 {
   363     down(&master_sem);
   363     ec_master_t *m = (ec_master_t *) cb_data;
   364 }
   364     down(&master_sem);
   365 
   365     ecrt_master_send_ext(m);
   366 /*****************************************************************************/
   366     up(&master_sem);
   367 
   367 }
   368 void release_lock_callback(void *cb_data)
   368 
   369 {
   369 /*****************************************************************************/
       
   370 
       
   371 void receive_callback(void *cb_data)
       
   372 {
       
   373     ec_master_t *m = (ec_master_t *) cb_data;
       
   374     down(&master_sem);
       
   375     ecrt_master_receive(m);
   370     up(&master_sem);
   376     up(&master_sem);
   371 }
   377 }
   372 
   378 
   373 /*****************************************************************************/
   379 /*****************************************************************************/
   374 
   380 
   379     ec_slave_config_t *sc;
   385     ec_slave_config_t *sc;
   380 #endif
   386 #endif
   381 #if EXTERNAL_MEMORY
   387 #if EXTERNAL_MEMORY
   382     unsigned int size;
   388     unsigned int size;
   383 #endif
   389 #endif
   384     
   390 
   385     printk(KERN_INFO PFX "Starting...\n");
   391     printk(KERN_INFO PFX "Starting...\n");
   386 
   392 
   387     master = ecrt_request_master(0);
   393     master = ecrt_request_master(0);
   388     if (!master) {
   394     if (!master) {
   389         ret = -EBUSY; 
   395         ret = -EBUSY;
   390         printk(KERN_ERR PFX "Requesting master 0 failed.\n");
   396         printk(KERN_ERR PFX "Requesting master 0 failed.\n");
   391         goto out_return;
   397         goto out_return;
   392     }
   398     }
   393 
   399 
   394     sema_init(&master_sem, 1);
   400     sema_init(&master_sem, 1);
   395     ecrt_master_callbacks(master,
   401     ecrt_master_callbacks(master, send_callback, receive_callback, master);
   396             request_lock_callback, release_lock_callback, master);
       
   397 
   402 
   398     printk(KERN_INFO PFX "Registering domain...\n");
   403     printk(KERN_INFO PFX "Registering domain...\n");
   399     if (!(domain1 = ecrt_master_create_domain(master))) {
   404     if (!(domain1 = ecrt_master_create_domain(master))) {
   400         printk(KERN_ERR PFX "Domain creation failed!\n");
   405         printk(KERN_ERR PFX "Domain creation failed!\n");
   401         goto out_release_master;
   406         goto out_release_master;
   437     }
   442     }
   438 #endif
   443 #endif
   439 
   444 
   440 #if SDO_ACCESS
   445 #if SDO_ACCESS
   441     printk(KERN_INFO PFX "Creating SDO requests...\n");
   446     printk(KERN_INFO PFX "Creating SDO requests...\n");
   442     if (!(sdo = ecrt_slave_config_create_sdo_request(
   447     if (!(sdo = ecrt_slave_config_create_sdo_request(sc_ana_in, 0x3102, 2, 2))) {
   443                     sc_ana_in, 0x3102, 2, 2))) {
       
   444         printk(KERN_ERR PFX "Failed to create SDO request.\n");
   448         printk(KERN_ERR PFX "Failed to create SDO request.\n");
   445         goto out_release_master;
   449         goto out_release_master;
   446     }
   450     }
   447     ecrt_sdo_request_timeout(sdo, 500); // ms
   451     ecrt_sdo_request_timeout(sdo, 500); // ms
   448 #endif
   452 #endif