Управление прерываниями в микропроцессоре.
Прерывание вызывается появлением на входе INT МП активного сигнала. Он приходит асинхронно по отношению к команде, т.е. в этот момент процессор может выполнять команду и в конце выполнения команды процессор опрашивает входной сигнал INT и если выполняется условие: INT * INTЕ = 1, то процессор завершает выполнение текущей команды и переходит в особый цикл М1 во время которого он принимает команду вызова подпрограммы обслуживания прерываний.
Цикл М1 называется особым т.к. 1) Источником команды вызова является внешнее устройство, а не память, как в обычном цикле М1. 2) При приеме каждого байта команды вызова подпрограммы обслуживания прерывания программный счетчик не инкрементирует своего содержимого.
Рассмотрим пример.
0806 32
0807 20 STA 0920h
0808 09
0809 47
Пусть во время выполнения указанной выше команды STA 0920h (назовем ее текущей) на вход INT МП пришел сигнал запроса прерывания, т.е. INT=1. МП завершает выполнение текущей команды, после чего входит в особый цикл М1, во время которого принимает команду вызова подпрограммы обслуживания прерывания (пусть INT * INTЕ = 1). На момент входа в цикл М1 программный счетчик содержит адрес следующей команды 0809h. В данном случае это адрес (АТВ, см. описание команды CALL) команды, которой должно быть передано управление после обработки прерывания. При приеме каждого байта команды вызова изменение содержимого программного счетчика блокируется, т.к. в противном случае после обработки прерывания управление будет передано совсем другой команде (как будет показано ниже, команде с адресом либо 080Ah (способ А), либо 080Dh (способ Б)).
В команде вызова подпрограммы обслуживания прерывания должна быть указана информация о начальном адресе подпрограммы обслуживания прерывания от ВУ, запросившего прерывание.
Есть два способа формирования начального адреса подпрограммы обслуживания прерывания:
А) Внешнее устройство, имеющее номер nnn, формирует код команды RST N (где N=nnn), т.е. ВУ само формирует код вызова подпрограммы. Формат команды RST N:11nnn111 .
Это осуществляется с помощью включения в состав ВУ регистра. Пример такого регистра для N=5 приведен на рис. 3.
Пусть N=5, тогда код вызова подпрограммы RST N: 11101111. Этот код формируется в регистре и по сигналу INTA от МП поступает по ШД в МП. На основании этого кода формируется начальный адрес подпрограммы обслуживания прерываний от ВУ № 5.
В начальной области адресного пространства имеется 8 зон, по 8 байтов в каждой зоне. Каждая зона соответствует ВУ с определенным номером. Каждая зона содержит либо всю подпрограмму обслуживания прерывания (если она содержит не больше 8-ми байтов) или команду JMP ADDR (она занимает 3 байта) ADDR – символическое имя начального адреса подпрограммы обслуживания прерывания.
РС = 00101000 так РС указывает на начальный адрес зоны, соответствующей ВУ № 5.
0…7 – «0»; 8…0F «1»; 10…17 «2»; 18…1F «3»; 20…27 «4»; 28…2F «5».
Рис. 3 Регистр ВУ
Б) Предполагает использование контроллера прерываний.
Он определяет ВУ с максимальным приоритетом (из всех ВУ, запросивших прерывание) и формирует команду CALL AD_мах – вызов подпрограммы, где AD_мах – начальный адрес подпрограммы обслуживания прерывания от источника с максимальным приоритетом.
Напомним, что в особом цикле М1 процессор принимает три байта этой команды, стробируя прием каждого байта сигналом INTA. В течение трех м.ц. байт состояния будет равен 23 Н.
ОФОРМЛЕНИЕ ОТЧЕТА
При подготовке отчета требуется проанализировать механизм обработки и передачи информации при выполнении заданной последовательности команд. Перед началом выполнении первой команды устанавливается следующее состояние регистров процессора:
A=80 F=43 В=08С=33 D=08 E=32 H=08 L=20 SP=08DO PC=0806
Так как PC = 0806, то программа размещается в области ОЗУ с адреса 0806.
Kpoмe состояния регистров перед началом работы программы задается состояние следующих ячеек ОЗУ:
(0820)=38 (0821)=00 (08D0)=30 (08Dl)=40
Отчет по лабораторной работе должен содержать следующие разделы:
1. Формулировка задания. Здесь необходимо записать фрагмент программы на языке ассемблера МП К580 в том виде, в котором он представлен в задании.
2. Фрагмент программы после дизассемблирования, т. е. машинный код фрагмента.
С этой целью необходимо, пользуясь табл.2, определить 16-ричные коды заданной пpoгpaммы и ее размещение в памяти. Так, для приведенной ниже в качестве примера программы такая кодировка имеет вид:
3. Таблица, в которой необходимо представить процесс изменения содержимого регистров и ячеек памяти, задействованных во фрагменте, при выполнении команд фрагмента. Таблица должна быть выполнена в следующем формате:
Регистры
(Ячейки памяти)
| Исходное
состояние
| После выполнения команд
| SUB M
| ANI 0F0H
| STAX B
| CNZ 38H
| PC
|
|
|
| 080А
|
| A
|
|
|
|
|
| F
|
|
|
|
|
| H
|
|
|
|
|
| L
|
|
|
|
|
| B
|
|
|
|
|
| C
|
|
|
|
|
| (0820)
|
|
|
|
|
| (0833)
| Х
|
|
|
|
| (08CF)
| X
|
|
|
|
| (08CE)
| X
|
|
|
| 0D
| SP
| 08D0
|
|
|
| 08СЕ
| Примечания:
А. Все константы (адреса) указываются в 16-ричном формате, т. е. байт данных записывается в виде двух цифр/букв, адрес/двухбайтовая константа – в виде четырех цифр/букв, при этом, если для записи констант (адресов) используется меньше цифр/букв, необходимо слева дописать нужное количество нулей.
Б. Во втором столбце таблицы указываются лишь те регистры/ячейки памяти, которые задействованы во фрагменте.
В. Символ “X” означает неопределенное содержимое регистра.
Г. Пустая клетка означает, что содержимое регистра не изменилось.
Поясним, как изменяется состояние регистров и памяти после выполнения каждой команды. Команда SUB вычитает из содержимого аккумулятора содержимое ячейки, адресуемой регистровой парой H-L, так как в паре H-L находится адрес 0820, то будет вычитаться код 38. При вычитании он инвертируется, увеличивается на 1 и складывается с кодом 80. Результат 48 фиксируется в аккумуляторе, а признаки результата – в регистре F (F=06, признак переноса Y при вычитании устанавливается инверсно).
После выполнения команды ANI 0F0H устанавливается А= 40, F= 02. Затем команда STAX В засылает результат 40 по адресу, находящемуся в регистровой парс В-С, т.е. в ячейку 0833. Команда CNZ 38Н является командой условного вызова подпрограммы, т. е. вызов подпрограммы происходит, если Z=0. В данном примере условие выполняется, поэтому в команде выполняются следующие действия:
1) содержимое счетчика команд (адрес команды, следующей за командой CNZ) записывается в стеке;
2) в РС загружается адрес перехода 38.
Таким образом, управление передается первой команде подпрограммы, после выполнения подпрограммы управление будет передано команде, следующей за командой CNZ.
4. Циклограммы (временные диаграммы) выполнения отдельных команд фрагмента.
После оценки состояния регистров и памяти можно перейти к построению временной диаграммы выполнения программы. Для рассмотренного случая она приведена на рис. 4. Передача байта состояния по шине данных для упрощения диаграммы не показана, однако в отчете она должна присутствовать. Количество тактов в каждом цикле команд указано в 5 графе табл.2. Передачи информации при выполнении команд SUB, ANI, STAX проанализируйте самостоятельно. Механизм действия команды CNZ требует дополнительного пояснения.
В первом цикле процессор получает код команды 04 (рис.4), во 2 и 3 циклах получает адрес перехода 0038 и записывает его в двухбайтовый регистр временного хранения. Если условие NZ (Z = 0) не соблюдено, 4 и 5 циклы не выполняются и процессор выбирает из памяти следующую за CNZ команду.
Рис.3 Временные диаграммы
Если условие NZ выполнено, в 4 и 5 циклах содержимое PC спасается в стеке и затем в РС из регистра временного хранения загружается адрес перехода 0038.
Аналогично сокращается на 2 цикла длительность команд типа С&& и R&& при невыполнении условий &&.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. В чем заключаются отличия особого цикла M1, выполняемого при обработке прерываний, от стандартного?
2. Почему в особом цикле M1 не инкрементируется программный счетчик?
3. Каково назначение и разрядность пpoграммно-управляемых регистров процессора?
4. Задано следующее исходное состояние регистров и памяти (в 16-ричном коде)
А=80F=43 B=80 C=33 D=80 Е=32 H=80 L=20 SP=87D0 PC=8006 (8020)=38 (8021)=00 (87D0)=30 (87D1)=40
Нарисуйте и поясните временные диаграммы выполнения одной из следующих команд:
CNZ 102H XTHL LHLD 8020H INK M STA 8030H IN 20H POP В
5. В аккумуляторе А находится код ЗЕ, в регистре признаков F – код 02. Каково будет состояние А и F после выполнения одной из следующих команд:
AD1 3FH SUI 40H ANI 7 XRI 5EH ORI 25H CPI 77H RAL RRC
6. Предложите несколько вариантов взаимного обмена содержимого регистровых пар В-С и D-E. Оцените быстродействие (в тактах) предложенных вариантов.
7. Составьте программу для определения паритета находящегося в аккумуляторе кода.
8. Предложите 4 варианта записи двухбайтового числаиз ячеек 8030, 8031 в ячейки 8050, 8051 соответственно. Оцените быстродействие (в тактах) предложенных вариантов.
Литература
1. Хилбурн Дж., Джулич П. Микро-ЭВМ и микропроцессоры: технические средства, программное обеспечение, применения. М.. Мир, 1979, 463 с.
2. БалашовЕ.П., Пузанков Д.В. Микропроцессоры и микропроцессорные системы. М., Радио и связь, 1981. 328с.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|