Сколько портов процессора необходимо выделить одному контроллеру прерываний i8259
Перейти к содержимому

Сколько портов процессора необходимо выделить одному контроллеру прерываний i8259

  • автор:

PersCom — Компьютерная ЭнциклопедияКомпьютерная Энциклопедия

https://atik.su обои marburg patent decor laser.

Ввод-вывод

Программирование контроллера прерываний i8259А

Программирование контроллера прерываний i8259А

Большая популярность применения этой микросхемы в качестве диспетчера аппаратных прерываний в компьютерах на базе микропроцессоров Intel объясняется наличием большого количества различных режимов ее работы, что позволяет сделать подсистему прерываний достаточно гибкой и эффективной. Действительно, если посмотреть на развитие аппаратной части компьютеров, начиная, например, с i8088/8086, то видно, что менялись самые разные компоненты, но подсистема прерываний, основанная на микросхеме i8259А, так и осталась неизменной.
В процессе загрузки компьютера и в дальнейшем во время работы контроллер прерываний настраивается на работу в одном из четырех режимов:

  1. FNM (Fully Nested Mode) — режим вложенных прерываний. В этом режиме каждому входу (уровню) irq0. irq7 присваивается фиксированное значение приоритета, причем уровень irq0 имеет наивысший приоритет, а irq7 — наименьший. Приоритетность прерываний определяет их право на прерывание обработки менее приоритетного прерывания более приоритетным (при условии, конечно, что IF = 1).
  2. ARM (Automatic Rotation Mode) — режим циклической обработки прерываний. В этом режиме значения приоритетов уровней прерываний также линейно упорядочены, но уже не фиксированным образом, а изменяются после обработки очередного прерывания по следующему принципу: значению приоритета последнего обслуженного прерывания присваивается наименьшее значение. Следующий по порядку уровень прерывания получает наивысшее значение, и поэтому при одновременном приходе запросов на прерывания от нескольких источников преимущество будет иметь этот уровень. Это дает возможность обеспечить «равноправие» при обработке прерываний.
  3. SRM (Specific Rotation Mode) — режим адресуемых приоритетов. Этот режим можно рассматривать как вариант режима ARM. В режиме SRM программист или система самостоятельно могут назначить уровень прерывания с наивысшим приоритетом.
  4. PM (Polling Mode) — режим опроса. Этот режим запрещает контроллеру автоматически прерывать работу микропроцессора при появлении прерывания от некоторого внешнего устройства. Для того чтобы микропроцессор смог узнать о наличии того или иного запроса на прерывание, он должен сам обратиться к i8259А для получения содержимого IRR, проанализировать его и далее действовать по своему алгоритму. Данный режим моделирует так называемую опросную дисциплину обработки прерываний. Мы упоминали о ней в начале урока. Согласно этому подходу, инициатором обработки прерывания становится не само прерывание, как при векторной дисциплине, а микропроцессор, причем в определяемые им (точнее, операционной системой, выполняемой на нем) моменты времени.

Программирование контроллера прерываний осуществляется через адресное пространство ввода-вывода посредством двух 8-битовых портов с адресами 20h и 21h. Управление контроллером осуществляется путем посылки в определенной последовательности в эти порты специальных приказов двух типов:

  • ICW (Initialization Control Word) — управляющее слово инициализации. Всего имеются четыре таких слова с жесткой внутренней структурой — ICW1. ICW4. Эти слова предназначены для задания режима работы контроллера. Количество этих слов (4) определено количеством режимов (см. выше).
  • OCW (Operation Control Word) — операционное управляющее слово. Таких слов всего три, и они несут информационную нагрузку для определенных выше режимов работы контроллера прерываний. Обычно их обозначают OCW1. OCW3.

Как вы уже, наверное, успели понять, процесс программирования контроллера жестко регламентирован. Поэтому рассмотрим вначале формат приказов управления, а затем их практическое применение.

Первое.ICW1 — определить особенности последовательности приказов

Состояние битов этого приказа (табл ниже) определяет особенности в последовательности приказов при инициализации контроллера. Данный приказ посылается в порт 20h.

Второе. ICW2 — определение базового адреса

Настало время прояснить еще один принципиальный момент, до этого времени сознательно замалчиваемый. Он связан с принципом определения числового диапазона адресов векторов прерываний для аппаратных прерываний, замкнутых на контроллер прерываний. В реальном режиме работы микропроцессора для хранения указателей (векторов) на процедуры-обработчики прерываний используется специальная область памяти — таблица векторов прерываний. Эта таблица начинается с нулевого адреса оперативной памяти и занимает 1 Кбайт. Среди векторов есть, конечно, и вектора, указывающие на процедуры-обработчики тех прерываний, которые замкнуты на контроллер. Эти вектора располагаются в таблице последовательно, одной группой, и их нумерация начинается с некоторого номера вектора, называемого базовым. Приказ ICW2 (табл. 15.2) позволяет задать номер этого базового вектора для контроллера прерываний в соответствии с тем номером, который назначен соответствующему вектору в таблице векторов прерываний. В реальном режиме работы микропроцессора BIOS в процессе начальной загрузки системы инициализируется ведущий контроллер значением 08h, а ведомый — значением 70h. Теперь понятно, почему обработчику прерываний от таймера соответствует номер вектора 08h в таблице векторов прерываний, хотя физически он замкнут на уровень 0 контроллера i8259A. При желании мы вполне можем изменить значение базового номера на любой не используемый в системе номер, к примеру — 90h. Также следует учитывать, что некорректная установка нового номера этим приказом может полностью нарушить работу всей системы.
Данный приказ посылается в порт 21h.

