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

Курсач2 / 08ПЗ

.doc
Скачиваний:
23
Добавлен:
02.06.2015
Размер:
133.63 Кб
Скачать

3 Разработка программных модулей инициализации, управления и контроля

3.1 Анализ методов построения

алгоритмов инициализации и управления.

Алгоритм программирования модулей зависит от типа используемой программируемой СБИС и режима обмена между СБИС и процессором компьютера через системную шину ISA.

Инициализация аппаратных модулей проводится в несколько этапов. На первом этапе выполняется инициализация СБИС модуля. На последующих этапах производится инициализация системы прерываний или ПДП, в зависимости от используемых режимов обмена данными между модулем и процессором системы.

В общем виде инициализация СБИС и модуля в целом заключается в выполнении следующей последовательности действий:

1. Формирование сброса СБИС. Сброс СБИС в исходное состояние производится двумя способами: аппаратным или программным. Необходимо помнить, что аппаратный сброс на системной шине формируется только при включении питания и в процессе работы сигнал «сброс» находится в пассивном состоянии. Программный способ более универсален и позволяет инициализировать СБИС в процессе работы модуля. Для формирования программного сброса требуется в СБИС по адресу регистра режима или сброса подать соответствующий двоичный код. Значение кода сброса определено спецификацией СБИС. Значение адреса регистра режима или сброса определяется разработчиком модуля, то есть в процессе программирования значение адреса фиксировано.

2. Блокирование системы прерываний. Блокирование прерываний необходимо для модулей, которые работают в режиме прерываний. Прерывания должны быть запрещены на все время инициализации СБИС и модуля в целом. Блокирование прерываний производится одним из двух способов. Первый способ заключается в подаче команды «запретить прерывания». В результате выполнения этой команды вход процессора «прерывание» будет аппаратно закрыт. Второй способ заключается в программной подаче соответствующей маски (двоичного кода = 00 или FFh) по адресу регистра маски запросов прерываний контроллера прерываний. В результате выполнения входы «запрос прерывания» контроллера прерываний будут аппаратно закрыты. На практике в основном используют первый способ, так как он более простой. Необходимо добавить, что блокирование системы прерываний рекомендуется проводить при инициализации всех модулей, независимо от режима обмена.

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

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

5. Разблокирование системы прерываний. Разблокирование системы прерываний производится в зависимости от использованного способа блокирования системы прерываний (п.2). Первый способ заключается в подаче команды «разрешить прерывания». В результате выполнения этой команды вход процессора «прерывание» будет аппаратно открыт. Второй способ заключается в программной подаче соответствующей маски (двоичного кода) по адресу регистра маски запросов прерываний контроллера прерываний. В результате выполнения соответствующие входы «запрос прерывания» контроллера прерываний будут аппаратно открыты.

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

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

2) Определение места в таблице прерываний. В таблице прерываний определяется место используемого вектора. Место в таблице прерываний фиксировано и зависит от используемого вектора прерываний (номера запроса прерывания).

3) Заполнение таблицы прерываний. Старое значение таблицы прерываний запоминается в основной программе. Значение физического адреса (сегмент, смещение) подпрограммы заносится в таблицу прерываний по определенному месту. По окончанию работы основной программы требуется старое значение таблицы прерываний вернуть на свое место.

4) Программирование контроллера прерываний. В регистр маски контроллера прерываний занести двоичный код, который открывает вход «запрос прерывания» используемого запроса прерывания. Адрес регистра маски контроллера прерывания фиксирован и определен архитектурой компьютера.

3.2 Разработка алгоритмов инициализации и управления.

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

- вывод данных при обращении по адресу 310h

- выполнение подпрограммы обработки соответствующего прерывания (9).

При инициализации устройства необходимо:

- сохранить старый вектор прерываний и старую маску контроллера прерываний;

- установить новый вектор прерываний, то есть поместить в память по адресу, соответствующему нашему прерыванию адрес нашей функции обработки прерывания и установить новую маску прерываний, то есть разрешить используемое прерывание в котроллере прерываний;

3.3 Разработка программного модуля.

Управление устройством производится с помощью записи в соответствующие порты вывода команд и управляющих сигналов. Состояния выводов соответствующих портов и используемые при работе команды приведены в таблице 4.7. Данные по цифрам берутся из таблицы.

Таблица 4.7 - Управление устройством

Команда

310h

DAT0

DAT1

DAT2

DAT3

DAT4

DAT5

DAT6

DAT7

7

6

5

4

3

2

1

0

Вывод двух цифр 0 и 1 соответственно

1

0

1

0

0

0

0

1

Вывод двух цифр 3 и 7 соответственно

0

0

1

1

0

1

1

1

Сброс контроллера (аппаратный)

Х

Х

X

X

X

X

X

Х

Примечание. Х – безразличное состояние;

Работа программы управления основана на записи и чтении данных (байтов) из порта 310h. Чтение и запись данных в соответствующие порты ввода-вывода осуществляется с помощью процедуры out (выдача байта в порт) и функции in, возвращающей значение прочитанного из соответствующего порта байта.

Программа написана на языке Borland C++ 3.1 с использованием вставок на языке ассемблера и предназначена для работы с операционной системой MS-DOS версии 6.22 и выше.

Текст программы приведен в приложении А

3.4 Выводы к главе 3.

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

35

Соседние файлы в папке Курсач2