8. Контроллер прямого доступа к памяти

Прямой доступ к памяти (Direct Memory Access - DMA) применяется для выполнения операций передачи данных непосредственно между оперативной памятью и устройствами ввода/вывода. Обычно это такие устройства, как НГМД, НМД, стримеры.

При использовании DMA процессор не участвует в операциях ввода/вывода. Контроллер прямого доступа сам формирует все сигналы, необходимые для обмена данными с устройством. Скорость такого непосредственного обмена значительно выше, чем при традиционном обмене с использованием центрального процессора и команд INP, OUT.

Заметим, что контроллеры DMA в компьютерах IBM PC/XT IBM PC/AT различаются, но совместимы снизу вверх. Поэтому вначале мы расскажем о первом типе контроллеров, затем займемся контроллером DMA компьютера IBM PC/AT.

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

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

Номер канала Для чего применяется
0 Обновление содержимого динамической памяти компьютера.
Этот канал имеет наивысший приоритет
1 Не используется
2 Адаптер накопителя на гибком магнитном диске НГМД
3 Адаптер накопителя на магнитном диске НМД.
Этот канал имеет низший приоритет

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

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

Приведем адреса регистров и их форматы для компьютеров 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

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

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

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

Контроллер DMA компьютера IBM PC/AT совместим снизу вверх с контролером IBM PC/XT. Он состоит из двух каскадно включенных микросхем Intel 8237A-5. Второй контроллер обслуживает каналы DMA с номерами 4-7.

Приведем назначение каналов DMA для IBM AT:

Поле Описание
0 Зарезервировано
1 Зарезервировано
2 Адаптер накопителя на гибком магнитном диске (НГМД)
3 Адаптер накопителя на магнитном диске (НМД)
4 Используется для каскадного соединения с первым контроллером DMA
5-7 Зарезервировано

В разных моделях компьютеров назначение каналов DMA могут различаться. Кроме того, современные компьютеры допускают изменение назначения каналов с помощью программы BIOS Setup.

Каналы 0-3 являются 8-разрядными, а каналы 4-7 - 16-разрядными.

В связи с этим используются все 8 бит регистров страниц. Формируется 24-битовый адрес из 16 младших бит адреса, которые записываются в базовые регистры и 8 старших бит адреса, которые записываются в регистры страниц.

Размер страницы составляет 128 Кбайт, поэтому при передаче данных с использованием DMA не должна пересекаться граница 128 Кбайт.

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

Приведем описание регистров каналов DMA для IBM PC/AT.

Регистры страниц

Приведем назначение и адреса регистров страниц контроллера для IBM AT:

Порт Описание
81h Регистр страниц канала 2
82h Регистр страниц канала 3
83h Регистр страниц канала 1
87h Регистр страниц канала 0
89h Регистр страниц канала 6
8Bh Регистр страниц канала 5
8Ah Регистр страниц канала 7
8Fh Регенерация динамической памяти

Для 16-разрядных каналов 4-7 передача данных начинается с границы слова и все адреса относятся к 16-разрядным словам.

Порты 0C0h - 0DFh

Эти регистры содержат базовые адреса и счетчики передаваемых данных каналов 4-7. Их назначение приводится ниже:

Порт Операция Назначение
0C0h Запись: Базовый адрес канала 4
Чтение: Текущий адрес
0C2h Запись: Счетчик канала 4
Чтение: Текущий адрес
0C4h Запись: Базовый адрес канала 5
Чтение: Текущий адрес
0C6h Запись: Счетчик канала 5
Чтение: Текущий адрес
0C8h Запись: Базовый адрес канала 6
Чтение: Текущий адрес
0CAh Запись: Счетчик канала 6
Чтение: Текущий адрес
0CCh Запись: Базовый адрес канала 7
Чтение: Текущий адрес
0CEh Запись: Счетчик канала 7
Чтение: Текущий адрес

Порты 0D0h-0DFh

Это управляющие порты и порты состояния второй микросхемы 8237A-5. По формату и назначению они соответствуют рассмотренным ранее для контроллера DMA компьютеров IBM PC/XT:

Порт Назначение
PRIVATE0D0h Управляющий регистр, регистр состояния
0D2h Регистр запроса
0D4h Регистр маски
0D6h Регистр режима
0D8h Сброс триггера байтов
0DAh Сброс контроллера
0DCh Сброс регистра маски
0DEh Маскирование и размаскирование каналов