mini/mini.c
changeset 62 0fb2a690f4d0
parent 61 cd014255f94f
child 64 ea6ccf12c612
equal deleted inserted replaced
61:cd014255f94f 62:0fb2a690f4d0
    18 /*****************************************************************************/
    18 /*****************************************************************************/
    19 
    19 
    20 ec_master_t *master = NULL;
    20 ec_master_t *master = NULL;
    21 ec_slave_t *s_in, *s_out;
    21 ec_slave_t *s_in, *s_out;
    22 
    22 
    23 int value;
       
    24 int dig1;
       
    25 
       
    26 struct timer_list timer;
    23 struct timer_list timer;
    27 unsigned long last_start_jiffies;
       
    28 
    24 
    29 ec_slave_init_t slaves[] = {
    25 ec_slave_init_t slaves[] = {
    30     // Zeiger, Index, Herstellername, Produktname, Domäne
    26     // Zeiger, Index, Herstellername, Produktname, Domäne
    31     {  &s_out, 9,     "Beckhoff",     "EL2004",    1      },
    27     {  &s_out, 9,     "Beckhoff",     "EL2004",    1      },
    32     {  &s_in,  1,     "Beckhoff",     "EL3102",    1      }
    28     {  &s_in,  1,     "Beckhoff",     "EL3102",    1      }
    36 
    32 
    37 /*****************************************************************************/
    33 /*****************************************************************************/
    38 
    34 
    39 void run(unsigned long data)
    35 void run(unsigned long data)
    40 {
    36 {
    41     static int ms = 0;
    37     // Klemmen-IO
    42     static unsigned long int k = 0;
       
    43     static int firstrun = 1;
       
    44 
       
    45     ms++;
       
    46     ms %= 1000;
       
    47 
       
    48     EC_WRITE_EL20XX(s_out, 3, EC_READ_EL31XX(s_in, 0) < 0);
    38     EC_WRITE_EL20XX(s_out, 3, EC_READ_EL31XX(s_in, 0) < 0);
    49 
    39 
    50     // Prozessdaten lesen und schreiben
    40     // Prozessdaten lesen und schreiben
    51     rdtscl(k);
       
    52     EtherCAT_rt_domain_xio(master, 1, 100);
    41     EtherCAT_rt_domain_xio(master, 1, 100);
    53     firstrun = 0;
       
    54 
    42 
       
    43     // Timer neu starten
    55     timer.expires += HZ / 1000;
    44     timer.expires += HZ / 1000;
    56     add_timer(&timer);
    45     add_timer(&timer);
    57 }
    46 }
    58 
    47 
    59 /*****************************************************************************/
    48 /*****************************************************************************/
    64 
    53 
    65     if ((master = EtherCAT_rt_request_master(0)) == NULL) {
    54     if ((master = EtherCAT_rt_request_master(0)) == NULL) {
    66         printk(KERN_ERR "EtherCAT master 0 not available!\n");
    55         printk(KERN_ERR "EtherCAT master 0 not available!\n");
    67         goto out_return;
    56         goto out_return;
    68     }
    57     }
    69 
       
    70     //EtherCAT_rt_debug_level(master, 2);
       
    71 
    58 
    72     if (EtherCAT_rt_register_slave_list(master, slaves, SLAVE_COUNT)) {
    59     if (EtherCAT_rt_register_slave_list(master, slaves, SLAVE_COUNT)) {
    73         printk(KERN_ERR "Could not register slaves!\n");
    60         printk(KERN_ERR "Could not register slaves!\n");
    74         goto out_release_master;
    61         goto out_release_master;
    75     }
    62     }
    84     printk("Starting cyclic sample thread.\n");
    71     printk("Starting cyclic sample thread.\n");
    85 
    72 
    86     init_timer(&timer);
    73     init_timer(&timer);
    87 
    74 
    88     timer.function = run;
    75     timer.function = run;
    89     timer.data = 0;
       
    90     timer.expires = jiffies + 10; // Das erste Mal sofort feuern
    76     timer.expires = jiffies + 10; // Das erste Mal sofort feuern
    91     last_start_jiffies = timer.expires;
       
    92     add_timer(&timer);
    77     add_timer(&timer);
    93 
       
    94     printk("Initialised sample thread.\n");
       
    95 
    78 
    96     printk(KERN_INFO "=== Minimal EtherCAT environment started. ===\n");
    79     printk(KERN_INFO "=== Minimal EtherCAT environment started. ===\n");
    97 
    80 
    98     return 0;
    81     return 0;
    99 
    82