Аппаратное обеспечение IBM PC© Александр Фролов, Григорий ФроловТом 2, книга 1, М.: Диалог-МИФИ, 1992. 9.1. Контроллер прямого доступа для IBM PC/XTКонтроллер прямого доступа для IBM PC/XT
реализован на базе микросхемы Intel 8237A и содержит
четыре канала. Эти каналы используются следующим
образом:
9.1.1. Регистры каналов DMAКаждый канал содержит 16-разрядные регистры:
Приведем адреса регистров и их форматы для компьютеров IBM PC/XT. Порты 00h - 07hЭти регистры содержат базовые адреса и
счетчики передаваемых данных каналов 0 - 3. Их
назначение приводится в следующей таблице:
Порт 08h.Этот порт используется при записи в качестве управляющего регистра и при чтении как регистр состояния. Формат управляющего регистра:
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T-¬
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
LT+T+T+T+T+T+T+T-
¦ ¦ ¦ ¦ ¦ ¦ ¦ L= 1 - использование режима память-память;
¦ ¦ ¦ ¦ ¦ ¦ ¦ 0 - обычный режим работы;
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦ ¦ L=== если используется режим память-память,
¦ ¦ ¦ ¦ ¦ ¦ то 1 в этом разряде разрешает захват
¦ ¦ ¦ ¦ ¦ ¦ канала, 0 - запрещает;
¦ ¦ ¦ ¦ ¦ ¦ в обычном режиме работы состояние этого
¦ ¦ ¦ ¦ ¦ ¦ бита безразлично;
¦ ¦ ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦ L===== 1 - запрет работы DMA;
¦ ¦ ¦ ¦ ¦ 0 - разрешение работы DMA;
¦ ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ L======= 1 - использование сжатия во времени, если
¦ ¦ ¦ ¦ установлен бит обычного режима работы;
¦ ¦ ¦ ¦ 0 - обычный режим работы;
¦ ¦ ¦ ¦
¦ ¦ ¦ L========= 1 - вращение приоритетов;
¦ ¦ ¦ 0 - фиксированные приоритеты;
¦ ¦ ¦
¦ ¦ L=========== 1 - удлиненный цикл записи;
¦ ¦ 0 - нормальный цикл записи;
¦ ¦
¦ L============= 1 - используется низкий уровень для
¦ сигнала запроса на DMA DREQ;
¦ 0 - используется высокий уровень;
¦
L=============== 1 - используется высокий уровень для
сигнала подтверждения DMA DACK;
0 - используется низкий уровень;
Обычно этот регистр инициализируется BIOS в процессе тестирования системы и впоследствии изменять режим работы контроллера DMA не требуется. Ошибки при инициализации этого порта могут привести к "зависанию" системы. При чтении из порта 08h программа получает слово состояния контроллера DMA:
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T-¬
¦ ¦ ¦
LT+-+-+T+T+-+-+T-
L==T==- L=====¦= биты 0-3 устанавливаются в 1 при
¦ достижении счетчиками каналов 0-3
¦ конечных значений;
¦
L============ биты 4-7 установлены в 1, если
имеется разрешение на DMA
соответственно, каналов 0-3.
Порт 09h.Регистр запроса. Предназначен для организации программного (а не аппаратного) запроса на DMA. Для использования программного запроса канал должен быть запрограммирован в режиме блочной передачи. Формат регистра:
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T-¬
¦ ¦ ¦ ¦
LT+-+-+-+T+T+T+T-
L===T===- ¦ L=¦= номер используемого канала:
¦ ¦ 00 - канал 0;
¦ ¦ 01 - канал 1;
¦ ¦ 10 - канал 2;
¦ ¦ 11 - канал 3;
¦ ¦
¦ L===== 0 - установить запрос;
¦ 1 - сбросить запрос;
¦
L=========== не используются.
Порт 0AhРегистр маски. Используется для маскирования запросов на прямой доступ для отдельных каналов:
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T-¬
¦ ¦ ¦ ¦
LT+-+-+-+T+T+T+T-
L===T===- ¦ L=¦= номер канала:
¦ ¦ 00 - канал 0;
¦ ¦ 01 - канал 1;
¦ ¦ 10 - канал 2;
¦ ¦ 11 - канал 3;
¦ ¦
¦ L===== 0 - установить маску;
¦ 1 - сбросить маску;
¦
L=========== не используются.
Порт 0BhРегистр режима. Служит для определения режимов работы каналов контроллера DMA:
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T-¬
¦ ¦ ¦ ¦ ¦ ¦
LT+T+T+T+T+T+T+T-
L=¦ ¦ ¦ L=¦ L=¦= номер канала:
¦ ¦ ¦ ¦ 00 - канал 0;
¦ ¦ ¦ ¦ 01 - канал 1;
¦ ¦ ¦ ¦ 10 - канал 2;
¦ ¦ ¦ ¦ 11 - канал 3;
¦ ¦ ¦ ¦
¦ ¦ ¦ L===== тип цикла DMA:
¦ ¦ ¦ 00 - цикл проверки;
¦ ¦ ¦ 01 - цикл записи;
¦ ¦ ¦ 10 - цикл чтения;
¦ ¦ ¦ 11 - запрещенная комбинация;
¦ ¦ ¦
¦ ¦ L========= 1 - режим автоинициализации;
¦ ¦
¦ L=========== приращение адреса:
¦ 0 - инкрементирование;
¦ 1 - декрементирование;
¦
L============= режим обслуживания:
00 - передача по требованию;
01 - одиночная передача;
10 - блочная передача;
11 - каскадироание.
Порт 0ChСброс триггера байтов. Для загрузки внутренних 16-разрядных регистров контроллера используется последовательный вывод младшего, затем старшего байтов слова. После сброса триггера байтов можно начинать загрузку 16-разрядных регистров. Порт 0DhЗапись в этот порт вызывает сброс контроллера. Для дальнейшего использования контроллер должен быть заново проинициализирован. Порт 0EhСброс регистра маски. После записи в этот регистр любого значения разрешается работа всех четырех каналов прямого доступа. Порт 0FhМаскирование/размаскирование каналов. С помощью этого порта можно выполнить одновременное маскирование или размаскирование нескольких каналов:
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T-¬
¦ ¦ ¦ ¦ ¦ ¦
LT+-+-+T+T+T+T+T-
L==T==- ¦ ¦ ¦ L= 1 - маскирование канала 0;
¦ ¦ ¦ ¦ 0 - разрешение канала 0;
¦ ¦ ¦ ¦
¦ ¦ ¦ L=== 1 - маскирование канала 1;
¦ ¦ ¦ 0 - разрешение канала 1;
¦ ¦ ¦
¦ ¦ L===== 1 - маскирование канала 2;
¦ ¦ 0 - разрешение канала 2;
¦ ¦
¦ L======= 1 - маскирование канала 3;
¦ 0 - разрешение канала 3;
¦
L============ не используются.
Порты 81h-8FhЭто порты регистров страниц. Для работы с памятью контроллер прямого доступа использует 20-разрядные физические адреса. Шестнадцать младших битов адреса необходимо записать в регистр базового адреса канала. Старшие четыре бита - биты 16-19 - должны быть записаны в соответствующие порты регистров страниц. При инициализации регистров базового адреса и регистра страниц необходимо следить за тем, чтобы в процессе передачи данных не происходил переход за границу 64 килобайта. Для адресации регистров страниц можно
использовать следующие порты:
9.1.2. Инициализация канала DMAДля инициализации канала программа должна выполнить следующие шаги:
Сразу после разрешения канал начинает передачу данных. После окончания передачи данных устройство обычно вырабатывает прерывание, которое служит признаком окончания передачи данных. |

