Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабник

.pdf
Скачиваний:
14
Добавлен:
31.03.2015
Размер:
656.87 Кб
Скачать

Л а б о р а т о р н а я р а б о та № 2

ОБМЕН ДАННЫМИ МЕЖДУ ЭВМ И ВНЕШНИМИ УСТРОЙСТВАМИ С ПРЕРЫВАНИЕМ ПРОГРАММЫ ПРОЦЕССОРА

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

2.1. Алгоритм взаимодействия компонентов системы при обмене данными с прерыванием программы

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

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

– прерывание текущей программы и выполнение операций обмена данными с требующим обслуживание ВУ под управлением другой (оперативной) программы.

Для управления прерываниями от ВУ в автоматизированных системах на основе ЭВМ семейства IBM PC используется программируемый контроллер прерываний (ПКП), входящий в состав ЭВМ.

Рассмотрим последовательность действий ВУ, ПКП и ЦП при обмене данными в режиме прерывания текущей программы (рис. 2.1).

Для сигнализации о необходимости обслуживания, ВУ посылают сигнал запрос прерывания программы (ЗП) через свой интерфейс на один из входов IRi ПКП.

ПКП в свою очередь посылает сигнал ЗП (INT) в ЦП.

ЦП, с получением сигнала INT, последовательно выполняет следующие действия:

1)запоминает информацию о своем текущем состоянии;

2)идентифицирует ВУ, от которого поступил сигнал INT;

3)осуществляет переход на оперативную программу обслуживания ВУ и выполняет обмен данными под управлением этой программы;

4)восстанавливает свое первоначальное состояние и возобновляет работу прерванной программы.

13

На первом шаге процессор после завершения текущей команды запоминает содержимое внутренних регистров: флагов (Flags), сегмента команд (CS) и указателя инструкций (IP). Сохранение указанных регистров необходимо для последующего возобновления прерванной программы.

В регистре флагов процессор сбрасывает флаги IF (прерывания) и TF (трассировки).

ЦП

 

ОЗУ

 

ПЗУ

 

Внешние ЗУ

 

Терминал

 

 

 

 

 

 

 

 

 

Маги стральный канал ЭВМ

 

IR0

 

 

Данные

 

 

IR1

 

Интерфейс

Внешнее

 

 

 

ПКП

ЗП

внешнего

Состояние

устройство

 

IRi

устройства

(ВУ)

 

 

 

 

 

 

Управление

 

 

IR7

 

 

 

 

 

 

 

 

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

Второй шаг (идентификация ВУ) выполняется аппаратными средствами процессора и контроллера прерываний. ЦП посылает ПКП сигнал разрешения прерывания. ПКП, получив сигнал разрешения прерываний, передает процессору код – номер типа прерывания, по которому процессор идентифицирует ВУ затребовавшее прерывание программы. Процессор может распознать 256 различных прерываний, каждому из них соответствует код типа (целое число 0..255). Код типа умножается процессором на 4, а полученный результат используется в качестве указателя ячейки памяти - адреса вектора прерывания. По адресу вектора прерывания содержится начальный адрес оперативной программы обслуживания прерывания ВУ, называемый вектором прерывания. Следует отметить, что каждое устройство, использующее обмен с прерыванием, как правило, должно иметь свою уникальную программу обслуживания.

Третий шаг выполняется процессором путем загрузки содержимого вектора прерывания в счетчик команд процессора (регистры CS, IP) и выполнения последовательности команд оперативной программы.

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

14

восстанавливать их прежние значения.

Четвертый шаг требует выборки из стека и загрузки в регистры процессора CS, IP, Flags прежних значений, что позволяет продолжить выполнение прерванной программы. Эти действия инициируются командой возврат из прерывания (IRET), которой должна заканчиваться каждая оперативная программа обслуживания прерываний.

Поскольку аппаратные прерывания возникают независимо друг от друга, может возникнуть одновременно несколько запросов прерываний. Чтобы система могла решить какое внешнее устройство обслуживать в первую очередь, в контроллере прерываний существует схема приоритетов. Система отдает предпочтение самому приоритетному устройству, откладывая обработку остальных прерываний. Если во время обслуживания низкоприоритетного устройства ВУ1 приходит запрос от устройства ВУ2 с большим приоритетом, система может прервать обслуживание ВУ1 и перейти к обслуживанию ВУ2. Такие прерывания называются вложенными. Режим вложенных прерываний оказывается возможным, если оперативная программа обслуживания ВУ1 в процессе работы установит флаг разрешения прерываний IF=1 в регистре Flags. Иначе все запросы прерываний от внешних устройств оказываются блокированными до её завершения и восстановления прежнего содержимого регистра Flags.

2.2. Техническое описание и алгоритмы работы основных элементов

 

 

системы

 

 

 

В автоматизированных системах на основе ЭВМ семейства IBM AT для

управления приоритетными векторными прерываниями от ВУ используется

БИС программируемого контроллера прерываний (ПКП) Intel 8259A.

ШД ША ШУ

 

 

 

 

 

 

 

 

D7-D0

 

 

 

от ВУ

IOR

(ввод)

RD

 

 

 

IR0

 

 

 

 

IOW

(вывод)

WR

 

 

 

IR1

 

 

 

 

 

 

 

 

ISR

PR

IMR

IRR

 

 

 

 

 

К

INTR (ЗП)

INT

 

 

 

 

 

 

 

 

 

ЦП

INTA (РП)

INTA

 

 

IR7

IR7

 

 

 

 

 

 

Дешифратор

CS

 

 

 

 

 

адреса

 

 

 

 

 

А0

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

 

 

 

 

SP/EN

CAS2-CAS0

 

 

 

Ведущий/ведомый

 

К другим ПКП

 

Рис. 2.2. Функциональный состав ПКП и схема связи его с ЦП и ВУ

15

ПКП (рис. 2.2) имеет 8 входов запросов прерываний и может обслуживать до 8 запросов прерываний от внешних устройств.

Число обслуживаемых запросов прерываний может быть расширено до 64 путем каскадного соединения микросхем ПКП. В ЭВМ семейства IBM AT имеются два ПКП, включенных каскадно, что позволяет использовать максимально 15 входов запросов прерываний.

Полное описание микросхемы можно найти в справочной литературе [1] или по ее отечественному аналогу КР-1810-ВН59А [2].

Для реализации своих функций ПКП связан:

-с шиной данных (D7 - D0), шиной адреса (A0, CS) и шиной управления

(RD, WR) ЭВМ;

-с ЦП через линии управления прерываниями (INT, INTA);

- c ВУ через линии запросов прерываний (IR7 - IR0);

- с другими ПКП через линии каскадирования (CAS2 - CAS0).

Для каждого контроллера в адресном пространстве ввода/вывода ЭВМ выделяются два адреса (для первого ПКП: 20h и 21h). При включении питания BIOS (базовая система ввода-вывода) ЭВМ выполняет начальную инициализацию ПКП и программирует его в режим вложенных прерываний, при котором каждому из входов запросов прерываний IR7– IR0 назначается фиксированный приоритет в порядке возрастания, и запрос с большим приоритетом может прерывать обслуживание запросов с

меньшими приоритетами.

 

 

В табл. 2.1 показано назначение входов запросов

прерываний для

первого ПКП и номера типов прерываний после его инициализации BIOS.

Аппаратные прерывания первого ПКП

Таблица 2.1

 

 

 

 

 

Вход

Номер типа

Назначение входа

 

 

 

прерывания

 

 

 

IR0

8

Таймер

 

 

IR1

9

Клавиатура

 

 

IR2

Ah

Для каскадирования

 

 

IR3

Bh

COM2

 

 

IR4

Ch

COM1 (AT)

 

 

IR5

Dh

LPT2 (AT)

 

 

IR6

Eh

Контроллер НГМД

 

 

IR7

Fh

LPT1

 

 

Если некоторые из перечисленных устройств отсутствуют (например, COM2, LPT2) или не используют выделенные им линии IRi, то к соответствующим входам ПКП можно подключить устройства связи с объектом автоматизации.

Функциональная схема контроллера прерываний включает: регистр запросов (IRR), регистр масок (IMR), регистр обслуживаемых запросов

16

(ISR) и шифратор приоритетов (PR). Все регистры 8-разрядные.

Регистр запросов прерываний IRR, фиксирует все запросы на входах IR0–IR7. Для чтения содержимого регистра IRR служит команда “Разрешение чтения регистра IRR” (код Ah), выводимая в порт с адресом 20h. После выполнения этой команды контроллером содержимое регистра IRR может быть считано процессором по тому же адресу.

Регистр масок прерываний IMR маскирует (разрешает) запросы прерываний. Если какой–либо бит IMi регистра маски установлен в “1”, то запрос от соответствующего входа регистра запросов IRi будет запрещен. Сигнал IRi=1 зафиксируется в регистре IRR, но установленный бит маски в регистре IMR не пропускает его в шифратор приоритетов. Маскирование входа IRi с некоторым приоритетом не запрещает прерывания от входов с меньшими приоритетами. Содержимое регистра маски в любой момент может быть записано или считано процессором из порта с адресом 21h.

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

Программа обслуживания прерывания при своем завершении должна сбросить бит ISi в регистре ISR. Сброс бита в регистре ISR, соответствующего последнему обслуженному запросу, выполняется командой "Обычный конец прерывания" (код 20h), которая выводится в порт с адресом 20h.

Для чтения регистра ISR служит команда "Разрешение чтения регистра ISR" (код Bh), также выводимая в порт с адресом 20h. После выполнения команды, содержимое регистра ISR может быть считано процессором по тому же адресу.

Шифратор приоритетов PR анализирует содержимое регистров IRR, IMR, ISR и определяет, необходимо или нет генерировать сигнал запрос прерывания INT процессору.

Алгоритм работы ПКП в режиме вложенных прерываний:

1)при появлении запроса прерывания на входе IRi запрос IRi фиксируется в регистре IRR установкой бита IRi=1;

2)установленный в “1” бит IRi регистра IRR сравнивается с соответствующим битом IMi регистра IMR. Если бит IMi сброшен в ноль (IMi=0), запрос передается в шифратор приоритетов PR;

3)шифратор приоритетов PR проверяет его приоритет, и если в регистре ISR биты запросов с большими приоритетами сброшены в ноль, формируется сигнал запрос прерывания INT в процессор;

4)если прерывания процессора разрешены (флаг прерывания в регистре флагов процессора установлен в единицу, IF=1), то по завершении

17

текущей команды процессор возвращает сигнал разрешения прерывания по линии INTA контроллеру прерываний;

5)ПКП сбрасывает бит IRi=0 в регистре IRR, устанавливает бит ISi=1 в регистре ISR и передает на линии D7–D0 код номера типа прерывания. Установка бита ISi в регистре ISR блокирует прерывания от этого и всех других входов с меньшими приоритетами IRi–IR7 до момента его

сброса оперативной программой.

Чтобы повторить процедуру прерывания от данного входа, необходимо сигнал на входе IRi вернуть в “неактивное” состояние.

Интерфейс ВУ содержит схему формирования ЗП на входе IRi ПКП, регистр состояния ВУ, управляющие регистры, определяющие режим работы отдельных элементов, а также буферные регистры данных. В качестве устройства, формирующего запросы прерывания в системе, используется программируемый 3-канальный интервальный таймер (ПИТ).

После программирования, ПИТ вырабатывает последовательность импульсов типа меандр с установленным периодом следования T, которые могут использоваться для формирования запросов на прерывание. Состояние выходов каналов фиксируются в регистре состояния (биты 0, 1 и 2). Интерфейс ПИТ формирует запросы прерываний на входе IR3 ПКП (рис. 2.3), если в регистре состояния (адрес 302h) бит OUТ1 принимает единичное значение, а в регистре управления прерываниями (адрес 30Fh) программа установит флаг разрешения прерываний (ФРП) в “1”.

Регистр состояния, адрес 302h

7

6

5

4

3

2

1

0

1

1

1

1

АЦП

OUТ2

OUТ1

OUТ0

IR3

Регистр управления прерываниями, адрес 30Fh

7

6

5

4

3

2

1

0

 

 

 

Т

Х

Х

Х

Х

Х

Х

Х

ФРП

 

 

 

 

 

 

 

 

 

 

Рис. 2.3. Схема формирования сигнала ЗП от таймера платы L-154

Бит OUТ1 отображает состояние выхода первого канала таймера, которое одну половину периода импульса T/2 принимает единичное значение, а другую половину периода – нулевое.

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

Вчастности, устройства, описанные в лабораторной работе №1,

могут использоваться: для выработки управляющих сигналов с

18

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

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

2.3. Методика программирования прерываний

Программирование обмена данными в режиме прерываний фоновой программы включает: инициализацию компонентов системы, подготовку к обмену и программирование обмена.

Инициализация контроллера прерываний выполняется BIOS при включении системы.

Подготовка к обмену с прерыванием выполняется фоновой программой и включает:

-запрет прерываний от входа IR3 в ПКП на время подготовки к обмену;

-определение глобальных переменных для совместного использования фоновой и оперативной программами: резервирование необходимого объема оперативной памяти для данных, для подсчета числа переданных слов и указания общего их количества;

-сохранение старого вектора прерываний от входа IR3, для его последующего восстановления по окончании обмена;

-установку вектора прерывания от входа IR3 на программу обслуживания прерываний от таймера;

-разрешение прерываний в контроллере прерываний от входа IR3.

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

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

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

-сохранение регистров процессора, модифицируемых во время работы программы;

-инкремент программного счетчика;

-непосредственный обмен данными ВУ с памятью ЭВМ;

-сброс бита IS3 в регистре обслуживаемых запросов ISR и восстановление регистров процессора.

-проверку текущего значения программного счетчика и запрет последующих прерываний от входа IR3 при его равенстве конечному значению.

19

2.4. Программная реализация методики программирования прерываний

Рассмотрим программные средства, реализующие методику программирования прерываний, на примере генерации сигнала на выходе ЦАП с заданными интервалом дискретизации T и амплитудной характеристикой в режиме прерывания фоновой программы от таймера L-154.

Пример 2.1. Генерация синусоидального сигнала с прерыванием текущей программы в среде программирования Turbo-Pascal. Для запуска ПИТ используется процедура Set_Time (T: word) из модуля timer154, где T

– период формирования запросов прерываний в микросекундах.

Program Demo_Interrupt; Uses Dos, crt, timer154;

const BasAdr: word=$300; count: integer=1; var U:array[0..1024] of integer;

OldIntB: pointer; T, i: integer; F, A: real; Nmas: word;

Procedure IntDAC; interrupt;

{Оперативная программа обслуживания прерываний.}

{Ключевое слово Interrupt приводит к генерации машинных команд, обеспечивающих сохранение в стеке всех регистров процессора при входе в процедуру IntDAC и извлечение их из стека перед выходом из нее} Begin {Старт оперативной программы}

asm STI end;{Установка IF=1 в регистре флагов ЦП} Port[BasAdr]:=U[count]; {Вывод в ЦАП очередного значения} inc(count); {Инкремент программного счетчика}

if count > Nmas then dec(count, Nmas); {Генерация выполняется непрерывно, если не нажата клавиша}

if keypressed then Port [$21]:=Port [$21] or $8; {Проверка нажатия клавиши и запрет прерываний от входа IR3, если это произошло}

Port[$20]:=$20;{IS3=0 Сброс бита регистра ISR – OCW2}

End; {Конец оперативной программы} Begin {Основная программа}

Port [BasAdr+$f]:= 0; {Запрет генерации прерываний от платы L-154} Port[$21]:=Port[$21] OR $8;{Запрет прерывания от входа IR3 в ПКП}

Writeln(' Installation parameters of a signal'); writeln;

{Установка параметров сигнала}

write('Install number of ordinates of a signal on one period (2..1024) ?'); readln (Nmas); F:=2*pi/Nmas;

