Лекция 10. DMA (Direct Memory Access) ­– Прямой доступ в память

10.1Два способа организации ввода-вывода

Главным направлением решения проблем ввода-вывода является магистрально-модульный способ построения ЭВМ рис. 10.1: все устройства, составляющие компьютер, включая и микропроцессор, организуются в виде модулей, которые соединяются между собой общей магистралью. Обмен информацией по магистрали удовлетворяет требованиям некоторого общего интерфейса, установленного для магистрали данного типа. Каждый модуль подключается к магистрали посредством специальных интерфейсных схем (Иi).

Рис. 10.1. Магистрально-модульный принцип построения ЭВМ

На интерфейсные схемы модулей возлагаются следующие задачи:

    обеспечение функциональной и электрической совместимости сигналов и протоколов обмена модуля и системной магистрали; преобразование внутреннего формата данных модуля в формат данных системной магистрали и обратно; обеспечение восприятия единых команд обмена информацией и преобразование их в последовательность внутренних управляющих сигналов.

Недостатком магистрально-модульного способа организации ЭВМ является невозможность одновременного взаимодействия более двух модулей, что ставит ограничение на производительность компьютера. Поэтому этот способ, в основном, используется в ЭВМ, к характеристикам которых не предъявляется очень высоких требований, например в персональных ЭВМ

В ЭВМ используются два основных способа организации передачи данных между памятью и периферийными устройствами: программно-управляемая передача и прямой доступ к памяти (ПДП).

НЕ нашли? Не то? Что вы ищете?

Программно-управляемая передача данных осуществляется при непосредственном участии и под управлением процессора (рис.10.2).


Процессорный обмен



Рис 10.2. Процессорный обмен 
a) Ввод / MEMWrite:                ВУ → ИПУ → CPU(accumulator) → MEM
б) Вывод / MEMRead:        MEM → CPU(accumulator) → ИПУ → ВУ

Например, при пересылке блока данных из периферийного устройства в оперативную память процессор должен выполнить следующую последовательность шагов:

сформировать начальный адрес области обмена ОП; занести длину передаваемого массива данных в один из внутренних регистров, который будет играть роль счетчика; выдать команду чтения информации из УВВ; при этом на шину адреса из МП выдается адрес УВВ, на шину управления - сигнал чтения данных из УВВ, а считанные данные заносятся во внутренний регистр МП; выдать команду записи информации в ОП; при этом на шину адреса из МП выдается адрес ячейки оперативной памяти, на шину управления - сигнал записи данных в ОП, а на шину данных выставляются данные из регистра МП, в который они были помещены при чтении из УВВ; модифицировать регистр, содержащий адрес оперативной памяти; уменьшить счетчик длины массива на длину переданных данных; если переданы не все данные, то повторить шаги 3-6, в противном случае закончить обмен.

Как видно, программно-управляемый обмен ведет к нерациональному использованию мощности микропроцессора, который вынужден выполнять большое количество относительно простых операций, приостанавливая работу над основной программой. При этом действия, связанные с обращением к оперативной памяти и к периферийному устройству, обычно требуют удлиненного цикла работы микропроцессора из-за их более медленной по сравнению с микропроцессором работы, что приводит к еще более существенным потерям производительности ЭВМ.

Внепроцессорный обмен

Альтернативой программно-управляемому обмену служит прямой доступ к памяти - способ быстродействующего подключения внешнего устройства, при котором оно обращается к оперативной памяти, не прерывая работы процессора [3]. Такой обмен происходит под управлением отдельного устройства - контроллера прямого доступа к памяти (КПДП).

Структура ЭВМ, имеющей в своем составе КПДП, представлена на рис. 10.3.

Рис. 10.3. Обмен данными в режиме прямого доступа к памяти

Перед началом работы контроллер ПДП необходимо инициализировать: занести начальный адрес области ОП, с которой производится обмен, и длину передаваемого массива данных. В дальнейшем по сигналу запроса прямого доступа контроллер фактически выполняет все те действия, которые обеспечивал микропроцессор при программно-управляемой передаче.