Как видно, для задания номера базового вектора используются биты с 3 по 7 приказа ICW2. Объяснить это можно тем, что на контроллер замыкаются 8 источников прерываний. Выше мы отметили, что номера векторов, соответствующих прерываниям, замкнутых на контроллер, имеют последовательные номера, начиная с базового. Так, для контроллера, инициализированного значением базового номера 08h, номера векторов в таблице векторов прерываний будут 08h, 09h, 0ah, 0bh и т. д. Отсюда и получается, что для задания базового номера биты 0. 2 использовать нельзя, так как они применяются для формирования адресов векторов прерываний следующих после базового уровней.

Третье. ICW3 — связь контроллеров

Этот приказ предназначен для связи контроллеров в системе с несколькими контроллерами прерываний.
Вариант работы с одной микросхемой i8259А, позволяющий обрабатывать запросы от 8 источников, использовался в ранних системах на базе микропроцессоров i8088/86 (в архитектуре XT). Но i8259А позволяет организовать так называемое каскадное соединение этих микросхем, при котором выход INT одной микросхемы подается на вход одного из уровней irq другой микросхемы (см. рис. 15.1). Это позволяет организовать обработку запросов от большего числа источников. При этом один контроллер является ведущим, а другой — ведомым (тот, который подключен ко входу irq ведущего). Ниже мы разберемся с каскадированием более подробно. Сейчас отметим, что формат приказа ICW3 зависит от того, какой контроллер инициализируется — ведущий (табл. 15.3) или ведомый (табл. 15.4). При инициализации ведущего контроллера ICW3M сообщает, к каким его входам irq подсоединены ведомые контроллеры. Соответственно, при инициализации ведомого контроллера нужна другая форма этого приказа, которая несет информацию о том, к какому входу ведущего подключен данный ведомый контроллер.
Приказ ICW3 посылается в порт 21h.

Четвёртое. ICW4 — дополнительные особенности обработки прерываний

Этот приказ (см. таблицу ниже) определяет дополнительные особенности обработки прерываний контроллером i8259А. Данный приказ посылается в порт 21h.

Таким образом, приказы инициализации задают контроллеру режимы работы в условиях вложенных прерываний. Если требуется конкретизировать порядок обработки для отдельных уровней прерываний, необходимо использовать специальные операционные управляющие слова — OCW, назначение и форматы которых мы рассмотрим ниже.

Еще статьи.

  1. Пятое. OCW1 — управление регистром масок IMR
  2. Шестое. OCW2 — управление приоритетом
  3. Седьмое. OCW3 — общее управление контроллером
  4. Девятое.Реальный режим работы микропроцессора

PersCom — Компьютерная ЭнциклопедияКомпьютерная Энциклопедия

Вы здесь: Главная Ввод-вывод Программирование контроллера прерываний i8259А Десятое. Обработка прерываний в реальном режиме

Архитектура ЭВМ

  • Базовая организация ЭВМ
  • Процессор
  • Память. Нижний уровень
  • Память. Верхний уровень
  • Ввод-вывод
  • Кодирование символов

Компоненты ПК

  • Устройства вывода информации
  • Процессоры
  • Системные платы
  • BIOS: базовая система ввода-вывода
  • Оперативная память
  • Накопители на жёстких дисках
  • Видеоадаптеры
  • Устройства оптического хранения данных
  • Аудиоустройства

Интерфейсы

Мини блог

  • Операционные системы
  • IT
  • Сетевые технологии

Самое читаемое

  • Арифметико логическое устройство (АЛУ)
  • Страничный механизм в процессорах 386+. Механизм трансляции страниц
  • Организация разделов на диске
  • Диск Picture CD
  • White Book/Super Video CD
  • Прямой доступ к памяти, эмуляция ISA DMA (PC/PCI, DDMA)
  • Карты PCMCIA: интерфейсы PC Card, CardBus
  • Таблица дескрипторов прерываний
  • Разъемы процессоров
  • Интерфейс Slot A

Ввод-вывод

Десятое. Обработка прерываний в реальном режиме

Обработка прерываний (как внешних, так и внутренних) в реальном режиме микропроцессора производится в три этапа:

  1. Прекращение выполнения текущей программы.
  2. Переход к выполнению и выполнение программы обработки прерываний.
  3. Возврат управления прерванной программе.

Первый этап должен обеспечить временное прекращение выполнения текущей программы таким образом, чтобы потом прерванная программа продолжила свою работу так, как будто никакого прерывания не было. Любая программа, загруженная для выполнения операционной системой, занимает свое, отдельное от других программ, место в оперативной памяти. Разделяемыми между программами ресурсами являются регистры микропроцессора, в том числе регистр флагов, поэтому их содержимое нужно сохранять. Обязательными для сохранения являются регистры cs, ip и flags\eflags, поэтому они при возникновении прерывания сохраняются микропроцессором автоматически. Пара cs:ip содержит адрес команды, с которой необходимо начать выполнение после возврата из программы обслуживания прерывания, а flags\eflags — состояние флагов после выполнения последней команды прерванной программы в момент передачи управления программе обработки прерывания. Сохранение содержимого остальных регистров должно обеспечиваться программистом в начале программы обработки прерывания до их использования. Наиболее удобным местом хранения регистров является стек. В конце первого этапа микропроцессор после включения в стек регистров flags, cs и ip сбрасывает бит флага прерываний IF в регистре flags (но при этом в стек записывается предыдущее содержимое регистра flags с еще установленным IF). Тем самым предотвращаются возможность возникновения вложенных прерываний по входу INTR и порча регистров исходной программы вследствие неконтролируемых действий со стороны программы обработки вложенного прерывания. После того как необходимые действия по сохранению контекста завершены, обработчик аппаратного прерывания может разрешить вложенные прерывания командой sti.
Набор действий по реализации второго этапа заключается в определении источника прерывания и вызова соответствующей программы обработки. В реальном режиме микропроцессора допускается от 0 до 255 источников прерываний. Количество источников прерываний ограничено размером таблицы векторов прерываний. Эта таблица выступает связующим звеном между источником прерывания и процедурой обработки. Данная таблица располагается в памяти, начиная с адреса 0. Каждый элемент таблицы векторов прерываний занимает 4 байта и имеет следующую структуру:

  • 1-е слово элемента таблицы — значение смещения начала процедуры обработки прерывания (n) от начала кодового сегмента;
  • 2-е слово элемента таблицы — значение базового адреса сегмента, в котором находится процедура обработки прерывания.

