Re[30]: Эльбрус - 8 ядер
От: Иван Дубров США  
Дата: 08.06.17 02:10
Оценка:
Здравствуйте, vdimas, Вы писали:

V>>>В любом случае, для сценари использования таймера "выдай мне прерывание через столько-то времени" (а там именно такой сценарий) — это будет накопление ошибки, бо обычно у тебя нет никакой информации о том, сколько действительно времени потребовалось на реакцию на таймер. А когда таймеров более одного, ты находишься в обработке прерывания одного из них, прерывания от других запрещены... Дальше продолжать или уже догадался?


У STM32 можно настроить таймер так, чтобы прерывание только патроны подносило (через теневые регистры). Никакой ошибки, всё аппаратно. Я так в своём коде делаю. Потому и спрашивал, что не так с таймерами. Всё гарантировано по времени.

С циклом мне непонятно, а что с другими прерываниями-то делать? Как раз с прерыванием я бы делал как-то так: один таймер на все шаговики, самый высокий приоритет (чтобы оно гарантированно перебивало все другие прерывания). Запрет прерываний запрещён, только через BASEPRI и без запрета этого самого прерывания от таймера. В таком варианте, время реакции, по идее, будет всегда одно и то же.

Непонятно только, как очень близкие шаги по разным выходам делать (выдали 1 по одному выводу и через 1 такт -- по другому). Можно, наверное, немного смещать шаги, с учётом макрошагов, по идее, ошибка будет маленькая.

Может быть, можно через DMA как-то (чё-нить типа копировать из памяти в регистр GPIO по таймеру и в теневые регистры таймера по этому же таймеру).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.