Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

96 Микроконтроллеры AVR от азов программирования... Это полезно запомнить. Регистр маски — это обычный регистр ввода-вывода, служащий для управления отдельными источниками прерываний. Каждому биту в регистре маски соответствует один источник. Если бит сброшен в ноль, прерывание этого вида запрещено. Если бит установлен в еди ­ ничное состояние, прерывание разрешено. В микроконтроллерах AVR применяются два регистра маски. Регистр GIMSK управляет всеми видами прерываний, кроме прерываний от тай ­ меров. В некоторых микроконтроллерах семейства «Mega» этот регистр называется GICR. Для управления прерываниями от таймеров имеется специальный регистр TIMSK. Кроме регистров маски для управления процессом выполнения преры ­ ваний существуют еще два регистра. Это регистры флагов прерываний. Каждый бит такого регистра — это флаг одного из видов прерываний. При поступлении запроса на прерывание флаг устанавливается в единицу. По состоянию флага программа может судить о наличии запроса. В определенных режимах после установки флага процедура обработки прерывания вызывается автоматически. Сразу после вызова процедуры соответствующий флаг сбрасывается. Микроконтроллеры AVR имеют два регистра флагов: регистр GIFR (обслуживает те же прерывания, что и регистр GIMSK) и регистр TIFR (флаги прерываний от таймеров). Алгоритм работы системы прерываний Общий алгоритм работы системы прерываний следующий. После сброса микроконтроллера все прерывания запрещены (флаги разре ­ шения сброшены). Если программист планирует использовать один из видов прерываний, он должен предусмотреть в своей программе вклю ­ чение этого прерывания. Для включения прерывания программа должна установить флаг I регистра SREG в единицу и записать в регистры маски такой код, кото ­ рый разрешит лишь нужные в данный момент прерывания. Разрешив, таким образом, прерывания, программа приступает к выполнению своей главной задачи. При поступлении запроса на прерывание устанавливается флаг соот ­ ветствующего прерывания. Флаг устанавливается даже в том случае, если прерывание запрещено. Если прерывание разрешено, то микроконтрол ­ лер приступает к его выполнению. Текущая программа временно при ­ останавливается, и управление передается на адрес соответствующего вектора прерывания. В тот же момент флаг I автоматически сбрасывается, запрещая обра ­ ботку других прерываний. Флаг, соответствующий вызванному преры ­

RkJQdWJsaXNoZXIy MTExODQxMg==