equal
deleted
inserted
replaced
98 kfree(domain); |
98 kfree(domain); |
99 } |
99 } |
100 |
100 |
101 master->command_index = 0; |
101 master->command_index = 0; |
102 master->debug_level = 0; |
102 master->debug_level = 0; |
|
103 master->timeout = 100; // us |
103 master->stats.timeouts = 0; |
104 master->stats.timeouts = 0; |
104 master->stats.delayed = 0; |
105 master->stats.delayed = 0; |
105 master->stats.corrupted = 0; |
106 master->stats.corrupted = 0; |
106 master->stats.unmatched = 0; |
107 master->stats.unmatched = 0; |
107 master->stats.t_last = 0; |
108 master->stats.t_last = 0; |
855 |
856 |
856 // Rahmen senden |
857 // Rahmen senden |
857 ec_master_send_commands(master); |
858 ec_master_send_commands(master); |
858 |
859 |
859 t_start = get_cycles(); // Sendezeit nehmen |
860 t_start = get_cycles(); // Sendezeit nehmen |
860 t_timeout = 100 * cpu_khz / 1000; // 100us |
861 t_timeout = master->timeout * cpu_khz / 1000; |
861 |
862 |
862 do { |
863 do { |
863 ec_device_call_isr(master->device); |
864 ec_device_call_isr(master->device); |
864 |
865 |
865 t_end = get_cycles(); // Aktuelle Zeit nehmen |
866 t_end = get_cycles(); // Aktuelle Zeit nehmen |
958 } |
959 } |
959 |
960 |
960 /*****************************************************************************/ |
961 /*****************************************************************************/ |
961 |
962 |
962 /** |
963 /** |
|
964 Bereitet Synchronen Datenverkehr vor. |
|
965 |
|
966 Fürgt einmal die Kommandos aller Domains zur Warteschlange hinzu, sendet |
|
967 diese ab und wartet so lange, bis diese anschließend problemlos empfangen |
|
968 werden können. |
|
969 */ |
|
970 |
|
971 void ecrt_master_prepare_async_io(ec_master_t *master) |
|
972 { |
|
973 ec_domain_t *domain; |
|
974 cycles_t t_start, t_end, t_timeout; |
|
975 |
|
976 // Alle empfangenen Kommandos aus der Liste entfernen |
|
977 list_for_each_entry(domain, &master->domains, list) |
|
978 ecrt_domain_queue(domain); |
|
979 |
|
980 ecrt_master_async_send(master); |
|
981 |
|
982 t_start = get_cycles(); // Sendezeit nehmen |
|
983 t_timeout = master->timeout * cpu_khz / 1000; |
|
984 |
|
985 // Aktiv warten! |
|
986 do { |
|
987 t_end = get_cycles(); |
|
988 } |
|
989 while (t_end - t_start < t_timeout); |
|
990 } |
|
991 |
|
992 /*****************************************************************************/ |
|
993 |
|
994 /** |
963 Setzt die Debug-Ebene des Masters. |
995 Setzt die Debug-Ebene des Masters. |
964 |
996 |
965 Folgende Debug-Level sind definiert: |
997 Folgende Debug-Level sind definiert: |
966 |
998 |
967 - 1: Nur Positionsmarken in bestimmten Funktionen |
999 - 1: Nur Positionsmarken in bestimmten Funktionen |