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