Появилась минутка, сделал блок на ST.
Получается, для генерации следующей пачки импульсов нужно передёрнуть вход enable (сделать enable==false, дождаться пока ready перейдёт в false, потом передать enable=true и тогда пойдёт вторая пачка). Это то, что ожидалось?
По поводу изменения частоты импульсов: текущий подход к программированию PRU предполагает, что PRU выполняется своим циклом, поэтому тут я сделал "переключение сигнала out при каждом цикле PRU". Норм? Или делитель какой-то нужен?
Или с такой стороны: нормально ли, если для изменения частоты меандра нужно перезаливать PRU программу?
Нужны ли меандры разной частоты по разным выходам?
Код:
FUNCTION_BLOCK PRU_GENER_BURST
VAR_INPUT
enable : BOOL;
quantity : WORD;
END_VAR
VAR_OUTPUT
out : BOOL;
ready : BOOL;
END_VAR
VAR
qtyLeft : WORD;
END_VAR
IF enable THEN
IF qtyLeft > 0 THEN
(* Идёт генерация *)
qtyLeft := qtyLeft - 1;
ELSIF ready THEN
(* Всё сгенерировали, ждём пока передёрнут enable для следующего включения *)
ELSE
(* Поступила команда на включение *)
qtyLeft := quantity * 2;
END_IF;
ELSE
(* Выключаемся *)
qtyLeft := 0;
END_IF;
ready := qtyLeft = 0;
(* Если всё сделали, то out выключится. Если пачка ещё генерируется, то младший бит и есть меандр *)
out := qtyLeft.0;
END_FUNCTION_BLOCK