Контакт захвата входа Atmel ATmega328P

timers input

У меня есть код, который использует значение таймера захвата ввода.

Я предполагаю, что на значение таймера (определенное прескалером и т. д.) не влияет другой выполняемый код, т.е. оно обновляется каждый n-й такт независимо от того, какая инструкция следующая?

Если вам нужен код или более подробная информация, спросите в комментариях, и я опубликую код.

, 👍1


2 ответа


Лучший ответ:

1

Обычно работа IC полностью независима от процессора и выполняемых инструкций.

Таймер свободно работает между начальным и конечным событиями захвата ввода. В момент захвата значение таймера замораживается в другом регистре. Затем запускается прерывание. Затем вы считываете это замороженное значение. Неважно, через какое время после конечного события выполняется прерывание или что вы делаете в этом прерывании, захваченное время остается прежним.

,

Привет @Majenko - спасибо за ответ. Но быстрый. Что произойдет, если во время прерывания прерывание снова сработает быстрее, чем код может выполниться, т.е. все еще будет реагировать на прерывание, когда прерывание сработает снова? Я предполагаю, что оно перезаписывается, и мы имеем потерю данных?, @Paul Sullivan

Прерывание не может сработать, пока оно в данный момент срабатывает. Процессор отключает прерывания, когда он входит в прерывание, и включает их после этого. Любые события, которые происходят во время работы прерывания, будут игнорироваться., @Majenko


0

Я предполагаю, что значение таймера (определенное предварительным делителем и т. д.) не зависит от другого работающего кода, т. е. оно обновляется каждые n-ные такты независимо от того, какая инструкция следует дальше?

да, если только ваш код не записывает данные в соответствующие регистры.

,

Нет ли более приоритетных прерываний? Они бы наверняка повлияли на регистр таймера, @cyberponk

@cyberponk Нет, регистрация времени захвата ввода работает через выделенное оборудование, независимо от того, что делает ЦП., @JimmyB