Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Пользователю -> Евстифеев А.В. -> "Микроконтроллеры семейства" -> 32

Микроконтроллеры семейства - Евстифеев А.В.

Евстифеев А.В. Микроконтроллеры семейства — Infineon, 2007. — 318 c.
Скачать (прямая ссылка): microkontrolleri2007.pdf
Предыдущая << 1 .. 26 27 28 29 30 31 < 32 > 33 34 35 36 37 38 .. 100 >> Следующая


Система прерываний и ловушек/С167

5.3 Приоритетность прерываний и запросов на РЕС-обслуживание

Разрешение и запрещение запросов на прерывание возможно с помощью трех способов:

Биты управления позволяют переключать каждый индивидуальный источник. Биты управления (ххІЕ) расположены в отдельных регистрах управления прерываниями. Все запросы на прерывание могут быть глобально включены или отключены посредством бита Id регистра Р6:.

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

Команды ATOMIC и ЕХТ автоматически запрещают все запросы на прерывание во время исполнения следующих четырех команд. После завершения этих команд не требуется заново включать разрешения на прерывания (см. раздел «Системное программирование»).

Руководство классами прерываний

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

Классы с числом членов меньше 4 могут быть представлены в одном и том же уровне приоритета (ILYL) и разделены между собой с помощью группового уровня (GLYL). Функционирование класса при этом будет поддерживаться автоматически при помощи контроллера прерываний.

Классы с числом членов больше 4 могут быть созданы с помощью использования некоторого количества рядом расположенных уровней приоритетов (ILYL) и их групповых уровней (до 4 на уровень). Каждая подпрограмма прерывания из этого класса устанавливает уровень ЦПУ на максимальный уровень приоритета для этого класса. Все запросы такого же или более низкого уровня будут заблокированы, т.е. класс считается использующимся.

6-17 МЭИ, Центр Промышленной Электроники Фирмы Infineon

Система прерываний и ловушек/С167

5.4 Сохранение состояния во время обслуживания прерывания

Прежде чем запрос на прерывание начнет обслуживаться, состояние текущей задачи автоматически будет сохранено в системном стеке. Состояние ЦПУ (PSW) сохраняется до тех пор, пока выполнение прерванной задачи не будет продолжено после возвращения из подпрограммы прерывания. Точка возврата определяется с помощью IP и, в случае использования сегментированного режима памяти, указателя сегмента кода CSP.

В системном стеке сначала сохраняется значение PSW, затем IP (в несегментированном режиме) или затем CSP и IP (для сегментированного режима). Эта последовательность оптимизирует использование системного стека, при отключенной сегментации.

Значение поля уровня приоритета ЦПУ (ILVL в PSW) изменяется на значение приоритета обслуживаемого запроса на прерывание, поэтому ЦПУ после этого работает с новым уровнем приоритета. Если во время выполнения операции умножения или деления было допущено прерывание, то бит MULIP регистра PSW устанавливается в «1». В этом случае значение, сохраненное в стеке, не адрес следующей команды, а продолжение выполнения команды умножения и деления, так как эта команда была прервана и необходимо завершить ее после возврата из прерывания.

Staius of

SP-

ШШШШ'

High Addresses

SP-

Low Addresses

PSW

IP

Interrupted Task

Ш

ж

PSW

CSF

IP

-SP

?) System Stack before Interrupt Entry

Рисунок 5-3

Ь) System Stack after Interrupt Entry (Unsegmented)

Ь) System Stack after Interrupt Entry (Segmented)

Состояние задачи, сохраненное в системном стеке

Флаг обслуживаемого запроса на прерывание устанавливается в 0. В IP-регистр загружается вектор, связанный с источником запроса (в случае режима сегментированной памяти значение CSP очищается), после этого первая команда подпрограммы прерывания вызывается из адреса вектора, необходимого для перехода в саму подпрограмму прерывания. Значение указателя страницы данных и Context Pointer при этом не изменяются.

6-18 МЭИ, Центр Промышленной Электроники Фирмы Infineon

Система прерываний и ловушек/С167

Когда подпрограмма обслуживания прерывания заканчивает свою работу (после выполнения команды RETI), информация о состоянии вызывается из системного стека в обратном порядке.

Переключение context

Подпрограмма обслуживания прерывания обычно сохраняет все используемые регистры в стеке и перед возвращением восстанавливает их значения. Чем больше регистров используется в подпрограмме прерывания, тем больше времени теряется при сохранении и восстановлении. С167 позволяет переключать полный банк ЦПУ-регистров (GPR-регистры) за одну команду, и поэтому подпрограмма обслуживания использует собственный независимый банк GPR.

Предыдущая << 1 .. 26 27 28 29 30 31 < 32 > 33 34 35 36 37 38 .. 100 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100