Рис. 10.3 (б). Управление взаимодействием контроллера внешнего устройства с памятью
в режиме прямого доступа осуществляет контроллер DMA

Канал контроллера DMA при этом обеспечивал выполнение следующей последовательности операций (i8237A):

    прием запроса на прямую передачу данных DREQ (DMA Request) от контроллера периферийного устройства; формирование запроса на захват шины HRQ (Hold Request); прием от процессора сигнала подтверждения HLDA (Hold Acknowledge) , разрешающего захват шины; формирование сигнала DACK (DMA Acknowledge), который сообщает контроллеру периферийного устройства о начале выполнения циклов DMA; формирование на шине адреса ячейки памяти (A15-A0), с которой будет производиться операция обмена данными (чтения или записи). Старшие разряды адреса предварительно заносятся в регистр страниц DMA (Page Reg); формирование на шине сигналов управления выполнением операции обмена (MEMR/IOW, MEMW/IOR) увеличение или уменьшение адреса ячейки памяти после выполнения операции обмена; повторение циклов DMA до тех пор, пока не будет завершена передача блока данных; снятие запросов на DMA после завершения передачи блока данных.

10.2. Распределение каналов DMA

Назначение некоторых каналов контроллера DMA задано жестко, а другие каналы оставлены «свободными» и могут использоваться картами расширения, устанавливаемыми в ISA-слоты системной платы.

При разработке IBM AT возможности контроллера были расширены путем подключения второй микросхемы i8237 А в режиме каскадирования, что позволило увеличить число каналов DMA до семи (рис. 10.4).

Рис. 10.4. Каскадирование контроллеров DMA в IBM AT

Обычно каналы DMA на системных платах АТ-совместимых компьютеров распределены следующим образом:

    канал 0 — используется для регенерации динамической памяти; канал 1 — используется параллельным портом ЕСР; канал 2 — используется контроллером дисководов гибких дисков FDC; канал 3 — используется параллельным портом ЕСР; канал 4 — используется для каскадирования; канал 5 — свободен; канал 6 — свободен; канал 7 — свободен.

ПРИМЕЧАНИЕ----------------------------------------------------------------------------------

Каналы 1 и 3 заняты параллельным портом только в том случае, если используется режим ЕСР; в противном случае каналы свободны.

Микросхема i8237A содержит четыре независимых друг от друга канала DMA. Для каждого из этих каналов микросхема имеет четыре 16-разрядных регистра:

    CAR (Current Address Register) — регистр текущего адреса; CWR (Current Word Register) — регистр счетчика подлежащих передаче слов; BAR (Base Address Register) — регистр базового адреса; BWCR (Base Word Count Register) — регистр базового числа циклов DMA.

ВНИМАНИЕ__________________________________________________________________

Единица информации, передаваемая за один цикл DMA, в документации по микросхеме i8237А именуется «словом». Конкретный размер этой единицы определяется способом подключения контроллера и равен одному байту для DMA-1 и 16-разрядному слову для
DMA-2 (см. Рис. 10.5).

С точки зрения программиста, регистры CAR и CWR доступны только для считывания, а регистры BAR и BCWR — только для записи.

При обращении к контроллеру DMA выбор канала и его регистра определяется значением на четырех адресных входах микросхемы i8237А (А3 – 0). Соответствие номера порта тому или иному регистру задается следующим правилом:

A3A2A1A0

Регистр в цикле записи

Регистр в цикле чтения

0  Х  Х  0

BAR (Base Address Register)

CAR (Current Address Register)

0  Х  Х  1

BWCR (Base Word Count Register)

CWR (Current Word Register)


При этом, значение ХХ адресных разрядов А2А1 задает номер канала контроллера :
00 – канал 0, 01 – канал 1, 10 – канал 2 и 11 – канал 3.


A3A2A1A0

WR

RD

0  0  0  0

DMA

CH0

BAR0

CAR0

  Регистры адреса

0  0  1  0