Write(' Install amplitude of a signal in volts ?'); readln(A);

for i:= 1 to Nmas do U[i]:=Round(2048 + A/0.0025*sin(F*(i-1)));

{Определена синусоидальная форма сигнала и вычислены его ординаты}

GetIntVec($B,OldIntB); SetIntVec($B,@IntDAC);

20

{Сохранен старый вектор прерывания от входа IR3 в переменной OldIntB. Установлен новый вектор прерывания от входа IR3 на процедуру IntADC} write (' Installation an interval of digitization in microseconds ?'); readln (T);

F:=1000000.0 /(T*Nmas);

writeln(' Start of the generator, Frequency = ',F:8:4);

Set_Time(T); {Запуск таймера}

Port[BasAdr+$F]:=1; {Разрешение прерываний от таймера}

Port[$21]:=Port[$21] AND (NOT ($8));

{Разрешены прерывания от IR3 в регистре IMR ПКП}

{Здесь должна быть фоновая программа, которая будет выполняться совместно с программой вывода данных в ЦАП}

writeln(' For break to press any key!!!'); {Как закончить программу?} while not keypressed do; while keypressed do readkey;

SetIntVec($B,OldIntB); {Восстановление старого вектора прерываний от входа IR3} End. {Конец основной программы}

2.5.Задание и порядок выполнения работы

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

2.Разработайте алгоритм и программы:

a)ввода в реальном времени массива данных из модуля АЦП в ОЗУ ЭВМ с прерыванием фоновой программы от таймера L-154 (период дискретизации сигнала и канал мультиплексора указываются из табл. 2.1); б) расчета в фоновом режиме работы процессора значений функции (из таблицы 1.1 по указанию преподавателя);

в) преобразования значений кодов АЦП в значения напряжения UКВ по окончании ввода всего массива, а также определения оценок математического ожидания, дисперсии и размаха входного сигнала U;

г) вывода массива исходных данных и результатов расчета на экран терминала и сохранения их на диске.

3.Введите в ЭВМ и отладьте программу эксперимента.

4.Соедините вход АЦП с источником исследуемого сигнала.

5.Запустите программу на выполнение и сохраните результаты эксперимента. По известному периоду T квантования сигнала постройте

график зависимости UКВ(t), определите по графику частоту f входного сигнала и его амплитудное значение.

6.Уменьшите вдвое период запуска АЦП и повторите п.5 задания. Сравните результаты расчетов с аналогичными данными, полученными в п. 5.

21

2.6.Контрольные вопросы

1.В каких практических ситуациях используется обмен данными в режиме прерывания программы процессора? Каковы отличия, преимущества и недостатки рассматриваемого способа программного обмена по сравнению с обменом данными между ЭВМ и ВУ по готовности?

2.Объясните последовательность действий процессора, ПКП и интерфейса ВУ при обмене данными с прерыванием программы.

3.Каким образом процессор определяет устройство, затребовавшее прерывание программы, и как осуществляется переход на программу его обслуживания? Какой номер типа и адрес вектора прерывания имеет устройство, подключенное к входу IR3?

4.Объясните состав и назначение регистров ПКП и возможные операции процессора с регистрами контроллера.

5.Объясните алгоритм работы ПКП в режиме вложенных прерываний.

6.Какова последовательность действий оперативной программы и каким образом эти действия реализуются программно.

7.Объясните алгоритм взаимодействия контроллера прерываний и интерфейса ВУ при выполнении обмена данными.

8.Какова последовательность операций подготовки к обмену данными в режиме прерываний фоновой программы?

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

Библиографический список

1.Вегнер В.А., Крутяков А.Ю., Серегин В.В., Сидоров В.А. Спесивцев А.В. Аппаратура персональных компьютеров и ее программирование. IBM PC/XT/AT и PS/2 – М: Радио и связь, 1995. 224 с.

2.Фролов А.В., Фролов Г.В. Аппаратное обеспечение IBM PC: В 2-х ч. Ч2. М.: "ДИАЛОГ-МИФИ", 1992. 208 с. (Библиотека системного программиста; Т.2).

22