Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ассемблер - Контролер Прерываний

68K
27 февраля 2011 года
katia2011
2 / / 27.02.2011
Здравствуйте!

Изучаю по учебнику про программируемый контролер прерываний (ПКП).Дано задание написать программу на ассемблере, которая устанавливает контроллер в в Режим специального маскирования
В учебнике про програмированние ПКП очень скудно написано
Контролер принимает запросы от вычислительного устройства , сортирует их по приоритету и посылает запрос на прерывание в ЦП вместе с информацией о местоположение программы. Контроллер программируется с помощью команд, которые формируются в регистре АL центрального процессора и передаются в ПКП по команде OUT. Различают два вида команд программирования: команды инициализации ICW, используемые для начальной подготовки контроллера к работе, и рабочие команды OCW. Мне нужна команда OCW3 - режим cпециального маскирования. Применяется для того, чтобы программы обслуживания прерываний могли динамически изменять структуру системных приоритетов в процессе работы. Например, при выполнении какой-либо части подпрограммы обслуживания необходимо запретить запросы более низких уровней, а при выполнении другой части - разрешить их. Трудность реализации таких действий состоит в том, что пока выполняется подпрограмма и соответствующий разряд в регистре РОП не сброшен, контроллер не реагирует на запросы с более низким приоритетом. Для разрешения прерываний со всех уровней (в том числе и с более низких) устанавливается режим специального маскирования (затенения), при котором запрещается только прерывание на данном уровне. Этот режим задается и отменяется командой OCW3.

как я понимаю : выполняется задача1( состоит из нескольких уровней)- поступает запрос(задача2 - приоритет ниже) : при "выключеном режиме специального маскирования" запросы будут отклоняться до момента окончания выполнения задачи1, при "включеном" запрос(задача2 - приоритет ниже) пройдет и будет ожидать окончания выполнения одного из уровней задачи1 -> выполняется задача2 потом продолжится выполнение задачи1
-----

Перед работой контроллер должен быть проинициализирован. Инициализация осуществляется загрузкой управляющих слов (до 4-х байт).
После инициализации контроллер переходит в операционный режим.
Мне нужен Порт 20h - OCW3 слово управления операцией

биты 1..0 чтение регистра:
0 или 1 чтения нет,
2 читать IRR при следующем обращении,
3 читать ISR при следующем обращении;
бит 2 1 указание сформировать слово-состояния (содержит номер наивысшего запроса из поступивших);
биты 4..3 01 признак OCW3;
биты 6..5 специальное маскирование:
0 или 1 отсутствует,
2 отменяет,
3 устанавливает (при этом выравниваются приоритеты запросов);
бит 7 равен нулю.
----------------------------------
;---установка прерывания

PUSH DS ;сохраняем DS

MOV DX,OFFSET ROUT ;смещение для процедуры в DX

MOV AX,SEG ROUT ;сегмент процедуры

MOV DS,AX ;помещаем в DS

MOV AH,20H;функция установки вектора OCW3

MOV AL,60H ;номер вектора

INT 21H ;меняем прерывание

POP DS ;восстанавливаем DS

;---процедура прерывания

ROUT PROC FAR

.

.

IRET

ROUT ENDP
-----------------------------------------------

правильно?
252
28 февраля 2011 года
koderAlex
1.4K / / 07.09.2005
и где тут в вашем коде OCW3 ? )

код команды включающий режим специального маскирования 01101000 (0х68)
7
28 февраля 2011 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: katia2011
INT 21H ;меняем прерывание

:eek:
Насколько я знаю,21–прерывание DOS,а у вас программируемый контроллер.Если ошибаюсь,поправьте

38K
28 февраля 2011 года
alt@zir
29 / / 28.08.2008
Послать на порт 20h будет out 20h, <value>
а ты вызываешь функцию 20h, прерывания 21... не знаю что вообще за функция, но установка вектора это 25h
Вызови функцию 25h вместо 20h, и в принципе будет работать... но это ли ты хотела...
68K
01 марта 2011 года
katia2011
2 / / 27.02.2011
вообщем у меня есть решение , прога работает
есть специалисты которые могут посмотрев код сказать верно или нет ?
-------------
в открытую код не буду выкладывать
260
02 марта 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: LM(AL/M)
как специалисты посмотрят код если ты его выкладывать не собираешься?



Ну как, легко, используя теорию вероятностей. Решение не верно либо его нет с очень большой долей той самой вероятности.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог