Проектирование алгоритмического и программного

Вид материалаДокументы
3.3. Контроллер прерываний
3.3.1. Контроллер прерываний МПК Intel 80x86
3.3.1.1. Слово инициализации
3.3.1.2. Слово управления операцией
3.3.2. Контроллер прерываний микроконтроллера Siemens SAB C167
Подобный материал:
1   2   3   4   5   6   7

3.3. Контроллер прерываний


Основное назначение контроллера прерываний состоит в организации взаимодействия нескольких прерываний во времени. Рассмотрим особенности программирования контроллеров прерываний для МПК Intel 80x86 и Siemens SAB C167.

3.3.1. Контроллер прерываний МПК Intel 80x86


Контроллер прерываний для МПК Intel 80x86 представляет собой отдельную микросхему Intel 8259 (отечественный аналог – КР1810ВН59А). Контроллер может использоваться с 16 и 8 разрядными процессорами Intel. Контроллер обслуживает до 8 запросов на прерывания и допускает каскадирование.

Контроллер содержит 3 регистра, доступных для программирования:
  • Регистр маскирования прерываний IMR;
  • Регистр запросов прерываний IRR;
  • Регистр обслуживания прерываний ISR.

Регистр маскирования прерываний IMR осуществляет запрет/разрешение на прохождение каждого сигнала запроса прерывания IRQ на вход регистра запросов прерываний IRR. Последний содержит битовый вектор, указывающие на аппаратные запросы, требующие обслуживания. После выработки сигнала прерывания центральному процессору разряд регистра IRR, соответствующий обслуживаемому запросу, устанавливается в нулевое состояние, а соответствующий разряд регистра ISR - в единичное состояние, что блокирует обслуживание всех запросов с равным или более низким приоритетом. Устранение этой блокировки производится либо сбросом соответствующего бита в ISR, либо командой специального маскирования.

Доступ к контроллеру осуществляется через 2 регистра ввода-вывода. В IBM PC это порты 20h и 21h. Для программирования контроллера применяются команды двух типов:
  • Слово инициализации;
  • Слово управления операцией.



3.3.1.1. Слово инициализации


Инициализация контроллера производится один раз. Существует 4 команды (слова) инициализации ICW1 – ICW4. Одним из признаков команды являются четный или нечетный адрес регистра ввода-вывода контроллера, куда направляется эта команда (обозначается A0=0 для четного адреса, A0=1 для нечетного адреса). Для IBM PC это соответственно порт 20h (A0=0) и порт 21h (A0=1). Другим признаком может служить значения какого-либо бита этой или другой команды Dn (n=0-7). Признаки команд представлены в таблице 6.

Таблица 6

Команда

Признаки

ICW1
  • A0=0
  • D4=1

ICW2
  • A0=1
  • Следующая команда после ICW1

ICW3
  • A0=1
  • D1=1 в ICW1

ICW4
  • A0=1
  • D0=1 в ICW1


Рассмотрим содержимое команд (слов) инициализации.

ICW1. Значения битов ICW1 представлены в таблице 7.

Таблица 7

Бит

Значение

Содержание

D0

0

ICW4 не программируется

1

ICW4 программируется

D1

0

Каскадирование контроллера есть

1

Каскадирования контроллера нет

D2

0

Размер вектора прерывания – 8 байт

(для процессора Intel 8080)

1

Размер вектора прерывания – 4 байта

(для процессора Intel 8080)

D3

0

IRQ воспринимается уровнем

1

IRQ воспринимается фронтом

D4

0

-

1

Признак ICW1

D5 – D7

Разряды A5 – A7 адреса программы обработки прерываний для процессора Intel 8080


ICW2. Для Intel 80x86 команда содержит номер вектора прерывания, который соответствует запросу IRQ0. Для Intel 8080 содержит разряды A8 – A15 адреса программы обработки прерывания

ICW3. Возможны два варианта команды.
    1. Контроллер – ведущий

Номер бита команды указывает на линию запроса (Dn – IRQn, n=0-7). Значение бита указывает на источник запроса прерываний: 0-запрос с периферии, 1-запрос от ведомого контроллера.
    1. Контроллер-ведомый

Значение команды определяет номер линии запроса ведущего контроллера (n – IRQn, n=0-7), к которой подключен ведомый контроллер.

ICW4. Значения битов ICW1 представлены в таблице 8.

Таблица 8

Бит

Значение

Содержание

D0

0

Работа с процессором Intel 8080

1

Работа с процессором Intel 80x86

D1

0

Обычный конец прерывания

1

Автоматический конец прерывания


D3 D2


Режим буферизации ведомый/ведущий

0x

Нет буферизации

10

С буфером ведомый контроллер

11

С буфером ведущий контроллер

D4

0




1

Разрешение приоритета ведомого


Порядок инициализации контроллера представлен на рис.10.



3.3.1.2. Слово управления операцией


Существует 3 команды (слова) управления операцией OCW1 – OCW4. Каждая команда управления операцией OCWn (n=1-4) может быть загружена в любое время после инициализации. Контроллер различает OCWn по адресу порта и по битам D3, D4. Признаки команд представлены в таблице 9.


Таблица 9

Команда

Признаки

OCW1
  • A0=1




OCW2
  • A0=0
  • D3=D4=0

OCW3
  • A0=0
  • D3=1, D4=0


Рассмотрим содержимое команд (слов) управления операцией.

OCW1. Осуществляет запись в регистр маскирования прерываний IMR. Наличие 1 в бите n (n=0-7) маскирует соответствующий запрос прерываний IRQ n.

OCW2. Осуществляет запись в регистр обслуживания прерываний ISR. Назначение OCW2 состоит в выборе того или иного алгоритма обслуживания запросов прерываний. Значения OCW2 представлены в таблице 10.

Таблица 10

Побитное значение OCW2

D7 – D0

Содержание

0 0 1 0 0 x x x

Обычный конец прерываний.


0 1 1 0 0 B2 B1 B0

Специальный конец прерываний;

B2 B1 B0 - двоично-десятичный код сбрасываемого разряда ISR.

1 0 1 0 0 x x x

Циклический сдвиг уровней приоритетов с обычным концом прерываний

1 1 1 0 0 B2 B1 B0

Циклический сдвиг уровней приоритетов со специальным концом прерываний

1 0 0 0 0 x x x

Разрешение вращений уровней прерываний

0 0 0 0 0 x x x

Сброс разрешения вращения уровней приоритета

1 1 0 0 0 B2 B1 B0

Циклический сдвиг уровней приоритетов без завершения прерываний


Команда «обычный конец прерывания» устанавливает в нулевое состояние разряд ISR, соответствующий последнему обслуженному запросу.

Команда «специальный конец прерывания» устанавливает в нулевое состояние тот разряд ISR, номер которого указан в разрядах B0 B1 B2.

Команда «циклический сдвиг уровней приоритета с обычным концом прерывания» устанавливает в ноль разряд ISR, соответствующий последнему обслуженному запросу и этому же номеру запроса присваивается низший уровень приоритета.

Аналогично действует команда «циклический сдвиг уровней приоритета со специальным концом прерывания», только низший уровень приоритета присваивается тому входу IRQ, номер которого указан в разрядах B0 B1 B2.

Команда «циклический сдвиг уровней приоритета» устанавливает статус уровней приоритета без выполнения операции конца прерывания. Разряды B0 B1 B2 указывают дно приоритетного кольца.

OCW3. Обеспечивает чтение регистров обслуживания прерываний ISR и запросов прерываний IRR и задает специальное маскирование. Значения битов OCW2 представлены в таблице 11.

Таблица 11

Биты

Значения

Содержание

D1 D0

0 x

Запрещение чтения регистров

1 0

Разрешение чтения IRR при следующем обращении к порту с адресом A0=0

(порт 20h для IBM PC)

1 1

Разрешение чтения ISR при следующем обращении к порту с адресом A0=0

(порт 20h для IBM PC)

D2

0

Режим опроса не установлен

1

Установка режима опроса

D6 D5

0 x

Запрет специального маскирования

1 0

Сброс специального маскирования

1 1

Разрешение специального маскирования


Специальное маскирование состоит в блокировке действия тех разрядов ISR, которые замаскированы командой OCW1 на соответствующих позициях регистра IMR. Специальное маскирование используют для обслуживания такого запроса, который блокируется более высоким или равным по уровню приоритета обслуженным запросом, хранящимся в ISR, не сбрасывая последний.

Заметим, что для чтения регистра маскирования прерываний IMR достаточно просто прочитать порт с адресом A0=1 (порт 21h для IBM PC).

3.3.2. Контроллер прерываний микроконтроллера Siemens SAB C167


В микроконтроллерах семейства SAB C167 каждому аппаратному источнику прерываний согласно таблице векторов прерываний соответствует свой регистр управления прерываниями (Interrupt Control Register). Программирование контроллера прерываний не требует общей начальной инициализации и сводится к настройке задействованных регистров управления прерываниями. Настройка каждого из них состоит в выборе уровня приоритета и установки бита разрешения для данного источника прерываний. Уровень приоритета может меняться программистом в любом месте программы.