Мегаобучалка Главная | О нас | Обратная связь


Управление системой прерываний



2016-09-17 353 Обсуждений (0)
Управление системой прерываний 0.00 из 5.00 0 оценок




Тема 23. Система прерываний.

Назначение системы прерываний

Важным элементом микроконтроллера является система прерываний. Система прерываний присутствует в любом современном микроконтрол­лере. Она также есть во всех микроконтроллерах AVR. Как уже говори­лось, система прерываний микроконтроллера обслуживает несколько источников прерываний. Количество источников прерываний для раз­ных микроконтроллеров различно.

Самое минимальное количество источников прерывания имеет микроконтроллер ATtiny11. Два внутренних источника прерываний (от таймера/счетчика и от встроенного компаратора), одно внешнее преры­вание по сигналу на входе INT0 и одно прерывание по изменению сигна­лов на любом из входов, которое тоже считается внутренним.

К источникам прерываний фирма Atmel относит также начальный сброс микроконтроллера. Вектор начального сброса обычно также вклю­чают в таблицу векторов прерываний. Так что получается, что у микро­контроллера ATtiny 11 имеется четыре внутренних источника прерыва­ний и один внешний. Другие микросхемы серии AVR имеют более слож­ные системы прерываний.

Самая развитая на сегодняшний день система прерываний — у микро­контроллера ATmegal281. Этот микроконтроллер способен в общей сложности обслуживать 48 внутренних и 17 внешних источников пре­рываний. Вообще, источниками прерываний служат все встроенные таймеры, компараторы, АЦП, любой последовательный канал, система управления EEPROM. Конкретное количество прерываний можно узнать из табл. 3.1 (графа «Кол-во прерываний Внут / Внешн»).

Управление системой прерываний

Управление системой прерываний осуществляется при помощи специальных регистров ввода-вывода. Определяющим регистром здесь является регистр SREG (регистр состояния системы). Этот регистр пред­назначен для хранения флагов состояния. Каждый бит регистра — это один из флагов. Седьмой бит регистра состояния называется «флаг I». Это флаг глобального разрешения прерываний. Когда значение этого флага равно нулю, все прерывания в микроконтроллере запрещены.

Для разрешения прерываний нужно установить этот флаг в единицу. Однако чаще всего нам не нужны все виды прерываний одновременно. Для того, чтобы запретить одни прерывания и разрешить другие, приме­няются так называемые маскирующие регистры (регистры маски).

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

В микроконтроллерах AVR применяются два регистра маски. Регистр GIMSK управляет всеми видами прерываний, кроме прерываний от тай­меров. В некоторых микроконтроллерах семейства «Mega» этот регистр называется GICR. Для управления прерываниями от таймеров имеется специальный регистр TIMSK.

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

В определенных режимах после установки флага процедура обработки прерывания вызывается автоматически. Сразу после вызова процедуры соответствующий флаг сбрасывается. Микроконтроллеры AVR имеют два регистра флагов: регистр GIFR (обслуживает те же прерывания, что и регистр GIMSK) и регистр TIFR (флаги прерываний от таймеров).

Алгоритм работы системы прерываний.

Общий алгоритм работы системы прерываний следующий. После сброса микроконтроллера все прерывания запрещены (флаги разре­шения сброшены). Если программист планирует использовать один из видов прерываний, он должен предусмотреть в своей программе вклю­чение этого прерывания.

Для включения прерывания программа должна установить флаг I регистра SREG в единицу и записать в регистры маски такой код, кото­рый разрешит лишь нужные в данный момент прерывания. Разрешив, таким образом, прерывания, программа приступает к выполнению своей главной задачи.

При поступлении запроса на прерывание устанавливается флаг соот­ветствующего прерывания. Флаг устанавливается даже в том случае, если прерывание запрещено. Если прерывание разрешено, то микроконтрол­лер приступает к его выполнению. Текущая программа временно при­останавливается, и управление передается на адрес соответствующего вектора прерывания.

В тот же момент флаг I автоматически сбрасывается, запрещая обра­ботку других прерываний. Флаг, соответствующий вызванному прерыванию, также сбрасывается, сигнализируя о том, что микроконтроллер уже приступил к его обработке. Подпрограммы обработки прерывания обязательно должны оканчиваться командой возврата из прерывания (RETI). По этой команде управление передается в ту точку основной про­граммы, в которой прервалась ее работа. Флаг I при этом автоматически устанавливается в единицу, разрешая новые прерывания.

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

После окончания обработки очередного прерывания происходит про­верка остальных флагов, и если имеется хоть одно необработанное преры­вание, микроконтроллер переходит к его обработке. Если необработанных прерываний окажется несколько, то применяется закон приоритетов. Из всех прерываний выбирается то прерывание, приоритет которого выше. Чем меньше адрес вектора прерывания, тем выше его приоритет.

И в заключении, в качестве примера, приведу таблицу векторов пре­рываний для микроконтроллеров семейства «Ttiny» (см. табл. 3.3).

Адреса векторов прерываний микроконтроллеров семейства «Tiny» Таблица 3.3

Источник Описание Tiny11x Tiny12x Tiny15x Tiny28x
INT0 Внешнее прерывание 0 $001 $001 $001 $001
INT1 Внешнее прерывание 1 - - - $002
PIN_CANGE По изменению сигнала на любом из выводов $002 $002 $002 -
LOW_LEVEL По низкому уровню на входе порта В - - - $003
TIMER1 COMPA По совпадению показаний таймера/счетчика Т1 с содержимым контрольного регистра - - $003 -
TIMER1 OVF Переполнение таймера/счетчика Т1 - - $004 -
TIMER0 OVF Переполнение таймера/счетчика Т0 $003 $003 $005 $004
EE_RDY По готовности EEPROM - $004 $006 -
ANA_COMP По сигналу от аналогового компаратора $004 $005 $007 $005
ADC По завершению преобразования вАЦП - - $008 -

 



2016-09-17 353 Обсуждений (0)
Управление системой прерываний 0.00 из 5.00 0 оценок









Обсуждение в статье: Управление системой прерываний

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (353)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)