mini/mini.c
changeset 104 052bc82d5442
parent 98 f564d0929292
child 106 d6679c77ad3f
--- a/mini/mini.c	Wed Mar 15 20:19:05 2006 +0000
+++ b/mini/mini.c	Fri Mar 17 14:21:35 2006 +0000
@@ -12,8 +12,9 @@
 #include <linux/delay.h>
 #include <linux/timer.h>
 
-#include "../include/EtherCAT_rt.h" // Echtzeitschnittstelle
-#include "../include/EtherCAT_si.h" // Slave-Interface-Makros
+#include "../include/ecrt.h" // Echtzeitschnittstelle
+
+//#define ASYNC
 
 /*****************************************************************************/
 
@@ -29,14 +30,12 @@
 
 // Datenfelder
 void *r_ssi;
-void *r_inc;
 
 // Kanäle
-uint32_t k_angle, k_pos;
+uint32_t k_pos;
 
 ec_field_init_t domain1_fields[] = {
-    {&r_ssi,   "1", "Beckhoff", "EL5001", ec_ipvalue, 0, 1},
-    {&r_inc, "0:3", "Beckhoff", "EL5101", ec_ipvalue, 0, 1},
+    {&r_ssi,   "1", "Beckhoff", "EL5001", "InputValue", 0, 1},
     {}
 };
 
@@ -46,20 +45,32 @@
 {
     static unsigned int counter = 0;
 
-    // Prozessdaten lesen und schreiben
-    EtherCAT_rt_domain_queue(domain1);
-    EtherCAT_rt_master_xio(master);
-    EtherCAT_rt_domain_process(domain1);
+#ifdef ASYNC
+    // Prozessdaten emfpangen
+    ecrt_master_async_receive(master);
+    ecrt_domain_process(domain1);
 
-    k_angle = EC_READ_U16(r_inc);
+    // Prozessdaten verarbeiten
     k_pos   = EC_READ_U32(r_ssi);
 
+    // Prozessdaten senden
+    ecrt_domain_queue(domain1);
+    ecrt_master_async_send(master);
+#else
+    // Prozessdaten senden und emfpangen
+    ecrt_domain_queue(domain1);
+    ecrt_master_sync_io(master);
+    ecrt_domain_process(domain1);
+
+    // Prozessdaten verarbeiten
+    k_pos   = EC_READ_U32(r_ssi);
+#endif
+
     if (counter) {
         counter--;
     }
     else {
         counter = ABTASTFREQUENZ;
-        printk(KERN_INFO "k_angle = %i\n", k_angle);
         printk(KERN_INFO "k_pos   = %i\n", k_pos);
     }
 
@@ -72,20 +83,18 @@
 
 int __init init_mini_module(void)
 {
-    const ec_field_init_t *field;
-
     printk(KERN_INFO "=== Starting Minimal EtherCAT environment... ===\n");
 
-    if ((master = EtherCAT_rt_request_master(0)) == NULL) {
+    if ((master = ecrt_request_master(0)) == NULL) {
         printk(KERN_ERR "Error requesting master 0!\n");
         goto out_return;
     }
 
-    EtherCAT_rt_master_print(master);
+    //ecrt_master_print(master);
 
     printk(KERN_INFO "Registering domain...\n");
 
-    if (!(domain1 = EtherCAT_rt_master_register_domain(master, ec_sync, 100)))
+    if (!(domain1 = ecrt_master_create_domain(master)))
     {
         printk(KERN_ERR "EtherCAT: Could not register domain!\n");
         goto out_release_master;
@@ -93,28 +102,24 @@
 
     printk(KERN_INFO "Registering domain fields...\n");
 
-    for (field = domain1_fields; field->data; field++)
-    {
-        if (!EtherCAT_rt_register_slave_field(domain1,
-                                              field->address,
-                                              field->vendor,
-                                              field->product,
-                                              field->data,
-                                              field->field_type,
-                                              field->field_index,
-                                              field->field_count)) {
-            printk(KERN_ERR "EtherCAT: Could not register field!\n");
-            goto out_release_master;
-        }
+    if (ecrt_domain_register_field_list(domain1, domain1_fields)) {
+        printk(KERN_ERR "EtherCAT: Could not register field!\n");
+        goto out_release_master;
     }
 
     printk(KERN_INFO "Activating master...\n");
 
-    if (EtherCAT_rt_master_activate(master)) {
+    if (ecrt_master_activate(master)) {
         printk(KERN_ERR "EtherCAT: Could not activate master!\n");
         goto out_release_master;
     }
 
+#ifdef ASYNC
+    ecrt_domain_queue(domain1);
+    ecrt_master_async_send(master);
+    udelay(100);
+#endif
+
     printk("Starting cyclic sample thread.\n");
 
     init_timer(&timer);
@@ -127,7 +132,7 @@
     return 0;
 
  out_release_master:
-  EtherCAT_rt_release_master(master);
+  ecrt_release_master(master);
 
  out_return:
   return -1;
@@ -145,8 +150,8 @@
 
         printk(KERN_INFO "Deactivating master...\n");
 
-        EtherCAT_rt_master_deactivate(master);
-        EtherCAT_rt_release_master(master);
+        ecrt_master_deactivate(master);
+        ecrt_release_master(master);
     }
 
     printk(KERN_INFO "=== Minimal EtherCAT environment stopped. ===\n");