Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад] [Содеожание] [Дальше]

Аппаратное обеспечение персонального компьютера

© Александр Фролов, Григорий Фролов
Том 33, М.: Диалог-МИФИ, 1997, 304 стр.

8 Контроллер прямого доступа к памяти

  • Контроллер прямого доступа IBM PC/XT
  • Контроллер прямого доступа IBM AT
  • Прямой доступ к памяти (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 и содержит четыре канала. Эти каналы используются следующим образом:

    Номер канала

    Для чего применяется

    0

    Обновление содержимого динамической памяти компьютера.

    Этот канал имеет наивысший приоритет

    1

    Не используется

    2

    Адаптер накопителя на гибком магнитном диске НГМД

    3

    Адаптер накопителя на магнитном диске НМД.

    Этот канал имеет низший приоритет

    Регистры каналов DMA

    Каждый канал DMA содержит следующие 16-разрядные регистры:

    ·          регистр текущего адреса CAR, содержит текущий адрес ячейки памяти при выполнении операции обмена данными с использованием DMA;

    ·          регистр циклов прямого доступа к памяти CWR, содержит число слов, предназначенных для передачи минус единица. При выполнении обмена данными регистр работает в режиме вычитания;

    ·          регистр хранения базового адреса BAR, используется для хранения базового адреса памяти, используемого при передачи данных. В процессе работы канала DMA содержимое этого регистра не изменяется;

    ·          регистр хранения базового числа циклов прямого доступа к памяти WCR. Этот регистр хранит число циклов DMA и его содержимое также не изменяестя;

    ·          регистр режима MR, определяющий режим работы канала.

    Приведем адреса регистров и их форматы для компьютеров IBM PC/XT.

    Порты 00h - 07h

    Эти регистры содержат базовые адреса и счетчики передаваемых данных каналов 0 - 3. Их назначение приводится в следующей таблице:

    Порт

    Операция

    Назначение

    PRIVATE00h

    Запись:

    Базовый адрес канала 0

    Чтение:

    Текущий адрес

    01h

    Запись:

    Счетчик канала 0

    Чтение:

    Текущий адрес

    02h

    Запись:

    Базовый адрес канала 1

    Чтение:

    Текущий адрес

    03h

    Запись:

    Счетчик канала 1

    Чтение:

    Текущий адрес

    04h

    Запись:

    Базовый адрес канала 2

    Чтение:

    Текущий адрес

    05h

    Запись:

    Счетчик канала 2

    Чтение:

    Текущий адрес

    06h

    Запись:

    Базовый адрес канала 3

    Чтение:

    Текущий адрес

    07h

    Запись:

    Счетчик канала 3

    Чтение:

    Текущий адрес

    Порт 08h

    Этот порт используется при записи в качестве управляющего регистра и при чтении как регистр состояния.

    Формат управляющего регистра:

    Поле

    Описание

    0

    1 - использование режима память-память;

    0 - обычный режим работы

    1

    Если используется режим память-память, то 1 в этом разряде разрешает захват канала, 0 – запрещает. В обычном режиме работы состояние этого бита безразлично

    2

    1 - запрет работы DMA;

    0 - разрешение работы DMA

    3

    1 - использование сжатия во времени, если установлен бит обычного режима работы;

    0 - обычный режим работы

    4

    1 – циклическое изменение приоритетов;

    0 - фиксированные приоритеты

    5

    1 - удлиненный цикл записи;

    0 - нормальный цикл записи

    6

    1 - для сигнала запроса на DMA используется низкий уровень DREQ;

    0 – для этого сигнала используется высокий уровень

    7

    1 - для сигнала подтверждения DMA DACK используется высокий уровень;

    0 - для этого сигнала используется низкий уровень

    Обычно управляющий регистр инициализируется BIOS в процессе тестирования системы. Впоследствии изменять режим работы контроллера DMA не требуется. Ошибки при инициализации этого порта могут привести к нарушению нормальной работы операционной системы.

    При чтении из порта 08h программа получает слово состояния контроллера DMA:

    Поле

    Описание

    0-3

    Биты 0-3 устанавливаются при достижении счетчиками каналов 0-3 конечных значений;

    4-7

    Биты 4-7 установлены, если имеется разрешение на DMA, соответственно, каналов 0-3

    Порт 09h

    Регистр запроса. Предназначен для организации программного (а не аппаратного) запроса на DMA. Для использования программного запроса канал должен быть запрограммирован в режиме передачи блоков данных.

    Формат регистра:

    Поле

    Описание

    0-1

    Номер канала:

    00 – канал 0;

    01 – канал 1

    10 – канал 2;

    11 – канал 3

    2

    0 – установить запрос;

    1 – сбросить запрос

    3-7

    Не используются

    Порт 0Ah

    Регистр маски. Применяется для маскирования запросов на прямой доступ для отдельных каналов:

    Поле

    Описание

    0-1

    Номер канала:

    00 – канал 0;

    01 – канал 1

    10 – канал 2;

    11 – канал 3

    2

    0 - установить маску;

    1 - сбросить маску

    3-7

    Не используются

    Порт 0Bh

    Регистр режима. Служит для определения режимов работы каналов контроллера DMA:

    Поле

    Описание

    0-1

    Номер канала:

    00 – канал 0;

    01 – канал 1

    10 – канал 2;

    11 – канал 3

    2-3

    Тип цикла DMA:

    00 - цикл проверки;

    01 - цикл записи;

    10 - цикл чтения;

    11 - запрещенная комбинация

    4

    1 - режим автоинициализации

    5

    Приращение адреса:

    0 - инкрементирование;

    1 – декрементирование

    6-7

    Режим обслуживания:

    00 - передача по требованию;

    01 - одиночная передача;

    10 – передача по блокам;

    11 - каскадироание

    Порт 0Ch

    Сброс триггера байтов. Для загрузки внутренних 16-разрядных регистров контроллера используется последовательный вывод младшего, затем старшего байтов слова. После сброса триггера байтов можно начинать загрузку 16-разрядных регистров.

    Порт 0Dh

    Запись в этот порт вызывает сброс контроллера. Для дальнейшего использования контроллер должен быть заново проинициализирован.

    Порт 0Eh

    Сброс регистра маски. После записи в этот регистр любого значения разрешается работа всех четырех каналов прямого доступа.

    Порт 0Fh

    Маскирование или размаскирование каналов. С помощью этого порта можно выполнить одновременное маскирование или размаскирование нескольких каналов:

    Поле

    Описание

    0

    1 - маскирование канала 0;

    0 - разрешение канала 0

    1

    1 - маскирование канала 1;

    0 - разрешение канала 1

    2

    1 - маскирование канала 2;

    0 - разрешение канала 2

    3

    1 - маскирование канала 3;

    0 - разрешение канала 3

    4-7

    Не используются

    Порты 81h-8Fh

    Это порты регистров страниц.

    Для работы с памятью контроллер прямого доступа IBM PC/XT использует 20-разрядные физические адреса. Шестнадцать младших битов адреса необходимо записать в регистр базового адреса канала. Четыре старших бита (биты 16-19) должны быть записаны в соответствующие порты регистров страниц.

    При инициализации регистров базового адреса и регистра страниц необходимо следить за тем, чтобы в процессе передачи данных не происходил переход за границу 64 Кбайт.

    Для адресации регистров страниц можно использовать следующие порты:

    Порт

    Описание

    81h

    Регистр страниц канала 2

    82h

    Регистр страниц канала 3

    83h

    Регистр страниц канала 1

    Инициализация канала 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:

    Поле

    Описание

    0

    Зарезервировано

    1

    Зарезервировано

    2

    Адаптер накопителя на гибком магнитном диске (НГМД)

    3

    Адаптер накопителя на магнитном диске (НМД)

    4

    Используется для каскадного соединения с первым контроллером DMA

    5-7

    Зарезервировано

    В разных моделях компьютеров назначение каналов DMA могут различаться. Кроме того, современные компьютеры допускают изменение назначения каналов с помощью программы BIOS Setup.

    Каналы 0-3 являются 8-разрядными, а каналы 4-7 - 16-разрядными.

    В связи с этим используются все 8 бит регистров страниц. Формируется 24-битовый адрес из 16 младших бит адреса, которые записываются в базовые регистры и 8 старших бит адреса, которые записываются в регистры страниц.

    Размер страницы составляет 128 Кбайт, поэтому при передаче данных с использованием DMA не должна пересекаться граница 128 Кбайт.

    Регистры каналов DMA

    Приведем описание регистров каналов DMA для IBM PC/AT.

    Регистры страниц

    Приведем назначение и адреса регистров страниц контроллера для IBM AT:

    Порт

    Описание

    81h

    Регистр страниц канала 2

    82h

    Регистр страниц канала 3

    83h

    Регистр страниц канала 1

    87h

    Регистр страниц канала 0

    89h

    Регистр страниц канала 6

    8Bh

    Регистр страниц канала 5

    8Ah

    Регистр страниц канала 7

    8Fh

    Регенерация динамической памяти

    Для 16-разрядных каналов 4-7 передача данных начинается с границы слова и все адреса относятся к 16-разрядным словам.

    Порты 0C0h -0DFh

    Эти регистры содержат базовые адреса и счетчики передаваемых данных каналов 4-7. Их назначение приводится ниже:

    Порт

    Операция

    Назначение

    0C0h

    Запись:

    Базовый адрес канала 4

    Чтение:

    Текущий адрес

    0C2h

    Запись:

    Счетчик канала 4

    Чтение:

    Текущий адрес

    0C4h

    Запись:

    Базовый адрес канала 5

    Чтение:

    Текущий адрес

    0C6h

    Запись:

    Счетчик канала 5

    Чтение:

    Текущий адрес

    0C8h

    Запись:

    Базовый адрес канала 6

    Чтение:

    Текущий адрес

    0CAh

    Запись:

    Счетчик канала 6

    Чтение:

    Текущий адрес

    0CCh

    Запись:

    Базовый адрес канала 7

    Чтение:

    Текущий адрес

    0CEh

    Запись:

    Счетчик канала 7

    Чтение:

    Текущий адрес

    Порты 0D0h-0DFh

    Это управляющие порты и порты состояния второй микросхемы 8237A-5. По формату и назначению они соответствуют рассмотренным ранее для контроллера DMA компьютеров IBM PC/XT:

    Порт

    Назначение

    PRIVATE0D0h

    Управляющий регистр, регистр состояния

    0D2h

    Регистр запроса

    0D4h

    Регистр маски

    0D6h

    Регистр режима

    0D8h

    Сброс триггера байтов

    0DAh

    Сброс контроллера

    0DCh

    Сброс регистра маски

    0DEh

    Маскирование и размаскирование каналов

    [Назад] [Содеожание] [Дальше]