Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прерывания
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Sneg_87
Вот в прерываниях есть маска и флаг прерываний?
Для чего они нужны, в чем их отличия. При желании можно скинуть ссылку на общее (широкое) приедназначение этих регистров.
К примеру у AT90S2313 имеется 2 регистра маски прерываний GIMCK-общий регистр маски прерываний и TIMCK- регистр прерываний от тацмера/счетчика.
Палыч
Цитата(Sneg_87 @ Oct 15 2009, 10:35) *
Вот в прерываниях есть маска и флаг прерываний?
Для чего они нужны, в чем их отличия.
Маска прерывания разрешает/запрешает(маскирует) прерывания от конкретного события. Флаг сигнализирует, что такое событие имело место.
rezident
Маска предназначена для разрешения и запрета прерываний. Флаги - для регистрации событий, вызывающих прерывания. С флагами можно работать по опросу их состояния, даже если прерывания запрещены маской.
Sneg_87
т.е. если я правильно понял в необходимых битах регистра масок задается режим работы по прерываниям (запрещен/разрешен), а по битам флага прерываний можно судить в результате чего произошло прерывания.
Такс, тогда следующий вопрос - а вообще прерывания по каким причинам происходят - только лишь из-за переполнения?
hobgoblin
Зависит от внутренней архитектуры процесора, который вы используете. Это может быть например изменение сигнала на внешнем выводе процессора, обнуление таймера, прием одиночного слова или заполнение буфера данных в режиме DMA каким-то из портов процессора, возникновение какой-то ошибки (например нехватка данных в буфере порта или его переполнения) и много чего еще. Читайте руководство по процессору, там все будет написано biggrin.gif .
BORIV
Флаги прерываний устанавливаются по событиям. Событий бывает много разных, как внутрених, так и внешних. Переполнение таймера, как Вы догадались, является внутренним событием и выставляет флаг прерывания по переполнению таймера. Если прерывание разрешено и если не установлены флаги с более высокими приоритетами, то управление будет передано на ячейку памяти, соответствующую этому прерыванию. По вектору прерывания с адресом ... .
Внешним событием может быть, например, изменение уровня на входе INT0 (или появление там единицы, как запрограммируете), что при соблюдении вышеперечисленных условий, приведёт к прерыванию программы, но уже по другому вектору. Перед прерыванием микроконтроллер запомнит в стеке адрес возврата и регистр состояния.
В ячейке памяти по вектору прерывания лежит команда, которая исполняется первой, при входе в прерывание.
Прерывания имеют приоритеты: прерывание с более высоким приоритетом, обслуживается в первую очередь и может прервать прерывание с более низким приоритетом. Можно или нет изменить приоритет прерывания, определяется конкретным контроллером. При выходе из прерывания микроконтроллер забирает из стека адрес возврата и состояние регистра состояния.
Вот вкратце и всё. Надеюсь, что заинтересовало.
Книжки читать всё равно придётся. rolleyes.gif
uriy
Цитата
Прерывания имеют приоритеты: прерывание с более высоким приоритетом, обслуживается в первую очередь и может прервать прерывание с более низким приоритетом.
Это справедливо если разрешены вложенные прерывания. В большинстве контроллеров вложенные прерывания по дефолту запрешены. Тогда следующее прерывание будет обслуживаться при выходе из текущего. Еще есть глобальный флаг разрешения прерываний. Он позволяет разрешить/запретить сразу все прерывания.
manul78
Цитата(uriy @ Oct 15 2009, 19:22) *
Это справедливо если разрешены вложенные прерывания. В большинстве контроллеров вложенные прерывания по дефолту запрешены. Тогда следующее прерывание будет обслуживаться при выходе из текущего. Еще есть глобальный флаг разрешения прерываний. Он позволяет разрешить/запретить сразу все прерывания.


Дык вот для этого и существуют флаги. Т.к. в обработчике можно изменением флага запретить выполнение последующего
(уже не нужного) прерывания. Помню на тиньке 2313 обрабатывал сигналы с безконтактных датчиков. Программа зацикливалась на бесконечной обработке. Доработал обработчик и все пошло... помню пол-дня ходил под впечатлением типа
"А в Атмеле далеко не дураки сидят !!!" smile.gif
Diusha
Цитата(BORIV @ Oct 15 2009, 12:08) *
Прерывания имеют приоритеты: прерывание с более высоким приоритетом, обслуживается в первую очередь и может прервать прерывание с более низким приоритетом.

Цитата(uriy @ Oct 15 2009, 18:22) *
Это справедливо если разрешены вложенные прерывания. В большинстве контроллеров вложенные прерывания по дефолту запрешены. Тогда следующее прерывание будет обслуживаться при выходе из текущего.

О чем вы? Речь идет об АВР! Там вложенные прерывания разрешаются установкой глобального флага разрешения прерываний (sei - на асм) в теле пп обр. прер. Начхать хотел АВР на приоритеты. Приоритеты играют роль, когда
а) >1 события (выз. прер.) происходят обновременно (маловероятно) или
б) >1 события произошли когда все прерывания были запрещены, а потом их разрешили (разрешили - sei или выход из пп прер.)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.