Цитата Сообщение от Вольд Посмотреть сообщение
Если цикл PRU 1 мкс, то 2...3 мкс ?
Да.

Цитата Сообщение от Вольд Посмотреть сообщение
А обмен между ЦП и PRU постоянно идет ? Когда начинается и когда заканчивается обмен между ЦП и PRU ? Или как прошло это
PRU программа выполняет следующее:
Код:
t0 := засекаем_время();
WHITE TRUE
    USER_PROGRAM(); (* вызываем программу, указанную в pru configuration *)

    REPEAT
        обрабатываем_обмен_данными_с_host();
        читаем_входы();
    UNTIL время < t0 + мин_ц
    END_REPEAT;

    t0 := засекаем_время();
    записываем_выходы();
    читаем_входы();
END_WHILE;
Иначе говоря, большую часть времени PRU ядро ждёт от КДС программы команд на чтение-запись PRU данных.
Но эти данные PRU программа сможет использовать только на следующем PRU цикле.

Возвращаясь к исходному вопросу "когда можно перезапускать stepper". После перевода enable в false нужно выполнять memoryread и ждать когда блок сменит состояние. В целом, за одну-две микросекунды это может и случиться, т.е. можно это выполнять и в рамках одного цикла ПЛК (while stepper.state<>... memory read ...).



Цитата Сообщение от Вольд Посмотреть сообщение
SteppersConfig_Pru0Init();
SteppersConfig_Pru1Init();


так и пошел обмен ?
Нет. После Init запускается только "ответная" сторона в PRU. Сами данные идут только по управлению КДС программы.

Чтобы данные реально ходили нужно вызывать MemoryTransfer или MemoryRead или MemoryWrite.
При каждом вызове Memory* будет новый обмен.