Прямой доступ к памяти используется для быстрого обмена данными между внешними устройствами ввода-вывода и памятью без участия центрального процессора. Он реализует прямой доступ по 4 независимым каналам с положительным или отрицательным приращением адреса со скоростью до 2.4 Мбайт/с. Контроллер ПДП позволяет реализовать передачу память-память, имеет широкие возможности программного управления и каскадирования (последнее применено в AT). Каждый канал может выполнять до 64К циклов ПДП и имеет возможность автоматичестой инициализации, т.е. повторения циклов ПДП с теми же параметрами.
    На XT контроллер включает 4 канала, каждый из которых состоит из четыpех 8-разрядных регистров, и собран на микросхеме Intel 8237A. XT и PC использует контроллер ПДП Intel 8237A и поддерживает 8 битовые каналы ПДП и 20 битовое адресное пространство. AT использует 7 каналов прямого доступа к памяти и собрано на двух микросхемах Intel 8237A, которые подключены в режиме каскадирования.
    В AT ПДП реализовано по другому, но с условием совместимости с XT и PC. Кроме обычного контроллера ПДП Intel 8237A там добавлен вторичный контроллер Intel 8237A, который поддерживает 16-разрядные каналы с 4 по 7.
Канал | Назначение в PC и XT |
---|---|
0 | регенерация памяти (высший приоритет) |
1 | свободный |
2 | гибкий диск |
3 | жесткий диск (низший приоритет) |
В AT каналы распределены несколько иначе:
Канал | Назначение в AT | |
---|---|---|
0 | свободный | 8-битовые каналы |
1 | УССД | |
2 | гибкий диск | |
3 | жесткий диск | |
4 | подключен к 1 контроллеру | 16-битовые каналы |
5 | свободный | |
6 | свободный | |
7 | свободный |
CAR - регистр текущего адреса.
CWR - регистр циклов.
BAR - регистр хранения базового адреса.
WCR - регистр хранения базового числа циклов.
MR - регистр режима.
CR - регистр команд.
SR - регистр условий.
RR - регистр запросов.
MASK - регистр маски.
0000h
    0001h
    0002h
    0003h
    0008h
    Чтение:
    000Ah
    000Bh
    000Ch
    000Dh
    000Eh
    000Fh
    0082h
    0083h
    0081h
    0082h
    0083h
    0087h
    0089h
    008Ah
    008Bh
    008Fh
    Хранит текущий адрес ячейки памяти при выполнении цикла
ПДП. После выполнения цикла содержимое этого регистра либо увеличивается,
либо уменьшается на еденицу в зависимости от заданного режима автоинкремента
или автодекремента. Содержимое регистра может быть обновлено по
окончанию операции ПДП, если запрограммирован режим автоинициализации.
    Хранит число слов предназначенных для передачи. При
загрузке этого режима необходимо помнить, что загружаемая константа должна
быть на еденицу больше числа слов, необходимых для передачи. При выполнении
циклов ПДП регистр работает в режиме вычитающего счетчика. Разряд TC
регистра состояния устанавливается в 1 при переходе из нулевого состояния
в состояние FFFFh. Содержимое CWR может быть обновлено по окончанию
операции ПДП в режиме автоинициализации, либо он будет содержать
FFFFh, если автоинициализация не задана.
   Хранит базовое значение адреса ПДП, участвует в
автоинициализации. При начальной загрузке контроллера исходными
параметрами происходит одновременная запись в регистры CAR и BAR. В
процессе выполнения циклов ПДП содержимое BAR не меняется. Прочитать
состояние этого регистра невозможно.
    Хранит базовое значение числа циклов ПДП, участвует в
автоинициализации. При начальной загрузке контроллера исходными параметрами
происходит одновременная запись в регистры CWR и WCR. В процессе выполнения
циклов ПДП содержимое WCR не меняется. Прочитать состояние этого регистра
невозможно.
    Определяет режим работы контроллера. При загрузке этого
регистра в младших разрядах D1-D0 указывается код номера канала. С помощью
разрядов D3-D2 задается один из типов передачи. Эти разряды могут принимать
любые значения при D7D6=11. Разряд D4 определяет режим автозагрузки.
Если D4=1, то при условии автозагрузки CAR и CWR загружаются параметрами
BAR и WCR соответственно. Разряд D5 определяет режим изменения
CAR. Если D5=0, то после каждого цикла происходит увеличение содержимого
CAR, если D5=1 - то уменьшение. Разряды D7-D6 определяют режимы
работы канала - передача по запросу, одиночная передача, блочная передача,
контроллер в режиме каскадирования.
    Определяет основные параметры работы канала. Загрузка
CR осуществляется командой вывода от ЦП. Разряды D0-D1 используются для
задания режимов работы каналов 0 и 1 в режиме память-память. Разряд D2
инициализирует контроллер для выполнения ПДП, разряд D3 определяет режим
выполнения циклов ПДП. Если D3=1, циклы ПДП выполняются с пропуском одного
такта при изменении адреса в пределах младшего байта. Разряд D4
устанавливает режим приоритетов. Если D4=1, запросу обслеженного канала
присваивается наинизший приоритет - это режим вращения приоритета.
Разряд D5 устанавливает режим удлиненного уикла записи. Разрядами
D6-D7 программируются уровни запросов на ПДП и сигналов подтверждения
ПДП.
    Разряды D0-D3 устанавливаются аппаратно после окончания
циклов ПДП или по внешнему сигналу. Эти разряды сбрасываются (устанавливаются
в нуль) после выполнения команды чтения содержимого этого регистра. Разряды
D4-D7 устанавливаются программно при необходимости обслуживания
по соответствующему каналу.
    Контроллер может обслеживать запросы на ПДП, как
аппаратно, так и программнно - по состоянию разрядов (регистров) запросов
RR. Каждый разряд этого регистра соответствует запросу по одному из каналов.
Разряды этого регистра не маскируются и устанавливаются раздельно
программно. Для обработки программного запроса контроллер должен быть
запрограммирован в режиме блочной передачи.
    С помощью этой команды могут быть замаскированы запросы
на ПДП по каждому каналу. Разряды MASK могут быть установлены специальной
командой одновременно или раздельно. Кроме того, если канал не
запрограммирован на режим автозагрузки, то соответствующий разряд регистра
устанавливается в еденицу. Все разряды MASK устанавливаются в нули
с помощью регистра CMR.Порты
    ПДП, канал 0.
    Запись:
        Загрузка младшего/старшего байта
в регистры BAR
и CAR.
    Чтение:
        Чтение младшего/старшего байта
содержимого регистра
CAR.
    ПДП, канал 1.
    Запись:
        Загрузка младшего/старшего байта
в регистры BAR
и CAR.
    Чтение:
        Чтение младшего/старшего байта
содержимого регистра
CAR.
    ПДП, канал 2.
    Запись:
        Загрузка младшего/старшего байта
в регистры BAR
и CAR.
    Чтение:
        Чтение младшего/старшего байта
содержимого регистра
CAR.
    ПДП, канал 3.
    Запись:
        Загрузка младшего/старшего байта
в регистры BAR
и CAR.
    Чтение:
        Чтение младшего/старшего байта
содержимого регистра
CAR.
    Запись:
        Регистр
CR.
D7  1  подтверждение ПДП высокий уровень  0  подтверждение ПДП низкий уровень D6  1  запрос на ПДП низкий уровень  0  запрос на ПДП высокий уровень D5  1  удлиненный цикл записи  0  нормальный цикл записи D4  1  вращение приоритета  0  фиксированный приоритет D3  1  сжатие по времени  0  нормальная работа D2  1  запрещение ПДП  0  разрешение ПДП D1  1  захват канала  0  нет захвата D0  1  режим память-память  0  нормальная работа
        Регистр
SR.
D7 =1 разрешение ПДП канала 3 D6 =1 разрешение ПДП канала 2 D5 =1 разрешение ПДП канала 1 D4 =1 разрешение ПДП канала 0 D3 =1 конец ПДП канала 3 D2 =1 конец ПДП канала 2 D1 =1 конец ПДП канала 1 D0 =1 конец ПДП канала 0
    Запись:
        Регистр
RR.
D7 D6 D5 D4 D3 D2 1 установить запрос 0 сбросить запрос D1 D0 адpес канала 0 0 канал 0 0 1 канал 1 1 0 канал 2 1 1 канал 3
    Запись:
        Регистр
MASK.
D7 D6 D5 D4 D3 D2 1 установить маску 0 сбросить маску D1 D0 адpес канала 0 0 канал 0 0 1 канал 1 1 0 канал 2 1 1 канал 3
    Запись:
        Регистр
MR.
D7 D6 pежим обслуживания 0 0 пеpедача по тpебованию 0 1 одиночная пеpедача 1 0 блочная пеpедача 1 1 каскадиpование D5 1 декpементиpование адpеса 0 инкpементиpование адpеса D4 1 автоинициализация ПДП D3 D2 тип цикла ПДП 0 0 цикл пpовеpки 0 1 цикл записи 1 0 цикл чтения 1 1 запpещенная комбинация D1 D0 Адpес канала 0 0 канал 0 0 1 канал 1 1 0 канал 2 1 1 канал 3
    Запись:
        Любая запись в этот порт
подготавливает порты 0000h-0008h к вводу младшего байта. Сбрасывает
триггер-указатель адреса байта в слове.
    Запись:
        Любая запись в этот порт
сбрасывает контроллер в начальное состояние.
    Чтение:
        Возращается содержимое регистра
временного хранения. Возвращается последний переславшийся байт после
пересылки память-память.
    Запись:
        Регистр CMR.
        Любая запись в этот порт
сбрасывает все разряды регистра MASK и разрешает запросы на ПДП по всем
каналам.
    Запись:
        Регистр
MASK.
D7 D6 D5 D4 D3 =1 установка маски канала 3 D2 =1 установка маски канала 2 D1 =1 установка маски канала 1 D0 =1 установка маски канала 0
    ПДП, канал 2, регистр страницы адреса.
    Запись:
        Загрузка старших 4 разрядов
20-разрядного адреса
    Чтение:
        Чтение старших 4 разрядов
20-разрядного адреса
    ПДП, канал 3, регистр страницы адреса.
    Запись:
        Загрузка старших 4 разрядов
20-разрядного адреса
    Чтение:
        Чтение старших 4 разрядов
20-разрядного адреса
    ПДП, канал 1, регистр страницы адреса.
    Запись:
        Загрузка старших 4 разрядов
20-разрядного адреса
    Чтение:
        Чтение старших 4 разрядов
20-разрядного адреса
    ПДП, канал 2, регистр страницы адреса.
    Запись:
        Загрузка старших 8 разрядов
24-разрядного адреса
    Чтение:
        Чтение старших 8 разрядов
24-разрядного адреса
    ПДП, канал 3, регистр страницы адреса.
    Запись:
        Загрузка старших 8 разрядов
24-разрядного адреса
    Чтение:
        Чтение старших 8 разрядов
24-разрядного адреса
    ПДП, канал 1, регистр страницы адреса.
    Запись:
        Загрузка старших 8 разрядов
24-разрядного адреса
    Чтение:
        Чтение старших 8 разрядов
24-разрядного адреса
    ПДП, канал 0, регистр страницы адреса.
    Запись:
        Загрузка старших 8 разрядов
24-разрядного адреса
    Чтение:
        Чтение старших 8 разрядов
24-разрядного адреса
    ПДП, канал 6, регистр страницы адреса.
    Запись:
        Загрузка старших 8 разрядов
24-разрядного адреса
    Чтение:
        Чтение старших 8 разрядов
24-разрядного адреса
    ПДП, канал 5, регистр страницы адреса.
    Запись:
        Загрузка старших 8 разрядов
24-разрядного адреса
    Чтение:
        Чтение старших 8 разрядов
24-разрядного адреса
    ПДП, канал 7, регистр страницы адреса.
    Запись:
        Загрузка старших 8 разрядов
24-разрядного адреса
    Чтение:
        Чтение старших 8 разрядов
24-разрядного адреса
    Зарезервировано.