Timer16 Использование прерываний

Материал из MIK32 микроконтроллер

Особенность установки флагов прерываний

Флаг прерывания по сравнению выставляется, если значение счета таймера совпадает со значением сравнения. Из-за этого возможна ситуация, когда после сброса флага прерывания по сравнению внутри обработчика флаг снова выставляется на следующем такте, если счетчик таймера не успел увеличиться. В таком случае, после выхода из обработчика прерывания происходит повторное срабатывание.

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

Развернуть код
Timer16 Многократные срабатывания прерываний.png

На временной диаграмме видны многократные срабатывания прерывания по сравнению:

Один из возможных вариантов исправления: временное отключение прерывания по сравнению на время до смены значения счетчика в другой части программы, например, в основном цикле, как в примере ниже:

Развернуть код
Timer16 Однократные срабатывания прерываний.png

На временной диаграмме видны однократные срабатывания каждого из прерываний: