master/master.c
changeset 1031 000593b576dd
parent 1029 61ffe5f22306
child 1040 d2527675cdd5
equal deleted inserted replaced
1030:d7970e934dba 1031:000593b576dd
   816 
   816 
   817     while (!signal_pending(current)) {
   817     while (!signal_pending(current)) {
   818         cycles_start = get_cycles();
   818         cycles_start = get_cycles();
   819         ec_datagram_output_stats(&master->fsm_datagram);
   819         ec_datagram_output_stats(&master->fsm_datagram);
   820 
   820 
   821         if (ec_fsm_master_running(&master->fsm)) { // datagram on the way
   821         // receive
   822             // receive
   822         spin_lock_bh(&master->internal_lock);
   823             spin_lock_bh(&master->internal_lock);
   823         ecrt_master_receive(master);
   824             ecrt_master_receive(master);
   824         spin_unlock_bh(&master->internal_lock);
   825             spin_unlock_bh(&master->internal_lock);
   825 
   826 
   826         if (master->fsm_datagram.state == EC_DATAGRAM_SENT)
   827             if (master->fsm_datagram.state == EC_DATAGRAM_SENT)
   827             goto schedule;
   828                 goto schedule;
       
   829         }
       
   830 
   828 
   831         // execute master state machine
   829         // execute master state machine
   832         if (ec_fsm_master_exec(&master->fsm)) { // datagram ready for sending
   830         ec_fsm_master_exec(&master->fsm);
   833             // queue and send
   831 
   834             spin_lock_bh(&master->internal_lock);
   832         // queue and send
   835             ec_master_queue_datagram(master, &master->fsm_datagram);
   833         spin_lock_bh(&master->internal_lock);
   836             ecrt_master_send(master);
   834         ec_master_queue_datagram(master, &master->fsm_datagram);
   837             spin_unlock_bh(&master->internal_lock);
   835         ecrt_master_send(master);
   838         }
   836         spin_unlock_bh(&master->internal_lock);
   839         
   837         
   840         cycles_end = get_cycles();
   838         cycles_end = get_cycles();
   841         master->idle_cycle_times[master->idle_cycle_time_pos]
   839         master->idle_cycle_times[master->idle_cycle_time_pos]
   842             = (u32) (cycles_end - cycles_start) * 1000 / cpu_khz;
   840             = (u32) (cycles_end - cycles_start) * 1000 / cpu_khz;
   843         master->idle_cycle_time_pos++;
   841         master->idle_cycle_time_pos++;
   881 
   879 
   882         // output statistics
   880         // output statistics
   883         ec_master_output_stats(master);
   881         ec_master_output_stats(master);
   884 
   882 
   885         // execute master state machine
   883         // execute master state machine
   886         if (ec_fsm_master_exec(&master->fsm)) {
   884         ec_fsm_master_exec(&master->fsm);
   887             // inject datagram
   885 
   888             master->injection_seq_fsm++;
   886         // inject datagram
   889         }
   887         master->injection_seq_fsm++;
   890 
   888 
   891         cycles_end = get_cycles();
   889         cycles_end = get_cycles();
   892         master->idle_cycle_times[master->idle_cycle_time_pos]
   890         master->idle_cycle_times[master->idle_cycle_time_pos]
   893             = (u32) (cycles_end - cycles_start) * 1000 / cpu_khz;
   891             = (u32) (cycles_end - cycles_start) * 1000 / cpu_khz;
   894         master->idle_cycle_time_pos++;
   892         master->idle_cycle_time_pos++;