Контакт захвата входа Atmel ATmega328P
У меня есть код, который использует значение таймера захвата ввода.
Я предполагаю, что на значение таймера (определенное прескалером и т. д.) не влияет другой выполняемый код, т.е. оно обновляется каждый n-й такт независимо от того, какая инструкция следующая?
Если вам нужен код или более подробная информация, спросите в комментариях, и я опубликую код.
@Paul Sullivan, 👍1
2 ответа
Лучший ответ:
Обычно работа IC полностью независима от процессора и выполняемых инструкций.
Таймер свободно работает между начальным и конечным событиями захвата ввода. В момент захвата значение таймера замораживается в другом регистре. Затем запускается прерывание. Затем вы считываете это замороженное значение. Неважно, через какое время после конечного события выполняется прерывание или что вы делаете в этом прерывании, захваченное время остается прежним.
Я предполагаю, что значение таймера (определенное предварительным делителем и т. д.) не зависит от другого работающего кода, т. е. оно обновляется каждые n-ные такты независимо от того, какая инструкция следует дальше?
да, если только ваш код не записывает данные в соответствующие регистры.
Нет ли более приоритетных прерываний? Они бы наверняка повлияли на регистр таймера, @cyberponk
@cyberponk Нет, регистрация времени захвата ввода работает через выделенное оборудование, независимо от того, что делает ЦП., @JimmyB
- Является ли плохой практикой многозадачность без ограничений по времени
- Включить реле на некоторое время непрерывным входом
- Использование millis() и micros() внутри процедуры прерывания
- Как сделать очень долгую функцию delay(), несколько часов
- Разница между «time_t» и «DateTime»
- Получение BPM из данного кода
- Чтение из Serial
- Как считать время в секундах?
Привет @Majenko - спасибо за ответ. Но быстрый. Что произойдет, если во время прерывания прерывание снова сработает быстрее, чем код может выполниться, т.е. все еще будет реагировать на прерывание, когда прерывание сработает снова? Я предполагаю, что оно перезаписывается, и мы имеем потерю данных?, @Paul Sullivan
Прерывание не может сработать, пока оно в данный момент срабатывает. Процессор отключает прерывания, когда он входит в прерывание, и включает их после этого. Любые события, которые происходят во время работы прерывания, будут игнорироваться., @Majenko