rt/msr_module.c
changeset 133 b36d187ecc0b
parent 112 eec7639c7be9
child 134 aecc8cb72097
equal deleted inserted replaced
132:63a5b40eb7da 133:b36d187ecc0b
    53 ec_master_t *master = NULL;
    53 ec_master_t *master = NULL;
    54 ec_domain_t *domain1 = NULL;
    54 ec_domain_t *domain1 = NULL;
    55 ec_domain_t *domain2 = NULL;
    55 ec_domain_t *domain2 = NULL;
    56 
    56 
    57 // Prozessdaten
    57 // Prozessdaten
    58 void *r_ssi;
    58 void *r_ssi, *r_ssi_st;
    59 void *r_ssi2;
    59 void *r_ssi2;
    60 void *r_inc;
    60 void *r_inc;
    61 
    61 
    62 uint32_t k_angle;
    62 uint32_t k_angle;
    63 uint32_t k_pos;
    63 uint32_t k_ssi_pos;
       
    64 uint32_t k_ssi_status;
    64 uint32_t k_preio;
    65 uint32_t k_preio;
    65 uint32_t k_postio;
    66 uint32_t k_postio;
    66 uint32_t k_finished;
    67 uint32_t k_finished;
    67 
    68 
    68 ec_field_init_t domain1_fields[] = {
    69 ec_field_init_t domain1_fields[] = {
    69     {&r_ssi,  "1", "Beckhoff", "EL5001", "InputValue", 0},
    70     {&r_ssi,    "1", "Beckhoff", "EL5001", "InputValue", 0},
       
    71     {&r_ssi_st, "1", "Beckhoff", "EL5001", "Status",     0},
    70     {}
    72     {}
    71 };
    73 };
    72 
    74 
    73 ec_field_init_t domain2_fields[] = {
    75 ec_field_init_t domain2_fields[] = {
    74     {&r_ssi2,  "1", "Beckhoff", "EL5001", "InputValue", 0},
    76     {&r_ssi2,  "1", "Beckhoff", "EL5001", "InputValue", 0},
    97     ecrt_master_async_receive(master);
    99     ecrt_master_async_receive(master);
    98     ecrt_domain_process(domain1);
   100     ecrt_domain_process(domain1);
    99     ecrt_domain_process(domain2);
   101     ecrt_domain_process(domain2);
   100 
   102 
   101     // Prozessdaten verarbeiten
   103     // Prozessdaten verarbeiten
   102     k_pos = EC_READ_U32(r_ssi);
   104     k_ssi_pos = EC_READ_U32(r_ssi);
       
   105     k_ssi_status = EC_READ_U32(r_ssi_st);
   103 
   106 
   104     // Senden
   107     // Senden
   105     ecrt_domain_queue(domain1);
   108     ecrt_domain_queue(domain1);
   106     ecrt_domain_queue(domain2);
   109     ecrt_domain_queue(domain2);
   107     ecrt_master_async_send(master);
   110     ecrt_master_async_send(master);
   112     ecrt_master_sync_io(master);
   115     ecrt_master_sync_io(master);
   113     ecrt_domain_process(domain1);
   116     ecrt_domain_process(domain1);
   114     ecrt_domain_process(domain2);
   117     ecrt_domain_process(domain2);
   115 
   118 
   116     // Prozessdaten verarbeiten
   119     // Prozessdaten verarbeiten
   117     k_pos = EC_READ_U32(r_ssi);
   120     k_ssi_pos = EC_READ_U32(r_ssi);
       
   121     k_ssi_status = EC_READ_U32(r_ssi_st);
   118 #endif
   122 #endif
   119 
   123 
   120     k_postio = (uint32_t) (get_cycles() - offset) * 1e6 / cpu_khz;
   124     k_postio = (uint32_t) (get_cycles() - offset) * 1e6 / cpu_khz;
   121 
   125 
   122     //ecrt_master_debug(master, 0);
   126     //ecrt_master_debug(master, 0);
   125 
   129 
   126 /*****************************************************************************/
   130 /*****************************************************************************/
   127 
   131 
   128 int msr_globals_register(void)
   132 int msr_globals_register(void)
   129 {
   133 {
   130     msr_reg_kanal("/angle0", "", &k_angle, TUINT);
   134     msr_reg_kanal("/angle0",        "", &k_angle,      TUINT);
   131     msr_reg_kanal("/pos0",   "", &k_pos,   TUINT);
   135     msr_reg_kanal("/pos0",          "", &k_ssi_pos,    TUINT);
       
   136     msr_reg_kanal("/ssi-status0",   "", &k_ssi_status, TUINT);
   132 
   137 
   133     msr_reg_kanal("/Timing/Pre-IO",   "ns", &k_preio,    TUINT);
   138     msr_reg_kanal("/Timing/Pre-IO",   "ns", &k_preio,    TUINT);
   134     msr_reg_kanal("/Timing/Post-IO",  "ns", &k_postio,   TUINT);
   139     msr_reg_kanal("/Timing/Post-IO",  "ns", &k_postio,   TUINT);
   135     msr_reg_kanal("/Timing/Finished", "ns", &k_finished, TUINT);
   140     msr_reg_kanal("/Timing/Finished", "ns", &k_finished, TUINT);
   136 
   141 
   181     if ((master = ecrt_request_master(0)) == NULL) {
   186     if ((master = ecrt_request_master(0)) == NULL) {
   182         printk(KERN_ERR "Error requesting master 0!\n");
   187         printk(KERN_ERR "Error requesting master 0!\n");
   183         goto out_msr_cleanup;
   188         goto out_msr_cleanup;
   184     }
   189     }
   185 
   190 
   186     //ecrt_master_print(master);
   191     ecrt_master_print(master);
   187 
   192 
   188     printk(KERN_INFO "Registering domains...\n");
   193     printk(KERN_INFO "Registering domains...\n");
   189 
   194 
   190     if (!(domain1 = ecrt_master_create_domain(master))) {
   195     if (!(domain1 = ecrt_master_create_domain(master))) {
   191         printk(KERN_ERR "EtherCAT: Could not register domain!\n");
   196         printk(KERN_ERR "Could not register domain!\n");
   192         goto out_release_master;
   197         goto out_release_master;
   193     }
   198     }
   194 
   199 
   195     if (!(domain2 = ecrt_master_create_domain(master))) {
   200     if (!(domain2 = ecrt_master_create_domain(master))) {
   196         printk(KERN_ERR "EtherCAT: Could not register domain!\n");
   201         printk(KERN_ERR "Could not register domain!\n");
   197         goto out_release_master;
   202         goto out_release_master;
   198     }
   203     }
   199 
   204 
   200     printk(KERN_INFO "Registering domain fields...\n");
   205     printk(KERN_INFO "Registering domain fields...\n");
   201 
   206 
   218         goto out_release_master;
   223         goto out_release_master;
   219     }
   224     }
   220 
   225 
   221     //ecrt_master_debug(master, 0);
   226     //ecrt_master_debug(master, 0);
   222 
   227 
   223 #if 1
   228 #if 0
   224     if (ecrt_master_sdo_read(master, "6", 0x100A, 1, &version)) {
   229     if (ecrt_master_sdo_read(master, "1", 0x100A, 1, &version)) {
   225         printk(KERN_ERR "Could not read SSI version!\n");
   230         printk(KERN_ERR "Could not read SSI version!\n");
   226         goto out_release_master;
   231         goto out_deactivate;
   227     }
   232     }
   228     printk(KERN_INFO "Software-version: %u\n", version);
   233     printk(KERN_INFO "Software-version: %u\n", version);
       
   234 #endif
       
   235 
       
   236 #if 0
       
   237     if (ecrt_master_sdo_write(master, "1", 0x4061, 1,  0, 1) ||
       
   238         ecrt_master_sdo_write(master, "1", 0x4061, 2,  1, 1) ||
       
   239         ecrt_master_sdo_write(master, "1", 0x4061, 3,  1, 1) ||
       
   240         ecrt_master_sdo_write(master, "1", 0x4066, 0,  0, 1) ||
       
   241         ecrt_master_sdo_write(master, "1", 0x4067, 0,  4, 1) ||
       
   242         ecrt_master_sdo_write(master, "1", 0x4068, 0,  0, 1) ||
       
   243         ecrt_master_sdo_write(master, "1", 0x4069, 0, 25, 1) ||
       
   244         ecrt_master_sdo_write(master, "1", 0x406A, 0, 25, 1) ||
       
   245         ecrt_master_sdo_write(master, "1", 0x406B, 0, 50, 1)) {
       
   246         printk(KERN_ERR "Failed to configure SSI slave!\n");
       
   247         goto out_deactivate;
       
   248     }
   229 #endif
   249 #endif
   230 
   250 
   231 #ifdef ASYNC
   251 #ifdef ASYNC
   232     // Einmal senden und warten...
   252     // Einmal senden und warten...
   233     ecrt_master_prepare_async_io(master);
   253     ecrt_master_prepare_async_io(master);
   239     attr.entry = &domain_entry;
   259     attr.entry = &domain_entry;
   240     ipipe_register_domain(&this_domain, &attr);
   260     ipipe_register_domain(&this_domain, &attr);
   241 
   261 
   242     return 0;
   262     return 0;
   243 
   263 
       
   264  out_deactivate:
       
   265     ecrt_master_deactivate(master);
   244  out_release_master:
   266  out_release_master:
   245     ecrt_release_master(master);
   267     ecrt_release_master(master);
   246 
       
   247  out_msr_cleanup:
   268  out_msr_cleanup:
   248     msr_rtlib_cleanup();
   269     msr_rtlib_cleanup();
   249 
       
   250  out_return:
   270  out_return:
   251     return -1;
   271     return -1;
   252 }
   272 }
   253 
   273 
   254 /*****************************************************************************/
   274 /*****************************************************************************/