Определить адрес, по которому находится вектор прерывания с номером n, можно следующим образом:

смещение_элемента_таблицы_векторов_прерываний = n * 4

Таким образом, полный размер таблицы векторов прерываний 4 * 256 = = 1024 байт.
Теперь понятно, что на втором этапе обработки прерывания микропроцессор выполняет следующие действия:

  1. По номеру источника прерывания путем умножения на 4 определяет смещение в таблице векторов прерываний.
  2. Помещает первые два байта по вычисленному адресу в регистр ip.
  3. Помещает вторые два байта по вычисленному адресу в регистр cs.
  4. Передает управление по адресу, определяемому парой cs:ip.

Далее выполняется сама программа обработки прерывания. Она, в свою очередь, также может быть прервана, например, поступлением запроса от более приоритетного источника. В этом случае этапы 1 и 2 будут повторены для вновь поступившего запроса.
Набор действий по реализации этапа 3 заключается в восстановлении контекста прерванной программы. Так же, как и на этапе 1, на данном последнем этапе есть действия, выполняемые микропроцессором автоматически, и действия, задаваемые программистом. Основная задача на этапе 3 — привести стек в состояние, в котором он был сразу после передачи управления данной процедуре. Для этого программист указывает необходимые действия по восстановлению регистров и очистке стека. Этот участок кода необходимо защитить от возможности искажения содержимого регистров (в результате появления аппаратного прерывания) с помощью команды cli. Последние команды в процедуре обработки прерывания — sti и iret, при обработке которых микропроцессор выполняет следующие действия:

  1. sti — разрешить аппаратные прерывания по входу INTR;
  2. iret — извлечь последовательно три слова из стека и поместить их, соответственно, в регистры ip, cs и flags.

В результате этапа 3 управление возвращается очередной команде прерванной программы, которая должна была выполниться, если бы прерывания не было.
Аппаратные прерывания могут быть инициированы программно командой микропроцессора int n, где n — номер аппаратного прерывания в соответствии с таблицей векторов прерываний. При этом микропроцессор также сбрасывает флаг IF, но не вырабатывает сигнал INTA.
После такого обстоятельного обсуждения нам осталось рассмотреть хороший пример. Он должен показать нам ключевые моменты программирования программных и аппаратных прерываний. Выберем одно программное и одно аппаратное прерывание. Наиболее «частое» аппаратное прерывание — прерывание от таймера. Что касается программного прерывания, то основное требование при его выборе для нашего эксперимента то, чтобы его номер не совпадал с номером какого-нибудь системного прерывания.
Программа, которую мы должны будем разработать, выполняет следующие действия: подключает новый аппаратный обработчик прерываний от таймера 08h, который на каждый 4-й сигнал в цикле выводит на экран символы (0-9). Пользовательское прерывание (новый обработчик прерывания 0ffh) вызывается после запуска прерывания от таймера. Его работа заключается в выдаче сигнала сирены циклически несколько раз. После этого пользовательское прерывание производит восстановление вектора старого обработчика прерывания от таймера и завершает свою работу вместе со всей программой.
Перед обсуждением программы нужно сделать следующее замечание. По сути, мы ставим себе цель дополнить программу обработки прерывания от таймера некоторым новым свойством. Одновременно, мы не хотим портить старый обработчик этого прерывания. Такая ситуация встречается довольно часто. Существуют различные способы сцепления системных обработчиков прерываний с пользовательскими. Прерывание от таймера 08h интересно тем, что программа его обработки предусматривает возможность того, что пользователь захочет вставить в обработчик свой код. С этой целью из системной программы обработки прерывания 08h делается вызов еще одного прерывания с номером 1сh. Это пустое прерывание, обработчик которого содержит всего одну команду iret. Таким образом, пользователь имеет возможность решить проблему сцепления своего обработчика с системным обработчиком прерывания 08h косвенно — попросту заменив вектор обработчика прерывания 1сh. Этот прием реализован в листинге ниже (программный код).

Листинг

