Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Аппаратное обеспечение персонального компьютера

© Александр Фролов, Григорий Фролов
Том 33, М.: Диалог-МИФИ, 1997, 304 стр.

[Назад] [Содеожание] [Дальше]

Контроллер прямого доступа IBM PC/XT

Контроллер прямого доступа IBM PC/XT реализован на базе микросхемы Intel 8237A и содержит четыре канала. Эти каналы используются следующим образом:

Номер канала

Для чего применяется

0

Обновление содержимого динамической памяти компьютера.

Этот канал имеет наивысший приоритет

1

Не используется

2

Адаптер накопителя на гибком магнитном диске НГМД

3

Адаптер накопителя на магнитном диске НМД.

Этот канал имеет низший приоритет

Регистры каналов DMA

Каждый канал DMA содержит следующие 16-разрядные регистры:

·          регистр текущего адреса CAR, содержит текущий адрес ячейки памяти при выполнении операции обмена данными с использованием DMA;

·          регистр циклов прямого доступа к памяти CWR, содержит число слов, предназначенных для передачи минус единица. При выполнении обмена данными регистр работает в режиме вычитания;

·          регистр хранения базового адреса BAR, используется для хранения базового адреса памяти, используемого при передачи данных. В процессе работы канала DMA содержимое этого регистра не изменяется;

·          регистр хранения базового числа циклов прямого доступа к памяти WCR. Этот регистр хранит число циклов DMA и его содержимое также не изменяестя;

·          регистр режима MR, определяющий режим работы канала.

Приведем адреса регистров и их форматы для компьютеров IBM PC/XT.

Порты 00h - 07h

Эти регистры содержат базовые адреса и счетчики передаваемых данных каналов 0 - 3. Их назначение приводится в следующей таблице:

Порт

Операция

Назначение

PRIVATE00h

Запись:

Базовый адрес канала 0

Чтение:

Текущий адрес

01h

Запись:

Счетчик канала 0

Чтение:

Текущий адрес

02h

Запись:

Базовый адрес канала 1

Чтение:

Текущий адрес

03h

Запись:

Счетчик канала 1

Чтение:

Текущий адрес

04h

Запись:

Базовый адрес канала 2

Чтение:

Текущий адрес

05h

Запись:

Счетчик канала 2

Чтение:

Текущий адрес

06h

Запись:

Базовый адрес канала 3

Чтение:

Текущий адрес

07h

Запись:

Счетчик канала 3

Чтение:

Текущий адрес

Порт 08h

Этот порт используется при записи в качестве управляющего регистра и при чтении как регистр состояния.

Формат управляющего регистра:

Поле

Описание

0

1 - использование режима память-память;

0 - обычный режим работы

1

Если используется режим память-память, то 1 в этом разряде разрешает захват канала, 0 – запрещает. В обычном режиме работы состояние этого бита безразлично

2

1 - запрет работы DMA;

0 - разрешение работы DMA

3

1 - использование сжатия во времени, если установлен бит обычного режима работы;

0 - обычный режим работы

4

1 – циклическое изменение приоритетов;

0 - фиксированные приоритеты

5

1 - удлиненный цикл записи;

0 - нормальный цикл записи

6

1 - для сигнала запроса на DMA используется низкий уровень DREQ;

0 – для этого сигнала используется высокий уровень

7

1 - для сигнала подтверждения DMA DACK используется высокий уровень;

0 - для этого сигнала используется низкий уровень

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

При чтении из порта 08h программа получает слово состояния контроллера DMA:

Поле

Описание

0-3

Биты 0-3 устанавливаются при достижении счетчиками каналов 0-3 конечных значений;

4-7

Биты 4-7 установлены, если имеется разрешение на DMA, соответственно, каналов 0-3

Порт 09h

Регистр запроса. Предназначен для организации программного (а не аппаратного) запроса на DMA. Для использования программного запроса канал должен быть запрограммирован в режиме передачи блоков данных.

Формат регистра:

Поле

Описание

0-1

Номер канала:

00 – канал 0;

01 – канал 1

10 – канал 2;

11 – канал 3

2

0 – установить запрос;

1 – сбросить запрос

3-7

Не используются

Порт 0Ah

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

Поле

Описание

0-1

Номер канала:

00 – канал 0;

01 – канал 1

10 – канал 2;

11 – канал 3

2

0 - установить маску;

1 - сбросить маску

3-7

Не используются

Порт 0Bh

Регистр режима. Служит для определения режимов работы каналов контроллера DMA:

Поле

Описание

0-1

Номер канала:

00 – канал 0;

01 – канал 1

10 – канал 2;

11 – канал 3

2-3

Тип цикла DMA:

00 - цикл проверки;

01 - цикл записи;

10 - цикл чтения;

11 - запрещенная комбинация

4

1 - режим автоинициализации

5

Приращение адреса:

0 - инкрементирование;

1 – декрементирование

6-7

Режим обслуживания:

00 - передача по требованию;

01 - одиночная передача;

10 – передача по блокам;

11 - каскадироание

Порт 0Ch

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

Порт 0Dh

Запись в этот порт вызывает сброс контроллера. Для дальнейшего использования контроллер должен быть заново проинициализирован.

Порт 0Eh

Сброс регистра маски. После записи в этот регистр любого значения разрешается работа всех четырех каналов прямого доступа.

Порт 0Fh

Маскирование или размаскирование каналов. С помощью этого порта можно выполнить одновременное маскирование или размаскирование нескольких каналов:

Поле

Описание

0

1 - маскирование канала 0;

0 - разрешение канала 0

1

1 - маскирование канала 1;

0 - разрешение канала 1

2

1 - маскирование канала 2;

0 - разрешение канала 2

3

1 - маскирование канала 3;

0 - разрешение канала 3

4-7

Не используются

Порты 81h-8Fh

Это порты регистров страниц.

Для работы с памятью контроллер прямого доступа IBM PC/XT использует 20-разрядные физические адреса. Шестнадцать младших битов адреса необходимо записать в регистр базового адреса канала. Четыре старших бита (биты 16-19) должны быть записаны в соответствующие порты регистров страниц.

При инициализации регистров базового адреса и регистра страниц необходимо следить за тем, чтобы в процессе передачи данных не происходил переход за границу 64 Кбайт.

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

Порт

Описание

81h

Регистр страниц канала 2

82h

Регистр страниц канала 3

83h

Регистр страниц канала 1

Инициализация канала DMA

Для инициализации канала программа должна выполнить следующие шаги:

·          сбросить триггер байтов командой записи в регистр 0Ch;

·          задать режим работы канала, выполнив запись по адресу 0Bh в регистр режима MR;

·          записать младшие 16 бит 20-битового адреса области памяти, которая будет использована для передачи данных, в регистр базового адреса. Адрес порта зависит от номера канала: канал 0 использует адрес 00h, канал 1 - 02h, канал 2 - 04h, канал 3 - 06h;

·          записать номер страницы (старшие 4 бита 20-битового адреса) в регистр страниц 81h;

·          загрузить регистр циклов прямого доступа к памяти CWR значением, на 1 меньшим требуемого количества передаваемых байт. Адреса соответствующих портов для каналов 0-3, равны, соответственно, 01h, 03h, 05h и 07h;

·          разрешить работу канала, выполнив запись в регистр маски каналов по адресу 0Ah.

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

[Назад] [Содеожание] [Дальше]