8 Контроллер прямого доступа к памятиПрямой доступ к памяти (Direct Memory Access - DMA) применяется для выполнения операций передачи данных непосредственно между оперативной памятью и устройствами ввода/вывода. Обычно это такие устройства, как НГМД, НМД, стримеры. При использовании DMA процессор не участвует в операциях ввода/вывода. Контроллер прямого доступа сам формирует все сигналы, необходимые для обмена данными с устройством. Скорость такого непосредственного обмена значительно выше, чем при традиционном обмене с использованием центрального процессора и команд INP, OUT. Заметим, что контроллеры DMA в компьютерах IBM PC/XT IBM PC/AT различаются, но совместимы снизу вверх. Поэтому вначале мы расскажем о первом типе контроллеров, затем займемся контроллером DMA компьютера IBM PC/AT. Контроллер прямого доступа IBM PC/XTКонтроллер прямого доступа IBM PC/XT реализован на базе микросхемы Intel 8237A и содержит четыре канала. Эти каналы используются следующим образом:
Регистры каналов DMAКаждый канал DMA содержит следующие 16-разрядные регистры: · регистр текущего адреса CAR, содержит текущий адрес ячейки памяти при выполнении операции обмена данными с использованием DMA; · регистр циклов прямого доступа к памяти CWR, содержит число слов, предназначенных для передачи минус единица. При выполнении обмена данными регистр работает в режиме вычитания; · регистр хранения базового адреса BAR, используется для хранения базового адреса памяти, используемого при передачи данных. В процессе работы канала DMA содержимое этого регистра не изменяется; · регистр хранения базового числа циклов прямого доступа к памяти WCR. Этот регистр хранит число циклов DMA и его содержимое также не изменяестя; · регистр режима MR, определяющий режим работы канала. Приведем адреса регистров и их форматы для компьютеров IBM PC/XT. Порты 00h - 07hЭти регистры содержат базовые адреса и счетчики передаваемых данных каналов 0 - 3. Их назначение приводится в следующей таблице:
Порт 08hЭтот порт используется при записи в качестве управляющего регистра и при чтении как регистр состояния. Формат управляющего регистра:
Обычно управляющий регистр инициализируется BIOS в процессе тестирования системы. Впоследствии изменять режим работы контроллера DMA не требуется. Ошибки при инициализации этого порта могут привести к нарушению нормальной работы операционной системы. При чтении из порта 08h программа получает слово состояния контроллера DMA:
Порт 09hРегистр запроса. Предназначен для организации программного (а не аппаратного) запроса на DMA. Для использования программного запроса канал должен быть запрограммирован в режиме передачи блоков данных. Формат регистра:
Порт 0AhРегистр маски. Применяется для маскирования запросов на прямой доступ для отдельных каналов:
Порт 0BhРегистр режима. Служит для определения режимов работы каналов контроллера DMA:
Порт 0ChСброс триггера байтов. Для загрузки внутренних 16-разрядных регистров контроллера используется последовательный вывод младшего, затем старшего байтов слова. После сброса триггера байтов можно начинать загрузку 16-разрядных регистров. Порт 0DhЗапись в этот порт вызывает сброс контроллера. Для дальнейшего использования контроллер должен быть заново проинициализирован. Порт 0EhСброс регистра маски. После записи в этот регистр любого значения разрешается работа всех четырех каналов прямого доступа. Порт 0FhМаскирование или размаскирование каналов. С помощью этого порта можно выполнить одновременное маскирование или размаскирование нескольких каналов:
Порты 81h-8FhЭто порты регистров страниц. Для работы с памятью контроллер прямого доступа IBM PC/XT использует 20-разрядные физические адреса. Шестнадцать младших битов адреса необходимо записать в регистр базового адреса канала. Четыре старших бита (биты 16-19) должны быть записаны в соответствующие порты регистров страниц. При инициализации регистров базового адреса и регистра страниц необходимо следить за тем, чтобы в процессе передачи данных не происходил переход за границу 64 Кбайт. Для адресации регистров страниц можно использовать следующие порты:
Инициализация канала DMAДля инициализации канала программа должна выполнить следующие шаги: · сбросить триггер байтов командой записи в регистр 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. Сразу после разрешения канал начинает передачу данных. После окончания передачи устройство обычно вырабатывает прерывание, которое служит признаком окончания операции ввода или вывода данных. Контроллер прямого доступа IBM ATКонтроллер DMA компьютера IBM PC/AT совместим снизу вверх с контролером IBM PC/XT. Он состоит из двух каскадно включенных микросхем Intel 8237A-5. Второй контроллер обслуживает каналы DMA с номерами 4-7. Приведем назначение каналов DMA для IBM AT:
В разных моделях компьютеров назначение каналов DMA могут различаться. Кроме того, современные компьютеры допускают изменение назначения каналов с помощью программы BIOS Setup. Каналы 0-3 являются 8-разрядными, а каналы 4-7 - 16-разрядными. В связи с этим используются все 8 бит регистров страниц. Формируется 24-битовый адрес из 16 младших бит адреса, которые записываются в базовые регистры и 8 старших бит адреса, которые записываются в регистры страниц. Размер страницы составляет 128 Кбайт, поэтому при передаче данных с использованием DMA не должна пересекаться граница 128 Кбайт. Регистры каналов DMAПриведем описание регистров каналов DMA для IBM PC/AT. Регистры страницПриведем назначение и адреса регистров страниц контроллера для IBM AT:
Для 16-разрядных каналов 4-7 передача данных начинается с границы слова и все адреса относятся к 16-разрядным словам. Порты 0C0h -0DFhЭти регистры содержат базовые адреса и счетчики передаваемых данных каналов 4-7. Их назначение приводится ниже:
Порты 0D0h-0DFhЭто управляющие порты и порты состояния второй микросхемы 8237A-5. По формату и назначению они соответствуют рассмотренным ранее для контроллера DMA компьютеров IBM PC/XT:
|