;prg15_1.asm MASM MODEL small ;модель памяти STACK 256 ;размер стека .486p delay macro time local ext,iter ;макрос задержки ;На входе — значение переменной задержки (в мкс) push cx mov cx,time ext: push cx ;в cx одна мкс,это значение можно ;поменять в зависимости от производительности процессора mov cx,5000 iter: loop iter pop cx loop ext pop cx endm ;конец макроса .data tonelow dw 2651 ;нижняя граница звучания 450 Гц cnt db 0 ;счетчик для выхода из программы temp dw ? ;верхняя граница звучания old_off8 dw 0 ;для хранения старых значений вектора old_seg8 dw 0 ;сегмент и смещение time_1ch dw 0 ;переменная для пересчета .code ;начало сегмента кода off_1ch equ 1ch*4 ;смещение вектора 1ch в ТВП off_0ffh equ 0ffh*4 ;смещение вектора ffh в ТВП char db «0» ;символ для вывода на экран maskf db 07h ;маска вывода символов на экран position dw 2000 ;позиция на экране — почти центр main proc mov ax,@data mov ds,ax xor ax,ax cli ;запрет аппаратных прерываний на время ;замены векторов прерываний ;замена старого вектора 1ch на адрес new_1ch ;настройка es на начало таблицы векторов ;прерываний — в реальном режиме: mov ax,0 mov es,ax ;сохранить старый вектор mov ax,es:[off_1ch] ;смещение старого вектора 1ch в ax mov old_off8,ax ;сохранение смещения в old_off8 mov ax,es:[off_1ch+2] ;сегмент старого вектора 1ch в ax mov old_seg8,ax ;сохранение сегмента в old_seg8 ;записать новый вектор в таблицу векторов прерываний mov ax,offset new_1ch ;смещение нового обработчика в ax mov es:off_1ch,ax push cs pop ax ;настройка ax на cs mov es:off_1ch+2,ax ;запись сегмента ;инициализировать вектор пользовательского прерывания 0ffh mov ax,offset new_0ffh mov es:off_0ffh,ax ;прерывание 0ffh push cs pop ax mov es:off_0ffh+2,ax sti ;разрешение аппаратных прерываний ;задержка, чтобы новый обработчик таймера вывел символы на экран delay 3500 ;завершение программы int 0ffh exit: mov ax,4c00h int 21h main endp new_1ch proc ;новый обработчик прерывания от таймера ;сохранение в стеке используемых регистров push ax push bx push es push ds ;настройка ds на cs push cs pop ds ;запись в es адреса начала видеопамяти — B800:0000 mov ax,0b800h mov es,ax mov al,char ;символ в al mov ah,maskf ;маску вывода — в ah mov bx,position ;позицию на экране — в bx mov es:[bx],ax ;вывод символа в центр экрана add bx,2 ;увеличение позиции mov position,bx ;сохранение новой позиции inc char ;следующий символ ;восстановление используемых регистров: pop ds pop es pop bx pop ax iret ;возврат из прерывания new_1ch endp ;конец обработчика new_0ffh proc ;новый обработчик пользовательского прерывания sirena: ;сохранение в стеке используемых регистров push ax push bx ;проверка для пересчета на 4: test time_1ch,03h jnz leave_it ;если два правых бита не 11, то на выход, ;иначе: go: mov ax,0B06h ;заносим слово состояния 110110110b ;(0В6h) — выбираем второй канал порта 43h (динамик) out 43h,ax ;в порт 43h in al,61h ;получим значение порта 61h в al or al,3 ;инициализируем динамик — подаем ток out 61h,al ;в порт 61h mov cx,2083 ;количество шагов musicup: ;значение нижней границы частоты в ax (1193000/2651=450 Гц), ;где 1193000 — частота динамика mov ax,tonelow out 42h,al ;в порт 42h — младшее слово ax:al mov al,ah ;обмен между al и ah out 42h,al ;в порте 42h уже старшее слово ax:ah add tonelow,1 ;увеличение частоты delay 1 ;задержка на 1 мкс mov dx,tonelow ;текущее значение частоты — в dx mov temp,dx ;в temp — верхнее значение частоты loop musicup ;повторить цикл повышения mov cx,2083 musicdown: mov ax,temp ;верхнее значение частоты — в ax out 42h,al ;младший байт ax:al в порт 42h mov al,ah ;обмен между al и ah out 42h,al ;старший байт ax:ah в порт 42h sub temp,1 ;уменьшение частоты delay 1 ;задержка на 1 мкс loop musicdown ;повторить цикл понижения nosound: in al,61h ;значение порта 61h — в al ;слово состояния 0fch — выключение динамика и таймера and al,0fch out 61h,al ;в порт 61h mov dx,2651 ;для последующих циклов mov tonelow,dx inc cnt ;инкремент количества проходов cmp cnt,2 ;если сирена не звучала двух ;раз — повторный запуск jne go leave_it: ;выход inc time_1ch ;пересчет на 4 ;восстановление используемых регистров pop bx pop ax ;восстановление вектора прерывания от таймера cli ;запрет аппаратных прерываний xor ax,ax ;снова настройка es на начало таблицы mov es,ax ;векторов прерываний mov ax,old_off8 ;запись в таблицу смещения старого mov es:off_1ch,ax ;обработчика прерывания от таймера mov ax,old_seg8 ;запись сегмента mov es:off_1ch+2,ax sti ;разрешение аппаратных прерываний iret ;возврат из прерывания new_0ffh endp ;конец обработчика end main ;конец программы

