rt/msr_module.c
changeset 98 f564d0929292
parent 91 0120d6214948
child 104 052bc82d5442
equal deleted inserted replaced
97:e6264685dd7b 98:f564d0929292
    48 static struct ipipe_sysinfo sys_info;
    48 static struct ipipe_sysinfo sys_info;
    49 
    49 
    50 // EtherCAT
    50 // EtherCAT
    51 ec_master_t *master = NULL;
    51 ec_master_t *master = NULL;
    52 ec_domain_t *domain1 = NULL;
    52 ec_domain_t *domain1 = NULL;
       
    53 ec_domain_t *domain2 = NULL;
    53 
    54 
    54 // Prozessdaten
    55 // Prozessdaten
    55 void *r_ssi;
    56 void *r_ssi;
       
    57 void *r_ssi2;
    56 void *r_inc;
    58 void *r_inc;
    57 
    59 
    58 uint32_t k_angle;
    60 uint32_t k_angle;
    59 uint32_t k_pos;
    61 uint32_t k_pos;
    60 
    62 
    61 ec_field_init_t domain1_fields[] = {
    63 ec_field_init_t domain1_fields[] = {
    62     {&r_ssi,  "1", "Beckhoff", "EL5001", ec_ipvalue, 0, 1},
    64     {&r_ssi,  "1", "Beckhoff", "EL5001", ec_ipvalue, 0, 1},
    63     {&r_inc, "10", "Beckhoff", "EL5101", ec_ipvalue, 0, 1},
       
    64     {}
    65     {}
    65 };
    66 };
    66 
    67 
       
    68 ec_field_init_t domain2_fields[] = {
       
    69     {&r_ssi2,  "1", "Beckhoff", "EL5001", ec_ipvalue, 0, 1},
       
    70     {}
       
    71 };
       
    72 
    67 /*****************************************************************************/
    73 /*****************************************************************************/
    68 
    74 
    69 static void msr_controller_run(void)
    75 static void msr_controller_run(void)
    70 {
    76 {
       
    77     static unsigned int counter = 0;
       
    78 
       
    79     if (counter) counter--;
       
    80     else {
       
    81         //EtherCAT_rt_master_debug(master, 2);
       
    82         counter = MSR_ABTASTFREQUENZ;
       
    83     }
       
    84 
    71     // Prozessdaten lesen und schreiben
    85     // Prozessdaten lesen und schreiben
    72     EtherCAT_rt_domain_xio(domain1);
    86     EtherCAT_rt_domain_queue(domain1);
    73 
    87     EtherCAT_rt_domain_queue(domain2);
    74     k_angle = EC_READ_U16(r_inc);
    88 
       
    89     EtherCAT_rt_master_xio(master);
       
    90 
       
    91     EtherCAT_rt_domain_process(domain1);
       
    92     EtherCAT_rt_domain_process(domain2);
       
    93 
       
    94     //k_angle = EC_READ_U16(r_inc);
    75     k_pos = EC_READ_U32(r_ssi);
    95     k_pos = EC_READ_U32(r_ssi);
       
    96 
       
    97     //EtherCAT_rt_master_debug(master, 0);
    76 }
    98 }
    77 
    99 
    78 /*****************************************************************************/
   100 /*****************************************************************************/
    79 
   101 
    80 int msr_globals_register(void)
   102 int msr_globals_register(void)
   116 /*****************************************************************************/
   138 /*****************************************************************************/
   117 
   139 
   118 int __init init_rt_module(void)
   140 int __init init_rt_module(void)
   119 {
   141 {
   120     struct ipipe_domain_attr attr; //ipipe
   142     struct ipipe_domain_attr attr; //ipipe
   121     const ec_field_init_t *field;
       
   122     uint32_t version;
   143     uint32_t version;
   123 
   144 
   124     // Als allererstes die RT-lib initialisieren
   145     // Als allererstes die RT-lib initialisieren
   125     if (msr_rtlib_init(1, MSR_ABTASTFREQUENZ, 10, &msr_globals_register) < 0) {
   146     if (msr_rtlib_init(1, MSR_ABTASTFREQUENZ, 10, &msr_globals_register) < 0) {
   126         msr_print_warn("msr_modul: can't initialize rtlib!");
   147         msr_print_warn("msr_modul: can't initialize rtlib!");
   132         goto out_msr_cleanup;
   153         goto out_msr_cleanup;
   133     }
   154     }
   134 
   155 
   135     //EtherCAT_rt_master_print(master);
   156     //EtherCAT_rt_master_print(master);
   136 
   157 
   137     printk(KERN_INFO "Registering domain...\n");
   158     printk(KERN_INFO "Registering domains...\n");
   138 
   159 
   139     if (!(domain1 = EtherCAT_rt_master_register_domain(master, ec_sync, 100)))
   160     if (!(domain1 = EtherCAT_rt_master_register_domain(master, ec_sync, 100)))
   140     {
   161     {
   141         printk(KERN_ERR "EtherCAT: Could not register domain!\n");
   162         printk(KERN_ERR "EtherCAT: Could not register domain!\n");
   142         goto out_release_master;
   163         goto out_release_master;
   143     }
   164     }
   144 
   165 
       
   166     if (!(domain2 = EtherCAT_rt_master_register_domain(master, ec_sync, 100)))
       
   167     {
       
   168         printk(KERN_ERR "EtherCAT: Could not register domain!\n");
       
   169         goto out_release_master;
       
   170     }
       
   171 
   145     printk(KERN_INFO "Registering domain fields...\n");
   172     printk(KERN_INFO "Registering domain fields...\n");
   146 
   173 
   147     for (field = domain1_fields; field->data; field++)
   174     if (EtherCAT_rt_register_domain_fields(domain1, domain1_fields)) {
   148     {
   175         printk(KERN_ERR "Failed to register domain fields.\n");
   149         if (!EtherCAT_rt_register_slave_field(domain1,
   176         goto out_release_master;
   150                                               field->address,
   177     }
   151                                               field->vendor,
   178 
   152                                               field->product,
   179     if (EtherCAT_rt_register_domain_fields(domain2, domain2_fields)) {
   153                                               field->data,
   180         printk(KERN_ERR "Failed to register domain fields.\n");
   154                                               field->field_type,
   181         goto out_release_master;
   155                                               field->field_index,
       
   156                                               field->field_count)) {
       
   157             printk(KERN_ERR "Could not register field!\n");
       
   158             goto out_release_master;
       
   159         }
       
   160     }
   182     }
   161 
   183 
   162     printk(KERN_INFO "Activating master...\n");
   184     printk(KERN_INFO "Activating master...\n");
       
   185 
       
   186     //EtherCAT_rt_master_debug(master, 2);
   163 
   187 
   164     if (EtherCAT_rt_master_activate(master)) {
   188     if (EtherCAT_rt_master_activate(master)) {
   165         printk(KERN_ERR "Could not activate master!\n");
   189         printk(KERN_ERR "Could not activate master!\n");
   166         goto out_release_master;
   190         goto out_release_master;
   167     }
   191     }
   168 
   192 
       
   193     //EtherCAT_rt_master_debug(master, 0);
       
   194 
   169 #if 1
   195 #if 1
   170     if (EtherCAT_rt_canopen_sdo_addr_read(master, "1", 0x100A, 1,
   196     if (EtherCAT_rt_canopen_sdo_addr_read(master, "6", 0x100A, 1,
   171                                           &version)) {
   197                                           &version)) {
   172         printk(KERN_ERR "Could not read SSI version!\n");
   198         printk(KERN_ERR "Could not read SSI version!\n");
   173         goto out_release_master;
   199         goto out_release_master;
   174     }
   200     }
   175     printk(KERN_INFO "Software-version: %u\n", version);
   201     printk(KERN_INFO "Software-version: %u\n", version);
   220     msr_rtlib_cleanup();
   246     msr_rtlib_cleanup();
   221 }
   247 }
   222 
   248 
   223 /*****************************************************************************/
   249 /*****************************************************************************/
   224 
   250 
       
   251 #define EC_LIT(X) #X
       
   252 #define EC_STR(X) EC_LIT(X)
       
   253 #define COMPILE_INFO "Revision " EC_STR(SVNREV) \
       
   254                      ", compiled by " EC_STR(USER) \
       
   255                      " at " __DATE__ " " __TIME__
       
   256 
   225 MODULE_LICENSE("GPL");
   257 MODULE_LICENSE("GPL");
   226 MODULE_AUTHOR ("Florian Pose <fp@igh-essen.com>");
   258 MODULE_AUTHOR ("Florian Pose <fp@igh-essen.com>");
   227 MODULE_DESCRIPTION ("EtherCAT real-time test environment");
   259 MODULE_DESCRIPTION ("EtherCAT real-time test environment");
       
   260 MODULE_VERSION(COMPILE_INFO);
   228 
   261 
   229 module_init(init_rt_module);
   262 module_init(init_rt_module);
   230 module_exit(cleanup_rt_module);
   263 module_exit(cleanup_rt_module);
   231 
   264 
   232 /*****************************************************************************/
   265 /*****************************************************************************/