От тактовой частоты PRU.
TI заявляет, что все команды выполняются за 1 такт (работа с памятью дольше, но тоже, якобы, гарантирована длительность).
В процессоре есть регистр -- счётчик выполненных команд. По сути, он и отражает текущее время в виде "количества выполненных тактов".
Если этот регистр врёт, то, конечно, беда-печаль.
Логика моей PRU программы следующая:
1) Вычисляем "какая должна быть длина импульса" <-- это вычисление может занимать разное время, но оно всегда быстрее, чем нужная длина импульса
2) Ждём пока счётчик выполненных команд накрутится до нужного значения <-- в этом же ожидании происходит обмен host-pru-host
3) Обнуляем счётчик выполненных команд (он, собака, перестаёт работать секунд через 20-30 при достижении FFffFFff, поэтому приходится постоянно обнулять)
4) Пишем выход
В итоге, запись выходов происходит в ровно запланированное время.
Тов. Филоненко, конечно, пишет противоположное, но, полагаю, он либо не читал код моей программы, либо читал невнимательно.
Спецификация TI на длительность работы команд памяти немного мутная, поэтому возможны погрешности на 2-4 такта, но это всё ерунда (+-0.03 мкс), и эти погрешности плавать не будут. Да и сами команды работы с памятью редко используются -- в основном мы "сверяемся со счётчиком команд", а он, надеюсь, показывает правду.
И спецификация умалчивает что будет, если обнулить счётчик выполненных команд (учтёт ли он команду обнуления -- фиг знает). Там говорится, что перед обнулением его нужно выключать, но это муторно, и, судя по опытам, работает и без "отключения".
Я показывал насколько стабильна частота импульсов на выходе: http://www.owen.ru/forum/showthread....l=1#post219960
По программной части -- частота абсолютно стабильная и полностью предсказуемая.
Надо фронт каждые 200 тактов --- будет каждые 200 тактов.
Плавает ли аппаратная частота (например, вместо кварца неонка какая-нибудь) -- тут без понятия.
Про "неконцептуальность и запретность ОВЕНом" смены "цикла PRU по ходу работы" процитирую классику:





Ответить с цитированием