Обсудим листинг. Основная процедура main (строки 36-72) выполняет инициализацию используемых векторов прерываний. При этом необходимо запомнить содержимое старого вектора прерывания 1ch (строки 45-51), так как его придется восстанавливать перед завершением программы. Содержимое вектора пользовательского прерывания 0ffh сохранять нет смысла, так как его номер выбран исходя из того, что он не используется при работе системы. При смене вектора прерывания 1сh необходимо запретить обработку аппаратных прерываний командой cli (строка 40), так как внешние прерывания являются асинхронными и могут прийти в самый неподходящий момент, в том числе и во время смены содержимого вектора. Перед завершением работы аппаратного прерывания необходимо явно выдать сигнал EOI. Но в нашем случае это делать необязательно, так как за нас это сделает системный обработчик прерывания 08h, из которого вызывается обработчик для прерывания 1ch. В строках 52-57 и 58-63 производится запись новых значений векторов 1ch и 0ffh в таблицу векторов прерываний. После того как в строке 64 командой sti будут разрешены аппаратные прерывания, на экран будут выведены символы. Эти действия выполняет новая программа обработки прерывания для вектора 1ch (строки 73-98). Эти символы будут выводиться до тех пор, пока действует программная задержка, которую мы организовали в строке 66. После этого вызывается пользовательское прерывание 0ffh, программа обработки которого (строки 99-161) отрабатывает несколько циклов генерации сигнала «сирена» (мы обсуждали эту программу на уроке 7, и теперь вы уже в состоянии оформить ее в виде макроса или процедуры). Вызов программы обработки прерывания пользователя new_0ffh осуществляется с помощью специальной команды int. Эта команда предназначена для того, чтобы пользователь сам мог инициировать вызов прерываний. Как видите, эти прерывания являются планируемыми (синхронными), так как пользователь сам определяет момент его вызова.
После написания этой программы можно провести несколько экспериментов для исследования работы контроллера прерываний и системы прерываний в целом. К примеру, можно выполнить следующие операции:

  • Изменить базовый адрес ведущего контроллера прерываний. Как мы обсуждали выше, BIOS инициализирует ведущий контроллер таким образом, что он имеет базовый адрес 08h. Попробуйте теперь изменить значение базового вектора, например, на значение 0f0h. Для этого необходимо выполнить инициализацию контроллера, которая заключается в последовательной посылке в него управляющих слов. Посмотрите последовательность приказов, которые BIOS посылает в контроллер прерываний для его инициализации при загрузке системы. Нам тоже нужно будет их сформировать, но с нужными нам значениями, и послать в контроллер прерываний. Фрагмент, осуществляющий такие действия, может выглядеть следующим образом: . mov al,00010001b out 20h,al ;ICW1 в порт 20h jmp $+2 jmp $+2 ;задержка, чтобы успела ;отработать аппаратура mov al,0f0h out 21h,al ;ICW2 в порт 20h — новый базовый номер jmp $+2 jmp $+2 ;задержка, чтобы успела ;отработать аппаратура mov al,00000100b out 21h,al ;ICW3 — ведомый подключается ;к уровню 2 (см. рис. 15.1) jmp $+2 jmp $+2 ;задержка, чтобы успела ;отработать аппаратура mov al,00000001b out 21h,al ;ICW4 — EOI выдает ;программа пользователя Данный фрагмент нужно вставить в начало процедуры main листинга после команды cli. После этого вектору прерывания от таймера будет соответствовать значение 0f0h. Соответственно, если вы хотите, чтобы программа листинга работала как прежде, вам нужно настроить вектор 0f0h на системную программу обработки прерывания 08h. Техника такой замены аналогична приведенной в листинге. После этого можно разрешить прерывания командой sti. Но правильно работать будет только прерывание от таймера, все остальные прерывания (например, от клавиатуры) будут приводить к зависанию компьютера. Если вы подобным образом перепрограммировали контроллер, то перед завершением программы нужно провести обратное перепрограммирование, чтобы вернуть старое значение базового адреса. Если этого не сделать, то работа системы будет нарушена — все аппаратные прерывания будут попадать «не туда».
  • Рассмотреть альтернативу команде cli, замаскировав аппаратные прерывания, используя прямое программирование регистра масок IMR: ;запретить прерывания mov al,0ffh out 21h,al ;для ведущего контроллера out A1h,al ;для ведомого контроллера ;разрешить прерывания mov al,00h out 21h,al ;для ведущего контроллера out A1h,al ;для ведомого контроллера Попробуйте использовать эти команды в листинге вместо команд cli и sti.
  • Запретить аппаратные прерывания определенных уровней. Например, в следующем фрагменте запрещаются прерывания от клавиатуры: in al,21h or al,00000010b out 21h,al
  • Исследовать, как меняется содержимое регистров IRR, IMR и ISR в ходе обработки аппаратного прерывания, читая состояние описанных выше портов. Если у вас проснулся интерес к подобной исследовательской деятельности, то предлагаю вам самостоятельно написать эти фрагменты программ и исследовать их с использованием листинга.

Ксюха скинула / 26

Для кривой отклика данного вида используем следующую передаточную функцию объекта управления:

;

здесь k/(Tp+1) отражает апериодическое изменение выходной величины, а e — tp – временную задержку после изменения U(t).

Для определения параметров используем следующие формулы:

; — в условных единицах (В); — безразмерная величина

Типы используемых регуляторов – П, ПИ, ПИД-регуляторы.

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

Таблица Зиглера-Никольса

Таблица Коэна-Куна

Данные таблицы составлены исследователями с использованием в качестве основного критерия декремента затухания. Его величина принимается равной 4.

Начальные параметры – характеристика кривой отклика:

Рассчитываем передаточную функцию ОУ:

Итого получаем передаточную функцию объекта управления

Организация системы прерываний в микропроцессорной системе. Понятие о системе прерываний. Программируемый контроллер прерываний i8259 (КР580ВН59). Назначение выводов, внутренняя структура, режимы работы, программирование. Обработка запросов на прерывание от внешних устройств

