Сообщение от
Вольд
Если цикл 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* будет новый обмен.