Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5-Apparatnye_preryvanija_v_OMK.docx
Скачиваний:
4
Добавлен:
18.09.2019
Размер:
92.75 Кб
Скачать

Использование аппаратных прерываний в омк Пример, когда требуется реакция на внешнее событие

В управляющей системе надо постоянно (периодически) осуществлять контроль состояния объекта управления, и если это состояние отклоняется от желаемого, формировать управляющие воздействия на объект.

Простейший случай – срабатывание датчика.

Аналогично – переполнение таймера

Другой пример (он определенно, более сложен, но, может быть, он более понятен) – передача строки байтов через UART (последовательный интерфейс).

Программный опрос состояния объекта – поллинг.

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

Такой способ выяснения готовности устройства к обмену с процессором называют поллингом )от англ. poll, polling – опрос).

Постоянный опрос состояния передатчика – непродуктивное использование процессорного времени. Длительность передачи одного байта на скорости 9600 бод – около 1 миллисекунды, Pentium-4 (3 ГГц) за это время может выполнить около 1 млн. команд. Пока буфер передатчика UART не свободен, можно выполнять полезную работу.

Прием с периодическим опросом состояния передатчика имеет недостатки:

  1. Чем чаще опрос, тем больше на это расходуется процессорного времени

  2. При редком опросе будут возникать задержки между моментом освобождения передатчика и моментом, когда об этом «узнает» опрашивающая программа.

  3. Если в системе требуется организовать реакцию на несколько событий, то сложность программы будет очень быстро возрастать.

Сигнализация о состоянии буфера передатчика происходит внешним логическим (электрическим) сигналом. Для помещения очередного байта в буфер передатчика требуется фрагмент кода, содержащий около 10…20 процессорных команд, он выполнится очень быстро. Как же организовать передачу управления на этот фрагмент?

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

Совсем коротко: механизм аппаратных прерываний – возможность вызвать подпрограмму в ответ на внешний электрический сигнал, пришедший в процессор.

Важно всегда помнить: ничего другого, кроме как считывать из памяти команду за командой, декодировать и исполнять их, процессор «не умеет».

Процессор всегда выполняет команду за командой, )кроме того, некоторые процессоры способны находиться в состоянии «останова»).

Обычно процессор считывает команды из памяти подряд по порядку адресов, за этим «следит» счетчик (или указатель) команд – послед считывания очередной команды его содержимое автоматически увеличивается на sizeof этой команды.

Некоторые команды (перехода) способны «нарушать» описанный естественный порядок исполнения команд подряд. Действие команд перехода состоит в загрузке в счетчик команд значения «не-подряд».

Коротко:

При возникновении внешнего события в процессор поступает электрический сигнал (запрос аппаратного прерывания).

В ответ на этот сигнал, процессор на время прекращает выполнение текущей последовательности команд и производит вызов заранее написанной подпрограммы.

Эта подпрограмма реализует требуемую реакцию на событие, вызвавшее сигнал запроса.

По окончании выполнения этой подпрограммы должно быть продолжено выполнение прерванной последовательности команд.

Текущую последовательность команд будем далее называть фоновой программой.

Подпрограмму, реализующую реакцию на событие, будем называть подпрограммой обработки прерывания или более коротко, обработчиком (прерывания).

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

Пока открытым остается вопрос о том, как задается начальный адрес обработчика (или несколько адресов для нескольких обработчиков).

Логическая связь между фоновой программой и обработчиком может присутствовать и быть более или менее тесной, либо может отсутствовать вовсе. В приведенном примере с последовательным портом последнее может означать, что фоновая программа никак не связана с процессом передачи байтов через UART. Т.е. фоновая программа в этом случае выполняет полезную для системы работу, но эта работа никак не связана с передаваемыми через UART данными.

Преимущества использования механизма прерываний:

  1. Фоновую программу и обработчики можно написать и отладить по отдельности, независимо от того, связаны они между собой логически, или нет.

  2. Передачи управления от фоновой программы на обработчик(и) организованы чисто аппаратно, и происходят только в том случае, если в процессор поступил сигнал готовности (не надо тратить процессорное время на анализ состояния периферийного устройства).

  3. Время от момента возникновения события до начала выполнения кода обработчика может быть сделано малым, без дополнительных затрат процессорного времени. (При использовании постоянного опроса состояния, это время можно сделать и меньшим, чем при использовании прерывания, ценой нерационального использования процессорного времени).

Теперь отметим некоторые особенности использования механизма прерываний, некоторые из особенностей иногда следует (приходится) рассматривать как недостатки.

  1. При организации реакции на несколько событий, возможны ситуации, когда события возникают во времени «тесно» одно к другому, и реакция процессора на одни события будет задерживать реакцию на другие (при опросе состояний такое тоже возникает, но программист может определять порядок опроса разных событий).

  2. События в системе могут иметь различную важность (и соответственно, требования ко времени реакции тоже могут быть различными) – надо иметь возможность управлять порядком реакции на одновременно возникающие запросы.

  3. При выполнении обработчика также могут возникать события (и запросы) – надо иметь возможность определять, разрешен ли «вложенный» вызов обработчиков.

  4. Выполнение некоторых участков программы (как фоновой так и обработчика) недопустимо прерывать, команды такого участка должны выполняться неразрывно (атомарные операции)

  5. В устройстве, логически воспринимаемом разработчиком как одно, может возникать несколько различных событий.

Пример такой ситуации – для асинхронного последовательного интерфейса (COM-порт в ПК, UART в микроконтроллерах):

Фактически это два различных устройства: передатчик Tx и приемник Rx.

Передатчик может находиться в двух состояниях: «свободен» (можно записать очередной передаваемый байт) и «занят». Событием, о котором хочется «узнать» без задержки, является переход из «занят» в «свободен» ‑ можно передавать следующий байт. Но, кроме того, в передатчике может возникнуть и «аварийная» ситуация, состоящая в том, что (по причине ошибки в алгоритме) следующий байт отправляется в передатчик преждевременно, и таким образом, один из двух байтов ‑ теряется.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]