diff -r e6264685dd7b -r f564d0929292 rt/msr_module.c --- a/rt/msr_module.c Thu Mar 02 13:08:07 2006 +0000 +++ b/rt/msr_module.c Mon Mar 06 15:12:34 2006 +0000 @@ -50,9 +50,11 @@ // EtherCAT ec_master_t *master = NULL; ec_domain_t *domain1 = NULL; +ec_domain_t *domain2 = NULL; // Prozessdaten void *r_ssi; +void *r_ssi2; void *r_inc; uint32_t k_angle; @@ -60,19 +62,39 @@ ec_field_init_t domain1_fields[] = { {&r_ssi, "1", "Beckhoff", "EL5001", ec_ipvalue, 0, 1}, - {&r_inc, "10", "Beckhoff", "EL5101", ec_ipvalue, 0, 1}, {} }; +ec_field_init_t domain2_fields[] = { + {&r_ssi2, "1", "Beckhoff", "EL5001", ec_ipvalue, 0, 1}, + {} +}; + /*****************************************************************************/ static void msr_controller_run(void) { + static unsigned int counter = 0; + + if (counter) counter--; + else { + //EtherCAT_rt_master_debug(master, 2); + counter = MSR_ABTASTFREQUENZ; + } + // Prozessdaten lesen und schreiben - EtherCAT_rt_domain_xio(domain1); - - k_angle = EC_READ_U16(r_inc); + EtherCAT_rt_domain_queue(domain1); + EtherCAT_rt_domain_queue(domain2); + + EtherCAT_rt_master_xio(master); + + EtherCAT_rt_domain_process(domain1); + EtherCAT_rt_domain_process(domain2); + + //k_angle = EC_READ_U16(r_inc); k_pos = EC_READ_U32(r_ssi); + + //EtherCAT_rt_master_debug(master, 0); } /*****************************************************************************/ @@ -118,7 +140,6 @@ int __init init_rt_module(void) { struct ipipe_domain_attr attr; //ipipe - const ec_field_init_t *field; uint32_t version; // Als allererstes die RT-lib initialisieren @@ -134,7 +155,7 @@ //EtherCAT_rt_master_print(master); - printk(KERN_INFO "Registering domain...\n"); + printk(KERN_INFO "Registering domains...\n"); if (!(domain1 = EtherCAT_rt_master_register_domain(master, ec_sync, 100))) { @@ -142,32 +163,37 @@ goto out_release_master; } + if (!(domain2 = EtherCAT_rt_master_register_domain(master, ec_sync, 100))) + { + printk(KERN_ERR "EtherCAT: Could not register domain!\n"); + goto out_release_master; + } + 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 "Could not register field!\n"); - goto out_release_master; - } + if (EtherCAT_rt_register_domain_fields(domain1, domain1_fields)) { + printk(KERN_ERR "Failed to register domain fields.\n"); + goto out_release_master; + } + + if (EtherCAT_rt_register_domain_fields(domain2, domain2_fields)) { + printk(KERN_ERR "Failed to register domain fields.\n"); + goto out_release_master; } printk(KERN_INFO "Activating master...\n"); + //EtherCAT_rt_master_debug(master, 2); + if (EtherCAT_rt_master_activate(master)) { printk(KERN_ERR "Could not activate master!\n"); goto out_release_master; } + //EtherCAT_rt_master_debug(master, 0); + #if 1 - if (EtherCAT_rt_canopen_sdo_addr_read(master, "1", 0x100A, 1, + if (EtherCAT_rt_canopen_sdo_addr_read(master, "6", 0x100A, 1, &version)) { printk(KERN_ERR "Could not read SSI version!\n"); goto out_release_master; @@ -222,9 +248,16 @@ /*****************************************************************************/ +#define EC_LIT(X) #X +#define EC_STR(X) EC_LIT(X) +#define COMPILE_INFO "Revision " EC_STR(SVNREV) \ + ", compiled by " EC_STR(USER) \ + " at " __DATE__ " " __TIME__ + MODULE_LICENSE("GPL"); MODULE_AUTHOR ("Florian Pose "); MODULE_DESCRIPTION ("EtherCAT real-time test environment"); +MODULE_VERSION(COMPILE_INFO); module_init(init_rt_module); module_exit(cleanup_rt_module);