Найти в Дзене
Будни инженера

Регистры-маски AVR

В программировании “маска” означает не совсем то, что в мире людей. Маска - это некий шаблон, который маскирует (скрывает) ненужные элементы и позволяет видеть (или включать) нужные.
В программировании “маска” означает не совсем то, что в мире людей. Маска - это некий шаблон, который маскирует (скрывает) ненужные элементы и позволяет видеть (или включать) нужные.

Регистр маски - это обычный регистр ввода-вывода, который служит для управления отдельными источниками прерываний. Каждому разряду в таком регистре соответствует один источник прерывания. Если бит сброшен в ноль, то прерывание этого вида запрещено. Если бит установлен в единицу, то соответствующее прерывание разрешено. Это справедливо для микроконтроллеров AVR. Для других устройств это может быть по-другому.

В микроконтроллерах AVR применяются два регистра-маски:

  • GIMSK. Этот регистр управляет всеми видами прерываний, кроме прерываний от таймеров. В некоторых микроконтроллерах этот регистр называется GISR.
  • TIMSK. Этот регистр управляет прерываниями от таймеров.

Количество прерываний зависит от конкретного микроконтроллера (МК). Например, для самого простого ATtiny13A состав прерываний будет таким:

  • GIMSK:
  • Бит 5 - PCIE - изменение состояния вывода (ножки) МК
  • Бит 6 - INT0 - внешнее прерывание
  • TIMSK0:
  • Бит 1 - TOIE0 - переполнение таймера-счётчика
  • Бит 2 - OCIE0A - таймер-счётчик А
  • Бит 3 - OCIE0B - таймер-счётчик В

Остальные биты не задействованы для этой модели.

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

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

Микроконтроллеры AVR имеют два регистра флагов:

  • GIFR - обслуживает те же прерывания, что и регистр маски GIMSK.
  • TIFR - обслуживает те же прерывания, что и регистр маски TIMSK.

Биты прерываний в регистре флагов также соответствуют битам в регистрах маски. Например, если в регистре GIMSK бит 6 установлен в 1, то внешнее прерывание разрешено. И если в регистре флагов GIFR бит 6 установится в единицу, то это означает, что произошло внешнее прерывание INT0.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить…