rt/msr_module.c
changeset 68 a452700db994
parent 62 0fb2a690f4d0
child 73 9f4ea66d89a3
--- a/rt/msr_module.c	Tue Feb 14 14:40:47 2006 +0000
+++ b/rt/msr_module.c	Tue Feb 14 14:50:20 2006 +0000
@@ -52,16 +52,15 @@
 
 // EtherCAT
 ec_master_t *master = NULL;
-ec_slave_t *s_in1, *s_out1, *s_out2, *s_out3;
-
-double value;
-int dig1;
+ec_slave_t *s_in1, *s_out1, *s_ssi, *s_inc;
+
+uint16_t angle0;
 
 ec_slave_init_t slaves[] = {
-    {&s_in1,   1, "Beckhoff", "EL3102", 0},
-    {&s_out1,  8, "Beckhoff", "EL2004", 0},
-    {&s_out2,  9, "Beckhoff", "EL2004", 0},
-    {&s_out3, 10, "Beckhoff", "EL2004", 0}
+    {&s_in1,  "1", "Beckhoff", "EL3102", 0},
+    {&s_out1, "2", "Beckhoff", "EL2004", 0},
+    {&s_ssi,  "3", "Beckhoff", "EL5001", 0},
+    {&s_inc,  "0:4", "Beckhoff", "EL5101", 0}
 };
 
 #define SLAVE_COUNT (sizeof(slaves) / sizeof(ec_slave_init_t))
@@ -78,30 +77,29 @@
 
     msr_jitter_run(MSR_ABTASTFREQUENZ);
 
+    EC_WRITE_EL20XX(s_out1, 3, EC_READ_EL31XX(s_in1, 0) < 0);
+
+    if (!counter) {
+        EtherCAT_rt_debug_level(master, 2);
+    }
+
+    // Prozessdaten lesen und schreiben
+    EtherCAT_rt_domain_xio(master, 0, 40);
+
     if (counter) {
         counter--;
     }
     else {
-        // "Star Trek"-Effekte
-        EC_WRITE_EL20XX(s_out1, 0, jiffies & 1);
-        EC_WRITE_EL20XX(s_out1, 1, (jiffies >> 1) & 1);
-        EC_WRITE_EL20XX(s_out1, 2, (jiffies >> 2) & 1);
-        EC_WRITE_EL20XX(s_out1, 3, (jiffies >> 3) & 1);
-        EC_WRITE_EL20XX(s_out2, 0, (jiffies >> 4) & 1);
-        EC_WRITE_EL20XX(s_out2, 1, (jiffies >> 3) & 1);
-        EC_WRITE_EL20XX(s_out2, 2, (jiffies >> 2) & 1);
-        EC_WRITE_EL20XX(s_out2, 3, (jiffies >> 6) & 1);
-        EC_WRITE_EL20XX(s_out3, 0, (jiffies >> 7) & 1);
-        EC_WRITE_EL20XX(s_out3, 1, (jiffies >> 2) & 1);
-        EC_WRITE_EL20XX(s_out3, 2, (jiffies >> 8) & 1);
-
-        counter = MSR_ABTASTFREQUENZ / 4;
-    }
-
-    EC_WRITE_EL20XX(s_out3, 3, EC_READ_EL31XX(s_in1, 0) < 0);
-
-    // Prozessdaten lesen und schreiben
-    EtherCAT_rt_domain_xio(master, 0, 40);
+        EtherCAT_rt_debug_level(master, 0);
+        printk("SSI status=0x%X value=%u\n",
+               EC_READ_EL5001_STATE(s_ssi), EC_READ_EL5001_VALUE(s_ssi));
+        printk("INC status=0x%X value=%u\n",
+               EC_READ_EL5101_STATE(s_inc), EC_READ_EL5101_VALUE(s_inc));
+
+        counter = MSR_ABTASTFREQUENZ * 5;
+    }
+
+    angle0 = EC_READ_EL5101_VALUE(s_inc);
 }
 
 /******************************************************************************
@@ -143,7 +141,7 @@
     ipipe_virtualize_irq(ipipe_current_domain,sys_info.archdep.tmirq,
 			 &msr_run, NULL, IPIPE_HANDLE_MASK);
 
-    ipipe_tune_timer(1000000000UL/MSR_ABTASTFREQUENZ,0);
+    ipipe_tune_timer(1000000000UL / MSR_ABTASTFREQUENZ, 0);
 }
 
 /******************************************************************************
@@ -162,8 +160,9 @@
 
 int msr_globals_register(void)
 {
-    msr_reg_kanal("/value", "V", &value, TDBL);
-    msr_reg_kanal("/dig1", "", &dig1, TINT);
+    //msr_reg_kanal("/value", "V", &value, TDBL);
+    //msr_reg_kanal("/dig1", "", &dig1, TINT);
+    msr_reg_kanal("/angle0", "", &angle0, TINT);
 
     return 0;
 }
@@ -201,6 +200,16 @@
         goto out_release_master;
     }
 
+    if (EtherCAT_rt_canopen_sdo_write(master, s_ssi, 0x4067, 0, 1, 2)) {
+        printk(KERN_ERR "EtherCAT: Could not set SSI baud rate!\n");
+        goto out_release_master;
+    }
+
+    if (EtherCAT_rt_canopen_sdo_write(master, s_ssi, 0x4061, 4, 1, 1)) {
+        printk(KERN_ERR "EtherCAT: Could not set SSI feature bit!\n");
+        goto out_release_master;
+    }
+
     do_gettimeofday(&process_time);
     msr_time_increment.tv_sec = 0;
     msr_time_increment.tv_usec = (unsigned int) (1000000 / MSR_ABTASTFREQUENZ);