53 ec_master_t *master = NULL; |
53 ec_master_t *master = NULL; |
54 ec_domain_t *domain1 = NULL; |
54 ec_domain_t *domain1 = NULL; |
55 ec_domain_t *domain2 = NULL; |
55 ec_domain_t *domain2 = NULL; |
56 |
56 |
57 // Prozessdaten |
57 // Prozessdaten |
58 void *r_ssi; |
58 void *r_ssi, *r_ssi_st; |
59 void *r_ssi2; |
59 void *r_ssi2; |
60 void *r_inc; |
60 void *r_inc; |
61 |
61 |
62 uint32_t k_angle; |
62 uint32_t k_angle; |
63 uint32_t k_pos; |
63 uint32_t k_ssi_pos; |
|
64 uint32_t k_ssi_status; |
64 uint32_t k_preio; |
65 uint32_t k_preio; |
65 uint32_t k_postio; |
66 uint32_t k_postio; |
66 uint32_t k_finished; |
67 uint32_t k_finished; |
67 |
68 |
68 ec_field_init_t domain1_fields[] = { |
69 ec_field_init_t domain1_fields[] = { |
69 {&r_ssi, "1", "Beckhoff", "EL5001", "InputValue", 0}, |
70 {&r_ssi, "1", "Beckhoff", "EL5001", "InputValue", 0}, |
|
71 {&r_ssi_st, "1", "Beckhoff", "EL5001", "Status", 0}, |
70 {} |
72 {} |
71 }; |
73 }; |
72 |
74 |
73 ec_field_init_t domain2_fields[] = { |
75 ec_field_init_t domain2_fields[] = { |
74 {&r_ssi2, "1", "Beckhoff", "EL5001", "InputValue", 0}, |
76 {&r_ssi2, "1", "Beckhoff", "EL5001", "InputValue", 0}, |
97 ecrt_master_async_receive(master); |
99 ecrt_master_async_receive(master); |
98 ecrt_domain_process(domain1); |
100 ecrt_domain_process(domain1); |
99 ecrt_domain_process(domain2); |
101 ecrt_domain_process(domain2); |
100 |
102 |
101 // Prozessdaten verarbeiten |
103 // Prozessdaten verarbeiten |
102 k_pos = EC_READ_U32(r_ssi); |
104 k_ssi_pos = EC_READ_U32(r_ssi); |
|
105 k_ssi_status = EC_READ_U32(r_ssi_st); |
103 |
106 |
104 // Senden |
107 // Senden |
105 ecrt_domain_queue(domain1); |
108 ecrt_domain_queue(domain1); |
106 ecrt_domain_queue(domain2); |
109 ecrt_domain_queue(domain2); |
107 ecrt_master_async_send(master); |
110 ecrt_master_async_send(master); |
112 ecrt_master_sync_io(master); |
115 ecrt_master_sync_io(master); |
113 ecrt_domain_process(domain1); |
116 ecrt_domain_process(domain1); |
114 ecrt_domain_process(domain2); |
117 ecrt_domain_process(domain2); |
115 |
118 |
116 // Prozessdaten verarbeiten |
119 // Prozessdaten verarbeiten |
117 k_pos = EC_READ_U32(r_ssi); |
120 k_ssi_pos = EC_READ_U32(r_ssi); |
|
121 k_ssi_status = EC_READ_U32(r_ssi_st); |
118 #endif |
122 #endif |
119 |
123 |
120 k_postio = (uint32_t) (get_cycles() - offset) * 1e6 / cpu_khz; |
124 k_postio = (uint32_t) (get_cycles() - offset) * 1e6 / cpu_khz; |
121 |
125 |
122 //ecrt_master_debug(master, 0); |
126 //ecrt_master_debug(master, 0); |
125 |
129 |
126 /*****************************************************************************/ |
130 /*****************************************************************************/ |
127 |
131 |
128 int msr_globals_register(void) |
132 int msr_globals_register(void) |
129 { |
133 { |
130 msr_reg_kanal("/angle0", "", &k_angle, TUINT); |
134 msr_reg_kanal("/angle0", "", &k_angle, TUINT); |
131 msr_reg_kanal("/pos0", "", &k_pos, TUINT); |
135 msr_reg_kanal("/pos0", "", &k_ssi_pos, TUINT); |
|
136 msr_reg_kanal("/ssi-status0", "", &k_ssi_status, TUINT); |
132 |
137 |
133 msr_reg_kanal("/Timing/Pre-IO", "ns", &k_preio, TUINT); |
138 msr_reg_kanal("/Timing/Pre-IO", "ns", &k_preio, TUINT); |
134 msr_reg_kanal("/Timing/Post-IO", "ns", &k_postio, TUINT); |
139 msr_reg_kanal("/Timing/Post-IO", "ns", &k_postio, TUINT); |
135 msr_reg_kanal("/Timing/Finished", "ns", &k_finished, TUINT); |
140 msr_reg_kanal("/Timing/Finished", "ns", &k_finished, TUINT); |
136 |
141 |
181 if ((master = ecrt_request_master(0)) == NULL) { |
186 if ((master = ecrt_request_master(0)) == NULL) { |
182 printk(KERN_ERR "Error requesting master 0!\n"); |
187 printk(KERN_ERR "Error requesting master 0!\n"); |
183 goto out_msr_cleanup; |
188 goto out_msr_cleanup; |
184 } |
189 } |
185 |
190 |
186 //ecrt_master_print(master); |
191 ecrt_master_print(master); |
187 |
192 |
188 printk(KERN_INFO "Registering domains...\n"); |
193 printk(KERN_INFO "Registering domains...\n"); |
189 |
194 |
190 if (!(domain1 = ecrt_master_create_domain(master))) { |
195 if (!(domain1 = ecrt_master_create_domain(master))) { |
191 printk(KERN_ERR "EtherCAT: Could not register domain!\n"); |
196 printk(KERN_ERR "Could not register domain!\n"); |
192 goto out_release_master; |
197 goto out_release_master; |
193 } |
198 } |
194 |
199 |
195 if (!(domain2 = ecrt_master_create_domain(master))) { |
200 if (!(domain2 = ecrt_master_create_domain(master))) { |
196 printk(KERN_ERR "EtherCAT: Could not register domain!\n"); |
201 printk(KERN_ERR "Could not register domain!\n"); |
197 goto out_release_master; |
202 goto out_release_master; |
198 } |
203 } |
199 |
204 |
200 printk(KERN_INFO "Registering domain fields...\n"); |
205 printk(KERN_INFO "Registering domain fields...\n"); |
201 |
206 |
218 goto out_release_master; |
223 goto out_release_master; |
219 } |
224 } |
220 |
225 |
221 //ecrt_master_debug(master, 0); |
226 //ecrt_master_debug(master, 0); |
222 |
227 |
223 #if 1 |
228 #if 0 |
224 if (ecrt_master_sdo_read(master, "6", 0x100A, 1, &version)) { |
229 if (ecrt_master_sdo_read(master, "1", 0x100A, 1, &version)) { |
225 printk(KERN_ERR "Could not read SSI version!\n"); |
230 printk(KERN_ERR "Could not read SSI version!\n"); |
226 goto out_release_master; |
231 goto out_deactivate; |
227 } |
232 } |
228 printk(KERN_INFO "Software-version: %u\n", version); |
233 printk(KERN_INFO "Software-version: %u\n", version); |
|
234 #endif |
|
235 |
|
236 #if 0 |
|
237 if (ecrt_master_sdo_write(master, "1", 0x4061, 1, 0, 1) || |
|
238 ecrt_master_sdo_write(master, "1", 0x4061, 2, 1, 1) || |
|
239 ecrt_master_sdo_write(master, "1", 0x4061, 3, 1, 1) || |
|
240 ecrt_master_sdo_write(master, "1", 0x4066, 0, 0, 1) || |
|
241 ecrt_master_sdo_write(master, "1", 0x4067, 0, 4, 1) || |
|
242 ecrt_master_sdo_write(master, "1", 0x4068, 0, 0, 1) || |
|
243 ecrt_master_sdo_write(master, "1", 0x4069, 0, 25, 1) || |
|
244 ecrt_master_sdo_write(master, "1", 0x406A, 0, 25, 1) || |
|
245 ecrt_master_sdo_write(master, "1", 0x406B, 0, 50, 1)) { |
|
246 printk(KERN_ERR "Failed to configure SSI slave!\n"); |
|
247 goto out_deactivate; |
|
248 } |
229 #endif |
249 #endif |
230 |
250 |
231 #ifdef ASYNC |
251 #ifdef ASYNC |
232 // Einmal senden und warten... |
252 // Einmal senden und warten... |
233 ecrt_master_prepare_async_io(master); |
253 ecrt_master_prepare_async_io(master); |