DMA +2

CH1

BAR1

CAR1

0  1  0  0

DMA +4

CH2

BAR2

CAR2

0  1  1  0

DMA +6

CH3

BAR3

CAR3

0  0  0  1

DMA +1

CH0

BWCR0

CWR0

  Регистры счетчиков

0  0  1  1

DMA +3

CH1

BWCR1

CWR1

  циклов

0  1  0  1

DMA +5

CH2

BWCR2

CWR2

0  1  1  1

DMA +7

CH3

BWCR3

CWR3

1  0  0  0

DMA +8

CR/SR

CR

SR

Command REG/Status REG

1  0  0  1

DMA +9

RR

-

Request Register

1  0  1  0

DMA +A

MSR

-

Mask Register

1  0  1  1

DMA +B

MR

-

Mode Register

1  1  0  0

DMA +C

F/L

-

First/Last flip-flop

1  1  0  1

DMA +D

MC

-

Master Clear DMA

1  1  1  0

DMA +E

CM

-

Clear MASK Register

1  1  1  1

DMA +F

WAMR

-

Write All Mask Register


Микросхема DMA-2 подключена на шину адреса со сдвигом на один разряд влево:

Рис. 10.5 Подключение DMA-1 и DMA-2 к адресной шине

Таким образом, все адресное пространство микросхемы «сдвинулось» влево на один разряд. Адреса всех регистров DMA-2 - четные. Адреса, устанавливаемые DMA-2 на системной шине − четные. Это позволяет поддерживать обмен словами.

DMA-1 поддерживает доступ к непересекаемым блокам по 64Кбайт.

DMA-2 поддерживает доступ к непересекаемым блокам по 128Кбайт.

Общий объем памяти, поддерживаемый DMA − 16 Mбайт.

  Рис. 10.6. Разделение адресного пространства оперативной памяти на блоки, адресуемые контроллерами DMA-1 и DMA-2


10.3. Назначение и форматы регистров контроллера DMA

Рис. 10.7. Структурная схема СDMA

Регистр режима работы (Mode Register) − задает параметры режима работы канала.

OUT

Mode Register Порт 0Bh(D6h)

Номер канала (CHANNEL):

00 — канал 0, 01 — канал 1,

10 — канал 2,11 — канал 3

Тип цикла DMA (CICLE DMA):

00— верификация,

01— запись DMA,

— чтение DMA, — запрещенный код

Автоинициализация (AUTOINIT):

0 — запрещена, 1 — разрешена

Приращение адреса (DECR/INCR Addr):

— инкрементирование, — декрементирование

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

00— передача по требованию (DTM – Demand Transfer Mode),

01— одиночная передача (STM – Single Transfer Mode),

— блочная передача (BTM – Block Transfer Mode), — каскадирование (Cascade Mode)

Рис. 10.7. Формат байта режима работы канала

Регистр запроса DMA (Request Register, RR) − позволяет программно устанавливать/сбрасывать запросы DMA.

OUT

Request Register Порт 09h ( D2h )

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

00 — канал 0, 01 — канал 1,

10 — канал 2, 11 — канал 3

Запрос на DMA:

0 — сбросить, 1 — установить

Не используются (должны иметь значение 0).

Рис. 10.8. Формат регистра программного запроса DMA

Регистр маскирования (Mask Register) − для установки / сброса триггеров маскирования отдельных каналов DMA. (Замаскированный канал игнорирует запросы DREQ от подсоединенного к нему внешнего устройства).


OUT

Mask Register Порт 0Ah ( D4h )

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

00 — канал 0, 01 — канал 1

10 — канал 2,11 — канал 3

Маскирование DREQ:

— сбросить маску, — установить маску

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

Рис. 10.10. Формат регистра маскирования канала DMA

Общие регистры

Управляющий регистр (Command Register) задает параметры работы контроллера DMA, общие для всех четырех каналов микросхемы.


Command Register Порт 08h ( D0h )- запись (OUT)

Передачи «память – память»:

