Аппаратное обеспечение персонального компьютера© Александр Фролов, Григорий ФроловТом 33, М.: Диалог-МИФИ, 1997, 304 стр. |
Прямой доступ к памяти (Direct Memory Access - DMA) применяется для выполнения операций передачи данных непосредственно между оперативной памятью и устройствами ввода/вывода. Обычно это такие устройства, как НГМД, НМД, стримеры.
При использовании DMA процессор не участвует в операциях ввода/вывода. Контроллер прямого доступа сам формирует все сигналы, необходимые для обмена данными с устройством. Скорость такого непосредственного обмена значительно выше, чем при традиционном обмене с использованием центрального процессора и команд INP, OUT.
Заметим, что контроллеры DMA в компьютерах IBM PC/XT IBM PC/AT различаются, но совместимы снизу вверх. Поэтому вначале мы расскажем о первом типе контроллеров, затем займемся контроллером DMA компьютера IBM PC/AT.
Контроллер прямого доступа IBM PC/XT реализован на базе микросхемы Intel 8237A и содержит четыре канала. Эти каналы используются следующим образом:
Номер канала |
Для чего применяется |
0 |
Обновление содержимого динамической памяти компьютера. Этот канал имеет наивысший приоритет |
1 |
Не используется |
2 |
Адаптер накопителя на гибком магнитном диске НГМД |
3 |
Адаптер накопителя на магнитном диске НМД. Этот канал имеет низший приоритет |
Каждый канал DMA содержит следующие 16-разрядные регистры:
· регистр текущего адреса CAR, содержит текущий адрес ячейки памяти при выполнении операции обмена данными с использованием DMA;
· регистр циклов прямого доступа к памяти CWR, содержит число слов, предназначенных для передачи минус единица. При выполнении обмена данными регистр работает в режиме вычитания;
· регистр хранения базового адреса BAR, используется для хранения базового адреса памяти, используемого при передачи данных. В процессе работы канала DMA содержимое этого регистра не изменяется;
· регистр хранения базового числа циклов прямого доступа к памяти WCR. Этот регистр хранит число циклов DMA и его содержимое также не изменяестя;
· регистр режима MR, определяющий режим работы канала.
Приведем адреса регистров и их форматы для компьютеров IBM PC/XT.
Эти регистры содержат базовые адреса и счетчики передаваемых данных каналов 0 - 3. Их назначение приводится в следующей таблице:
Порт |
Операция |
Назначение |
PRIVATE00h |
Запись: |
Базовый адрес канала 0 |
Чтение: |
Текущий адрес |
|
01h |
Запись: |
Счетчик канала 0 |
Чтение: |
Текущий адрес |
|
02h |
Запись: |
Базовый адрес канала 1 |
Чтение: |
Текущий адрес |
|
03h |
Запись: |
Счетчик канала 1 |
Чтение: |
Текущий адрес |
|
04h |
Запись: |
Базовый адрес канала 2 |
Чтение: |
Текущий адрес |
|
05h |
Запись: |
Счетчик канала 2 |
Чтение: |
Текущий адрес |
|
06h |
Запись: |
Базовый адрес канала 3 |
Чтение: |
Текущий адрес |
|
07h |
Запись: |
Счетчик канала 3 |
Чтение: |
Текущий адрес |
Этот порт используется при записи в качестве управляющего регистра и при чтении как регистр состояния.
Формат управляющего регистра:
Поле |
Описание |
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 |
Регистр запроса. Предназначен для организации программного (а не аппаратного) запроса на DMA. Для использования программного запроса канал должен быть запрограммирован в режиме передачи блоков данных.
Формат регистра:
Поле |
Описание |
0-1 |
Номер канала: 00 – канал 0; 01 – канал 1 10 – канал 2; 11 – канал 3 |
2 |
0 – установить запрос; 1 – сбросить запрос |
3-7 |
Не используются |
Регистр маски. Применяется для маскирования запросов на прямой доступ для отдельных каналов:
Поле |
Описание |
0-1 |
Номер канала: 00 – канал 0; 01 – канал 1 10 – канал 2; 11 – канал 3 |
2 |
0 - установить маску; 1 - сбросить маску |
3-7 |
Не используются |
Регистр режима. Служит для определения режимов работы каналов контроллера 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 - каскадироание |
Сброс триггера байтов. Для загрузки внутренних 16-разрядных регистров контроллера используется последовательный вывод младшего, затем старшего байтов слова. После сброса триггера байтов можно начинать загрузку 16-разрядных регистров.
Запись в этот порт вызывает сброс контроллера. Для дальнейшего использования контроллер должен быть заново проинициализирован.
Сброс регистра маски. После записи в этот регистр любого значения разрешается работа всех четырех каналов прямого доступа.
Маскирование или размаскирование каналов. С помощью этого порта можно выполнить одновременное маскирование или размаскирование нескольких каналов:
Поле |
Описание |
0 |
1 - маскирование канала 0; 0 - разрешение канала 0 |
1 |
1 - маскирование канала 1; 0 - разрешение канала 1 |
2 |
1 - маскирование канала 2; 0 - разрешение канала 2 |
3 |
1 - маскирование канала 3; 0 - разрешение канала 3 |
4-7 |
Не используются |
Это порты регистров страниц.
Для работы с памятью контроллер прямого доступа IBM PC/XT использует 20-разрядные физические адреса. Шестнадцать младших битов адреса необходимо записать в регистр базового адреса канала. Четыре старших бита (биты 16-19) должны быть записаны в соответствующие порты регистров страниц.
При инициализации регистров базового адреса и регистра страниц необходимо следить за тем, чтобы в процессе передачи данных не происходил переход за границу 64 Кбайт.
Для адресации регистров страниц можно использовать следующие порты:
Порт |
Описание |
81h |
Регистр страниц канала 2 |
82h |
Регистр страниц канала 3 |
83h |
Регистр страниц канала 1 |
Для инициализации канала программа должна выполнить следующие шаги:
· сбросить триггер байтов командой записи в регистр 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.
Сразу после разрешения канал начинает передачу данных. После окончания передачи устройство обычно вырабатывает прерывание, которое служит признаком окончания операции ввода или вывода данных.
Контроллер 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 для IBM PC/AT.
Приведем назначение и адреса регистров страниц контроллера для IBM AT:
Порт |
Описание |
81h |
Регистр страниц канала 2 |
82h |
Регистр страниц канала 3 |
83h |
Регистр страниц канала 1 |
87h |
Регистр страниц канала 0 |
89h |
Регистр страниц канала 6 |
8Bh |
Регистр страниц канала 5 |
8Ah |
Регистр страниц канала 7 |
8Fh |
Регенерация динамической памяти |
Для 16-разрядных каналов 4-7 передача данных начинается с границы слова и все адреса относятся к 16-разрядным словам.
Эти регистры содержат базовые адреса и счетчики передаваемых данных каналов 4-7. Их назначение приводится ниже:
Порт |
Операция |
Назначение |
0C0h |
Запись: |
Базовый адрес канала 4 |
Чтение: |
Текущий адрес |
|
0C2h |
Запись: |
Счетчик канала 4 |
Чтение: |
Текущий адрес |
|
0C4h |
Запись: |
Базовый адрес канала 5 |
Чтение: |
Текущий адрес |
|
0C6h |
Запись: |
Счетчик канала 5 |
Чтение: |
Текущий адрес |
|
0C8h |
Запись: |
Базовый адрес канала 6 |
Чтение: |
Текущий адрес |
|
0CAh |
Запись: |
Счетчик канала 6 |
Чтение: |
Текущий адрес |
|
0CCh |
Запись: |
Базовый адрес канала 7 |
Чтение: |
Текущий адрес |
|
0CEh |
Запись: |
Счетчик канала 7 |
Чтение: |
Текущий адрес |
Это управляющие порты и порты состояния второй микросхемы 8237A-5. По формату и назначению они соответствуют рассмотренным ранее для контроллера DMA компьютеров IBM PC/XT:
Порт |
Назначение |
PRIVATE0D0h |
Управляющий регистр, регистр состояния |
0D2h |
Регистр запроса |
0D4h |
Регистр маски |
0D6h |
Регистр режима |
0D8h |
Сброс триггера байтов |
0DAh |
Сброс контроллера |
0DCh |
Сброс регистра маски |
0DEh |
Маскирование и размаскирование каналов |