В любой МП системе может быть достаточно большое количество аппаратных устройств и оборудования, которые требуют реакции процессора. Пример: Допустим в нашей системе имеется 4 коммуникационных порта COM 1 COM 4, которые обеспечивают связь МП системы по последовательному интерфейсу с другими контроллерами и системой верхнего уровня. Допустим скорость 9600 бит\с. Последовательный интерфейс организован на основе МС I8251. Так же допустим имеется клавиатура, она подключается по последовательному интерфейсу. Подает сигналы на порты РКВ. Система выполняет какую-то работу . Так как в системе есть эти устройства, то необходимо определить начало поступления байта по 4-м коммуникационным портам, а так же не пропустить момент нажатия клавиши на клавиатуре. Поэтому процессор должен в основной программе через равные промежутки времени проводить опрос коммуникационного оборудования и клавиатуры. При поступлении байта данных с клавиатуры, формируется сигнал готовности, который поступает на PB0 и после того как информация будет считана, на PB0 появится 0.

В МС I8251 определить поступление байта из линии и уход в линию, прочитав порт регистра управляющего слова, опросив РУС и определив D1. Таким образом в программе через равные промежутки времени будет опрашивать порт B и оценивать состояние мл.бита, затем опрашивать 4 регистра управляющего слова. МС I8251 и оценивать состояние бита D1. возникает вопрос с какой скоростью опрашивать. Скорость приема передачи по коммуникационным портам 9600. При минимальном числе битов (10), таким образом мы должны определить частоту опроса = 960 в секунду.

27*5=135 тактов при 2 МГц = 70мкс. На один опрос всего оборудования мы потратим 70мкс, т.к. мы должны опрашивать 1000 р\с и получаем 70мс, значит мы тратим 7% времени процессора на опрос. Но вполне возможно, что за это время не было поступления данных и 7% было потрачено впустую. По мере добавления новых устройств у процессора все будет меньше и меньше времени на работу. Для того что бы сэкономить процессорное время, а так же для увеличения производительности системы, процессор не должен заниматься опрос устройств, а реагировать на событие только тогда, когда это событие наступило. Данное событие должно прерывать выполнение основной программы.

При наступлении события процессор прерывает выполнение основной программы и переходит на подпрограмму обработки данного события и после завершения программы прерывания и возвращаться в ту же точку основной программы, из которой он ушел на обработку данного события. Таким образом событие фактически прерывает выполнение основной программы, поэтому – это событие называется прерыванием, а подпрограмма – подпрограммой обработки событий. В момент наступления события (поступления байта из линии или нажатие клавиши), должен генерироваться аппаратный сигнал, который прервет выполнение основной программы. Следовательно у МП должен быть специальный вход, который отвечает за обработку прерывания. У I8080A – INT; У I8025 – TRAP; У I8086 – NMI, INT. В момент поступления запроса на прерывание по входу INT МП возможны 2 варианта обработки события (прерывания по входу INT у процессора является маскируемым, т.е. их можно разрешить\запретить программным путем). 1. Прерывание было запрещено командой DI – процессор его игнорирует. В I8080A можно было запретить другим способом – после поступления сигнала запроса по входу INT автоматически запрещались; 2. Прерывания разрешены (была выполнена команда EI), обработка запроса на прерывание есть ни что иное, как извлечение 1 байта команды (в системе на базе I8080A, I8085, Z80), поэтому в слове-состоянии разряды INTA=1 M1=1 направление перехода процессора по прерыванию определяется в момент, когда формируется сигнал INTA или на D7 D0 выставляется слово-состояние, у которого D0(INTA)=1. Здесь на шину данных выставляется однобайтовый код команды RST (как правило RST7 — FFH), который по сигналу DBIN МП будет считан МП и воспринят как 1-ый байт команды. Команда RST n (n=0-7) – однобайтовые вызовы подпрограмм. Помимо RST существует команда логического вызова CALL (3 байта). RST аналогично CALL, в стек сохраняется адрес возврата (текущее значение счетчика команд). В PC записывается новое значение: nx8, n=7 => PC все устройства имеют одинаковый приоритет и обрабатывая одно событие процессор должен игнорировать запросы от других источников; 2. Аппаратное усложнение; Поэтому в МП системах используется, т.н. программируемый контроллер прерываний (PIC) I8259 (только с I8080А\Z80\I8085).

Предназначен для организации многоуровневой приоритетной системы обработки запросов на прерывание. I8259 реализует векторную 8-ми уровневую систему прерываний и реализует следующие функции: 1. Фиксацию запросов на прерывание от 8 внешних устройств; 2. Программное маскирование поступающих запросов; 3. Присвоение фиксированных или цикоически изменяемых приоритетов каждому из 8 запросов на прерывание; 4. Формирование машинного кода команды CALL и 2-х байтов 16-ти разрядного адреса этой подпрограммы обработки данного прерывания.

D0-D7 – двунаправленные вх\вых с 3-мя состояниями, подключаются к МД; CS – выбор МС; A0 – адресный вход выбора регистров контроллера; RD – чтение; WR – запись; IRQ 7-0 – входы запросов на прерывание, поступает от внешних источников; INTA – вход подтверждения прерывания; SP – выбор ведомой МС; INT – выход запроса на прерывание, поступает на МП; CAS 0-2 – вх\вых, используются при каскадном включении контроллеров PIC. ПКП наиболее часто используется для работы в простом приоритетном режиме, при котором из запросов на прерывание назначен фиксированный приоритет. Наивысший приоритет у IRQ 0. приведем структурную схему:

В состав входит:

1. 8-ми разрядный БД

2. Схема управления чтением и записью

3. Регистр управляющих слов

4. Схема управления

5. Схема каскадирования

6. Регистр запросов на прерывание IRR

7. Схема обработки приоритетов

8. Регистр состояний ISR

9. Регистр маскирования запросов на прерывание IMR

Запрос на прерывание поступает в регистр запросов, а оттуда в регистр состояния, который их запоминает. Регистр маски IMR содержит 1 в тех разрядах, которые в настоящий момент маскируются. С помощью установки в 1 любого разряда регистра маски блокируется передача запросов на ПР. Если маска будет снята, то дальше будут обслуживаться все ЗПР в порядке их приоритетов. Схема обработки приоритетов определяет наиболее приоритетный запрос. ПКП может находиться в 2-х основных состояниях: настройки и обслуживания запросов на обмен. С помощью загрузки управляющих слов 2-х видов (инициализация ICW – в режиме настройки и операционных OCW – при обслуживании запросов) командами OUT ПКП может настраиваться на следующие режимы обслуживания запросов на прерывания:

1. Полного вложения подпрограммного прерывания (приоритеты внешних устройств фиксированы)

2. Циклического сдвига приоритетов

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

4. Последовательного опроса

Схема управления ПКП формирует сигнал запроса на прерывание, поступающий на вход INT процессора. Если МП разрешено прерывание, он отвечает котроллеру сигналом поступающим на вход INTA. По этому сигналу ПКП на шину данных выдает первый байт команды CALL – переход на под программу обработки прерываний. Входящий в состав МП систем системный контроллер формирует еще 2 сигнала, поступающих на вход ПКП INTA, по которым выдаются второй и третий байты команды CALL, содержащие адрес подпрограммы обработки прерываний. Кроме того по третьему сигналу поступающему на вход INTA контроллера, сбрасывается в 0 разряд регистра запросов IRR и устанавливается в 1 соответствующий разряд регистра состояния, который индицирует, какой из запросов на прерывание обслуживается.

Общий обзор выпускаемых в настоящее время преобразователей частоты.

Преобразователь частоты с непосредственной связью. Здесь преобразователь выполняет функции и выпрямителя, и инвертора. При питании трехфазного двигателя НПЧ содержит три реверсивных преобразователя постоянного тока (рис.2.48), которые управляются модулирующим напряжением. Частота и амплитуда этого напряжения определяют частоту fв и величину напряжения Uв на выходе преобразователя.

К достоинствам схемы рис.2.48 относятся: во-первых, естественная коммутация тока сетевым переменным напряжением, за счет чего здесь могут использоваться традиционные полууправляемые тиристоры, и во-вторых реверсивность схемы. Основным недостатком такого ПЧ является то, что при частоте напряжения сети 50 Гц максимальная частота его выходного напряжения составляет 16 Гц, а при дальнейшем ее увеличении происходит ухудшение формы выходного напряжения. Если вместо нулевой схемы выпрямления применить мостовую, то максимальная частота увеличится до 25 Гц.

Преобразователь частоты с промежуточным звеном постоянного тока с автономным инвертором напряжения (рис.2.51).

ПЧИН состоит из нерегулируемого выпрямителя и автономного инвертора напряжения. Автономный инвертор напряжения (АИН) – это инвертор, форма напряжения на выходе которого определяется только порядком переключения вентилей инвертора, а форма тока зависит от характера нагрузки. Для обеспечения возможности обмена реактивной энергией между нагрузкой и источником постоянного напряжения и замыкания высших гармонических составляющих параллельно входу АИН устанавливается конденсатор (С1, С2) большой емкости.

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

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

В АИН осуществляется одновременная работа двух транзисторов в одной группе (анодной или катодной) и одного – в другой группе. При этом продолжительность работы каждого транзистора составляет π. Пусть в какой-то момент времени работают транзисторы VТ1, VТ2, VТ6. Тогда ток протекает по всем трем фазным обмоткам двигателя, причем половина выпрямленного напряжения Ud прикладывается к фазе А и к двум параллельно включенным фазам В и С. При запирании VТ2 и включении VТ5 ток в фазе В не может мгновенно измениться и замыкается через диоды VD3 и VD4 через конденсатор, чем обеспечивается циркуляция реактивной мощности между обмотками АД и конденсаторами С1 и С2. После включения транзистора VТ6 ток будет протекать по параллельно включенным фазам А и С и по фазе В и так далее. Кривые линейного и фазного напряжений приведены на рис.2.52. Ток при этом имеет форму, показанную на рис.2.53.

Выходная частота определяется частотой переключения вентилей инвертора.

Регулирование величины выходного напряжения в современных АИН осуществляется путем использования способа широтно-импульсной модуляции (ШИМ).

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

Регулируя скважность управляющих импульсов по синусоидальному закону, можно получить среднее напряжение Un также изменяющееся по синусоидальному закону.

Характерные свойства АИН:

— широкий диапазон выходной частоты – от 0 до 1000 Гц;

— в современных АИН и величина, и частота выходного напряжения определяются инвертором, что, с одной стороны, позволяет упростить выпрямитель (применить неуправляемый), а с другой стороны, усложняет схему импульсного управления инвертором;

— однозначная зависимость выходного напряжения от входного и независимость его от изменения нагрузки и коэффициента мощности, что позволяет АИН работать в разомкнутых системах электропривода;

— форма тока на нагрузке близка к синусоиде;

— напряжение прямоугольное (при использовании широтно-импульсной модуляции форма кривой напряжения может быть приближена к синусоидальной);

— так как выпрямитель является неуправляемым невелико его отрицательное влияние на сеть;

— при работе на активно-индуктивную нагрузку (АД) АИН приближается по своим свойствам к идеальному, то есть отсутствуют броски тока при изменении полярности напряжения.

Недостатки АИН:

— большая масса и габариты конденсаторов фильтра.

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

Преобразователь частоты с промежуточным звеном постоянного тока с автономным инвертором тока (рис.2.54).

