Аппаратное обеспечение 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Для инициализации канала программа должна выполнить следующие шаги:
Сразу после разрешения канал начинает передачу данных. После окончания передачи данных устройство обычно вырабатывает прерывание, которое служит признаком окончания передачи данных. |