0 — Запрещены, 1 — Разрешены (CH0 ->CH1: SRC CAR0 / DST CAR1,WCR1)

Фиксация адреса канала 0 в режиме «память-память»

0 — запрещена, 1 — разрешена (фиксирование CAR0)

Управление работой контроллера:

0 — работа разрешена(ENEBLE DMA),
1 — работа запрещена(DISABLE DMA)

Сжатие цикла обмена по времени:

0 — полный цикл (s2,s3,s4) 1 — сжатый цикл (s2,s4)

Порядок приоритетов:

0 — фиксированный (канал 0-1-2-3),
1 — вращающийся

Цикл записи:

0 — нормальный, 1 — удлиненный (х – при сжатом цикле)

Уровень сигнала запроса DREQ:
О — высокий,
1 — низкий

Уровень сигнала подтверждения DАСK:' О — низкий, 1 — высокий


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

Регистр состояния (Status Register) позволяет определить текущее состояние всех четырех каналов микросхемы контроллера DMA.


Status Register Порт 08h ( D0h )- чтение (IN)

Завершение счета в канале 0 (1 – Да/0 – Нет)

Завершение счета в канале 1 (1 – Да/0 – Нет)

Завершение счета в канале 2 (1 – Да/0 – Нет)

Завершение счета в канале 3 (1 – Да/0 – Нет)

Запрос DMA в канале 0

Запрос DMA в канале 1

Запрос DMA в канале 2

Запрос DMA в канале 3


Рис. 10.11. Формат регистра состояния

Регистр одновременной записи масок каналов (Write All Mask Register), позволяет одновременно изменить значения масок всех каналов.


WAMR Порт 0Fh ( DEh )- запись

Маскирование канала 0/4:

0 — размаскировать, 1 — замаскировать

Маскирование канала 1/5:

0 — размаскировать, 1 — замаскировать

Маскирование канала 2/6:

0 — размаскировать, 1 — замаскировать

Маскирование канала 3/7:

0 — размаскировать, 1 — замаскировать

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

Рис. 10.12. Формат регистра одновременной записи / сброса масок

Программные команды (Software Command).

Сброс триггера байтов (First/Last flip-flop ) записью любого значения в порт 0Сh (D8h).

Сброс контроллера DMA-1 (DMA-2) записью любого значения в порт 0Dh (DAh).

(При этом сбрасываются регистры CR, SR, RR, TR) и устанавливаются маски всех каналов.

Сброс регистра масок контроллера DMA-1(DMA-2) записью любого значения в порт 0Eh (DCh).

Порядок инициализации канала DMA

Если в программе, работающей непосредственно с контроллером периферийного устройства, при обмене данными используется режим DMA, необходимо произвести настройку параметров канала, к которому подключено устройство, то есть инициализировать канал.

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

    запретить работу канала путем записи соответствующего значения в регистр маски (то есть в порт 0Ah для DMA-1 или в порт D4h для DMA-2); сбросить триггер байтов (First/Last flip-flop) посредством записи произвольного значения в соответствующий порт (0Сh для DMA-1 или D8h для DMA-2); задать режим работы канала путем записи соответствующей информации в регистр MR (то есть в порт 0Bh для DMA-1 или в порт D6h для DMA-2); побайтно (младший – старший) загрузить младшие 16 разрядов 24-битового адреса области оперативной памяти, которая будет использоваться при передаче данных, в регистр базового адреса инициализируемого канала; загрузить номер страницы памяти (старшие 8 разрядов 24-битового адреса используемой области оперативной памяти) в регистр страницы инициализируемого канала; загрузить в регистр базового числа циклов CWR инициализируемого канала значение, которое на единицу меньше количества циклов DMA, необходимого для передачи блока данных; разрешить работу канала (размаскировать канал) путем записи соответствующего значения в регистр маски (в порт 0Ah для DMA-1 или в порт D4h для DMA-2).

Инициализированный канал будет ожидать поступления запроса на прямую передачу данных от контроллера периферийного устройства.