--- 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);