Здесь выпрямитель является управляемым, построенным на тиристорах. Автономный инвертор тока (АИТ) – это инвертор, форма тока на выходе которого определяется только порядком переключения вентилей инвертора, а форма напряжения зависит от характера нагрузки. Питание АИТ должно производиться от источника тока. Перевод выпрямителя в режим регулируемого источника тока достигается путем включения сглаживающего реактора LR значительной индуктивности.

Автономный инвертор тока может быть выполнен на ключах любого типа. На схеме рис.2.54 показаны запираемые тиристоры GTО. Здесь отсутствуют шунтирующие обратные диоды и поэтому возможно изменение полярности напряжения на входе инвертора, то есть при неизменном направлении выпрямленного тока возможен перевод двигателя в рекуперативный режим.

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

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

Коммутация осуществляется следующим образом: пусть открыты тиристоры VS1 и VS2. Ток проходит через фазы А и С. При подаче управляющего импульса на VS3 он открывается, вентиль VS1 запирается (причины его запирания здесь не рассматриваются, так как это зависит от типа применяемых ключей) и далее ток протекает через VS3, фазы В и С и тиристор VS2. Затем отпирается VS4 и ток протекает по фазе А и т.д. За время периода заданной частоты происходит 6 коммутаций тиристоров, в результате чего по обмоткам статора АД будет протекать трехфазный переменный ток прямоугольной формы заданной частоты.

В отличие от АИН здесь в каждый момент времени работают по одному вентилю в каждой (анодной и катодной) группах.

Величина выходного напряжения определяется величиной выпрямленного напряжения, то есть величиной регулируемого напряжения управляемого выпрямителя, а частота – частотой переключения вентилей инвертора. Следовательно, в АИТ преимущественно применяется частотно-импульсная модуляция.

Характерные свойства АИТ:

— простота схемы, возможность ее реализации на тиристорах различного типа;

— возможность режима рекуперации энергии; для чего при том же направлении тока в звене постоянного тока управляемый выпрямитель переводится в инверторный режим (угол зажигания устанавливается больше π/2);

— напряжение на нагрузке при постоянном выпрямленном напряжении не сохраняется постоянным, а изменяется приблизительно обратно пропорционально коэффициенту мощности нагрузки. При питании от АИТ АД изменение момента на ее валу приводит к существенному изменению напряжения. Поэтому ПЧ с АИТ следует применять исключительно в замкнутых системах электропривода, со стабилизацией напряжения на АД или с изменением его по определенному закону;

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

— форма напряжения на нагрузке близка к синусоиде;

— при частоте напряжения питающей сети 50 Гц максимальная частота не превышает 100-150 Гц, что обусловлено использованием в АИТ «медленных» вентилей, например, тиристоров GTO.

Недостатки АИТ:

— несинусоидальная форма тока в обмотках статора;

— так как выпрямитель является управляемым, то его отрицательное влияние на сеть большее, чем у ПЧ с инверторами напряжения.

Практически все фирмы – изготовители ПЧ, и зарубежные, и отечественные, гарантируют КПД выпускаемых преобразователей не ниже 0,94 и коэффициент мощности – не ниже 0,95 в рабочем диапазоне скоростей.

Выбор конкретного типа ПЧ определяется требованиями, предъявляемыми к системе технологическими условиями. С этой точки зрения все частотно-регулируемые электроприводы можно объединить в две большие группы.

  1. Регулируемые электроприводы, работающие в режиме поддержания технологического параметра, установка которого изменяется схемно или программно;
  2. Электроприводы, режимы которых изменяются в зависимости от нескольких критериев.

Ответы: КМ-2. Архитектура i8086. Тестирование

Вопрос: 1 — й
DMA контроллер это
Вопрос: 2 — й
В процессе работы контроллера прерываний i8259A установленный разряд РОП сбрасывается
Вопрос: 3 — й
Выберите команды, принадлежащие системе команд i8086
Вопрос: 4 — й
Для подключения интервального таймера типа i8254 к процессору i8086 Вам потребуется
Вопрос: 5 — й
Для подключения контроллера прерываний i8259A к процессору i8086 Вам потребуется
Вопрос: 6 — й
Инициализация контроллера прерываний i8259A выполняется
Вопрос: 7 — й
Количество аппаратных прерываний для устройств ПК на основе i8086, обеспечиваемых контроллером прерываний i8259A
Вопрос: 8 — й
Количество каналов таймеров в ПК на основе процессора i8086 и таймера i8254
Вопрос: 9 — й
Команда RBC интервального таймера i8254 может обеспечить
Вопрос: 10 — й
Команда xor ax,ax изменяет следующие флаги
Вопрос: 11 — й
Команды и данные программ в системе на основе i8086 хранятся
Вопрос: 12 — й
Контроллер прерываний это
Вопрос: 13 — й
Микросхема интервального таймера i8254 в системе на основе i8086 предназначена для (отметить нужное)
Вопрос: 14 — й
Программируемый таймер это
Вопрос: 15 — й
Сегмент памяти (в понятиях систем на i8086) это
Вопрос: 16 — й
Система команда процессора i8086 поддерживает операции, в которых
Вопрос: 17 — й
Сколько портов процессора необходимо выделить интервальному таймеру i8254
Вопрос: 18 — й
Сколько портов процессора необходимо выделить одному контроллеру прерываний i8259
Вопрос: 19 — й
Структура интервального таймера i8254 содержит (отметить нужное)
Вопрос: 20 — й
Структура контроллера прерываний i8259A содержит (выбрать правильные узлы)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *