diff -r fad6709a526f -r d6679c77ad3f master/master.c --- a/master/master.c Fri Mar 17 15:18:13 2006 +0000 +++ b/master/master.c Fri Mar 17 16:25:02 2006 +0000 @@ -100,6 +100,7 @@ master->command_index = 0; master->debug_level = 0; + master->timeout = 100; // us master->stats.timeouts = 0; master->stats.delayed = 0; master->stats.corrupted = 0; @@ -857,7 +858,7 @@ ec_master_send_commands(master); t_start = get_cycles(); // Sendezeit nehmen - t_timeout = 100 * cpu_khz / 1000; // 100us + t_timeout = master->timeout * cpu_khz / 1000; do { ec_device_call_isr(master->device); @@ -960,6 +961,37 @@ /*****************************************************************************/ /** + Bereitet Synchronen Datenverkehr vor. + + Fürgt einmal die Kommandos aller Domains zur Warteschlange hinzu, sendet + diese ab und wartet so lange, bis diese anschließend problemlos empfangen + werden können. +*/ + +void ecrt_master_prepare_async_io(ec_master_t *master) +{ + ec_domain_t *domain; + cycles_t t_start, t_end, t_timeout; + + // Alle empfangenen Kommandos aus der Liste entfernen + list_for_each_entry(domain, &master->domains, list) + ecrt_domain_queue(domain); + + ecrt_master_async_send(master); + + t_start = get_cycles(); // Sendezeit nehmen + t_timeout = master->timeout * cpu_khz / 1000; + + // Aktiv warten! + do { + t_end = get_cycles(); + } + while (t_end - t_start < t_timeout); +} + +/*****************************************************************************/ + +/** Setzt die Debug-Ebene des Masters. Folgende Debug-Level sind definiert: