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


![[Назад]](../../prev.gif)
![[Содеожание]](../../sod.gif)
![[Дальше]](../../next.gif)