examples/msr/msr_sample.c
branchstable-1.2
changeset 1739 5fcbd29151d2
parent 1732 1cc865ba17c2
equal deleted inserted replaced
1738:bc89e3fba1a5 1739:5fcbd29151d2
    64 ec_domain_t *domain1 = NULL;
    64 ec_domain_t *domain1 = NULL;
    65 
    65 
    66 // raw process data
    66 // raw process data
    67 void *r_ana_out;
    67 void *r_ana_out;
    68 
    68 
    69 // Channels
    69 // channels
    70 double k_ana_out;
    70 double k_ana_out;
    71 
    71 
    72 ec_pdo_reg_t domain1_pdos[] = {
    72 ec_pdo_reg_t domain1_pdos[] = {
    73     {"3", Beckhoff_EL4132_Output1, &r_ana_out},
    73     {"3", Beckhoff_EL4132_Output1, &r_ana_out},
    74     {}
    74     {}
    76 
    76 
    77 /*****************************************************************************/
    77 /*****************************************************************************/
    78 
    78 
    79 void msr_controller_run(void)
    79 void msr_controller_run(void)
    80 {
    80 {
       
    81     // receive
    81     rt_sem_wait(&master_sem);
    82     rt_sem_wait(&master_sem);
    82 
       
    83     // receive
       
    84     ecrt_master_receive(master);
    83     ecrt_master_receive(master);
    85     ecrt_domain_process(domain1);
    84     ecrt_domain_process(domain1);
       
    85     rt_sem_signal(&master_sem);
    86 
    86 
    87     // Process data
    87     // Process data
    88     EC_WRITE_S16(r_ana_out, k_ana_out / 10.0 * 0x7FFF);
    88     EC_WRITE_S16(r_ana_out, k_ana_out / 10.0 * 0x7FFF);
    89 
    89 
    90     // Send
    90     // Send
       
    91     rt_sem_wait(&master_sem);
       
    92     ecrt_domain_queue(domain1);
    91     ecrt_master_run(master);
    93     ecrt_master_run(master);
    92     ecrt_master_send(master);
    94     ecrt_master_send(master);
    93 
       
    94     rt_sem_signal(&master_sem);
    95     rt_sem_signal(&master_sem);
    95 
    96 
    96     msr_write_kanal_list();
    97     msr_write_kanal_list();
    97 }
    98 }
    98 
    99 
   172     printk(KERN_INFO "Activating master...\n");
   173     printk(KERN_INFO "Activating master...\n");
   173     if (ecrt_master_activate(master)) {
   174     if (ecrt_master_activate(master)) {
   174         printk(KERN_ERR "Could not activate master!\n");
   175         printk(KERN_ERR "Could not activate master!\n");
   175         goto out_release_master;
   176         goto out_release_master;
   176     }
   177     }
   177 
       
   178     ecrt_master_prepare(master);
       
   179 
   178 
   180     printk("Starting cyclic sample thread...\n");
   179     printk("Starting cyclic sample thread...\n");
   181     ticks = start_rt_timer(nano2count(TIMERTICKS));
   180     ticks = start_rt_timer(nano2count(TIMERTICKS));
   182     if (rt_task_init(&task, msr_run, 0, 2000, 0, 1, NULL)) {
   181     if (rt_task_init(&task, msr_run, 0, 2000, 0, 1, NULL)) {
   183         printk(KERN_ERR "Failed to init RTAI task!\n");
   182         printk(KERN_ERR "Failed to init RTAI task!\n");
   193 
   192 
   194  out_stop_task:
   193  out_stop_task:
   195     rt_task_delete(&task);
   194     rt_task_delete(&task);
   196  out_stop_timer:
   195  out_stop_timer:
   197     stop_rt_timer();
   196     stop_rt_timer();
   198     ecrt_master_deactivate(master);
       
   199  out_release_master:
   197  out_release_master:
   200     ecrt_release_master(master);
   198     ecrt_release_master(master);
   201  out_msr_cleanup:
   199  out_msr_cleanup:
   202     msr_rtlib_cleanup();
   200     msr_rtlib_cleanup();
   203  out_return:
   201  out_return:
   221 }
   219 }
   222 
   220 
   223 /*****************************************************************************/
   221 /*****************************************************************************/
   224 
   222 
   225 MODULE_LICENSE("GPL");
   223 MODULE_LICENSE("GPL");
   226 MODULE_AUTHOR ("Florian Pose <fp@igh-essen.com>");
   224 MODULE_AUTHOR("Florian Pose <fp@igh-essen.com>");
   227 MODULE_DESCRIPTION ("EtherCAT RTAI MSR sample module");
   225 MODULE_DESCRIPTION("EtherCAT RTAI MSR sample module");
   228 
   226 
   229 module_init(init_mod);
   227 module_init(init_mod);
   230 module_exit(cleanup_mod);
   228 module_exit(cleanup_mod);
   231 
   229 
   232 /*****************************************************************************/
   230 /*****************************************************************************/