Witchcraft Creative Group

Спектрум жив!

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

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

Печать PDF

Контроллер прямого доступа к памяти (ПДП, DMA - Direct Memory Access) обеспечивает высокоскоростной обмен данными между устройствами ввода-вывода и ОЗУ без использования центрального процессора, что позволяет освободить процессор для выполнения вычислений параллельно с обменом и независимо от него. Наиболее часто возможности ПДП используются при работе с дисковыми накопителями, однако реализовано использование ПДП адаптерами накопителей на магнитной ленте и рядом других устройств. Ощутимые преимущества дает использование ПДП в процессе обмена с устройствами, принимающими или передающими данные достаточно большими порциями с высокой скоростью.

В PC-подобных компьютерах функции контроллера ПДП выполняет микросхема 8237А фирмы INTEL (советский аналог КР1810ВТ37) или ее аналоги 8237А-4 и 8237А-5, работающие с тактовой частотой 4 и 5 Мгц соответственно (стандартная микросхема 8237А работает на частоте 3 Мгц). Контроллер имеет 4 независимых канала, каждый из которых может обслуживать одно периферийное устройство.

 

1. Принципы работы контроллера ПДП

В работе ПДП различаются 2 главных цикла: цикл ожидания (Idle cycle) и активный цикл (Active cycle). Каждый цикл подразделяется на ряд состояний, занимающих по времени один период тактовой частоты (тик). Из цикла ожидания контроллер может быть переведен в состояние программирования (Program Condition) путем подачи на вход RESET сигнала высокого уровня, длительностью не менее 300 нc и следующей за ним подачи сигнала низкого уровня (уровня 0) на вывод CS (Chip Select). В состоянии программирования контроллер будет находится до тех пор, пока на выводе CS сохранится сигнал низкого уровня. В процессе программирования контроллеру задаются:

-     начальный адрес памяти для обмена;

-     уменьшенное на единицу число передаваемых байтов;

-     направление обмена, а также устанавливаются требуемые режимы работы (разрешить или запретить циклическое изменение приоритетов, автоинициализацию, задать направление изменения адреса при обмене и т. д.).

Загрузка 16-разрядных регистров контроллера осуществляется через 8-разрядные порты ввода-вывода. Перед загрузкой первого (младшего) байта должен быть сброшен (очищен) триггер-защелка (триггер первый/последний, First/Last flip-flop), который изменяет свое состояние после вывода в порт первого байта и таким образом дает возможность следующей командой вывода в тот же порт загрузить старший байт соответствующего регистра.

Запрограммированный канал может быть демаскирован (бит маски канала устанавливается при этом в 0), после чего он может принимать сигналы "Запрос на ПДП", генерируемые тем внешним устройством, которое обслуживается через этот канал. Сигнал "запрос на ПДП" может быть также инициирован установкой в 1 бита запроса даного канала в регистре запросов контроллера. После появлениясигнала запроса контроллер входит в активный цикл, в котором выполняется обмен данными. Обмен может осуществляется в одном из четырех режимов:

1)      Режим одиночной передачи (Signle Transfer Mode). После каждого цикла передачи контроллер освобождает шину процессору, но сразу же начинает проверку сигналов запроса и, как только обнаруживает активный сигнал запроса, инициирует следующий цикл передачи.

2)      Режим блочной передачи (Block Transfer Mode). В этом режиме наличие сигнала запроса требуется только до момента выдачи контроллером сигнала "Подтверждение запроса на ПДП" (DACK), после чего шина не освобождается вплоть до завершения передачи всего блока.

3)      Режим передачи по требованию (Demand Transfer Mode). Данный режим является промежуточным между двумя первыми: передача идет непрерывно до тех пор, пока активен сигнал запроса, состояние которого проверяется после каждого цикла передачи. Как только устройство не может продолжить передачу, сигнал запроса сбрасывается им и контроллер приостанавливает работу. Этот режим применяется для обмена с медленными устройствами, не позволяющими по своим временным характеристикам работать с ПДП в режиме блочной передачи.

4)      Каскадный режим (Cascade Mode). Режим позволяет включить в подсистему ПДП более одного контроллера в тех случаях, когда недостаточно четырех каналов ПДП. В этом режиме один из каналов ведущего контроллера используется для каскадирования с контроллером второго уровня. Для работы в каскаде сигнал HRQ ("Запрос на захват") ведомого контроллера подается на вход DREG ("Запрос на канал ПДП") ведущего, а сигнал DACK ("Подтверждение запроса") ведущего подается на вход HDLA ("Потверждение захвата") ведомого.

Такая схема подключения аналогична подключению ведущего (первого) контроллера к микропроцессору, с которым он обменивается сигналами HRQ и HDLA.

2. Типы передач

2.1. Передача память-память (Memory-to-memory DMA).

Используется для передачи блока данных из одного места памяти в другое. Исходный адрес определяется в регистрах нулевого канала, выходной - в регистрах первого канала. Число циклов обмена (число байт минус 1) задается в регистре числа циклов канала 1. Передача происходит с использованием рабочего регистра контроллера в качестве промежуточного звена для хранения информации. При передачe память-память может быть задан специальный режим фиксации адреса (Address hold), при котором значение текущего адреса в регистре нулевого канала не изменяется, при этом весь выходной блок памяти заполняется одним и тем же элементом данных, находящимся по заданному адресу.

2.2. Авто инициализация (автозагрузка, Autoinitialization).

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

2.3. Режим фиксированных приоритетов.

В этом режиме канал 0 всегда имеет максимальный приоритет, а канал 3 - минимальный. Это означает, что любая передача по каналу с более высоким приоритетом будет выполняться раньше, чем по каналу с более низким приоритетом.

2.4. Циклический сдвиг приоритетов.

Позволяет избежать "забивания" шины одним каналом при одновременной передачe по нескольким каналам. Каждому каналу, по которому прошла передача, автоматически присваивается низший приоритет, после чего право на передачу получает канал с наивысшим приоритетом, для которого передача в данный момент возможна. Таким образом, если в начале работы распределение приоритетов было обычным (канал 0 - наивысший), и пришли сигналы запроса на ПДП по 1-му и 2-му каналам, то сначала будет выполняться передача по первому каналу, затем он получит низший приоритет (а канал 2, соответственно, высший, т. к. сдвиг приоритетов циклический) и передача выполнится по 2-му каналу, который затем получит низший приоритет, а высший приоритет получит, сответственно, канал 3, который и будет обладать преимущественным правом на передачу.

2.5. Сжатие времени передачи (Compressed transfer timing).

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

3. Описание внутренних регистров ПДП.

Контроллер имеет 344 бита внутренней памяти, организованной в виде регистров. Описание внутренних регистров ПДП приведено в таблице.

 

 

 

3.1. Регистр начального адреса (Base Address Register).

В этом регистре задается стартовый адрес ОЗУ, с которого начинается передача. Регистр содержит 16 разрядов и определяет адрес внутри заданного банка памяти размером 64К. Задание номера банков памяти осуществляется через специальные регистры банков (Bank Registers), поддерживаемые внешней логикой. Каждый канал ПДП имеет свой регистр начального адреса и регистр банка. Такое деление памяти на банки не позволяет осуществить обмен с блоком памяти, находящимся на пересечении двух банков. Каждый банк состоит из четырех страниц и начинается со страницы с номером, кратным 4 (0, 1, 2, 3; 8, 9, 10, 11 и т. д.).

3.2.Регистр начального счетчика циклов (Base Word Count Register).

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

3.3. Регистр текущего адреса (Current Address Register).

Начальное значение заносится в этот регистр одновременно с регистром начального адреса. В дальнейшем в ходе передачи значение текущего адреса автоматически увеличивается или уменьшается (конкретное направление изменения задается при программировании в регистре режима). Если разрешена автоинициализация, то после окончания передачи в регистр автоматически устанавливается значение из регистра начального адреса.

3.4. Регистр текущего счетчика циклов (Current Word Count Register).

Регистр содержит текущее значение счетчика циклов (число оставшихся циклов передачи). Отображаемое в нем число циклов всегда на единицу меньше числа еще не переданных элементов данных, так как изменение значения в этом регистре проиводится в конце цикла передачи, уже после фактической передачи элемента данных, а конец передачи фиксируется в момент переполнения счетчика (изменение его значения с 0 на 0FFFFh).

3.5. Регистр режима (Mode Register).

Данный регистр задает режимы работы своего канала контроллера.

 

 

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

3.7. Регистр команд (Command Register).

Этот 8-битный регистр управляет работой контроллера. Он программируется, когда контроллер находится в состоянии программирования и очищается командами сброса "Reset" и "Master Clear". Назначение битов регистра команд приведено на рисунке.

 

 

 

 

3.8. Регистр состояния (Status Register).

Регистр отражает текущее состояние запросов и передач по всем четырем каналам. Биты 0 - 3 устанавливаются в единицу после завершения передачи по каналам 0-3 (бит 0 - канал 0, бит 1 – канал 1 и т.д.), если не задан режим автоинициализации. Эти биты очищаются после команды сброса контроллера и после каждой операции считывания состояния из регистра состояния. Биты 4-7 указывают по какому из каналов 0-3 активен в текущий момент сигнал запроса на ПДП.

3.9. Регистр масок (Mask Register).

Каждый бит этого 4-битового регистра маскирует/демаскирует свой канал ПДП,при этом значение 1 маскирует канал,значение 0 демаскирует канал и разрешает прием сигнала запроса по этому каналу.

3.10. Регистр запросов (Request Register).

Сигнал запроса на ПДП (DREQ) может быть издан как обслуживаемым устройством, так и программно. Для программного издания сигнала запроса по одному из 4-х каналов ПДП необходимо установить соответствующий бит в 4-разрядном регистре запросов.Запрос на ПДП может быть отменен записью нулевого значения в соответствующий бит регистра. Бит запроса очищается автоматически при окончании передачи по данному каналу. Все биты запросов очищаются при сбросе контроллера. Для того, чтобы воспринимать программные запросы на ПДП, канал должен находится в режиме блочной передачи.

3.11. Рабочий регистр (Temporary Register).

Этот 8-разрядный регистр используется для хранения элемента данных, передаваемого в режиме фиксированного адреса при передаче память-память или для временного хранения передаваемого байта при всех остальных режимах передачи.

4. Программное управление контроллером ПДП

Программное управление контроллером ПДП осуществляется через порты ввода-вывода. Доступ к каждому регистру контроллера может быть осуществлен через свои порты ввода-вывода.

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

Порты #0C-#7C предназначены для записи исходных значений в регистры начального и текущего адреса, начального и текущего счетчика циклов для всех 4-х каналов. Так как порты восьмиразрядные, а регистры, в которые через них заносятся данные, 16-разрядные, то запись производится в два приема. Перед первой командой вывода в требуемый порт необходимо сбросить триггер-защелку, для чего выполняется команда вывода произвольного значения в порт #CC, после чего в требуемый порт выводится младший байт 16-разрядного значения и затем старший байт следующей команды вывода в тот же порт.

Вывод в порт #8C позволяет занести значение в регистр команд ПДП (Описание битов регистра команд приведено в п.3).

Чтение из порта #8C считывает регистр состояния ПДП (Описание битов регистра состояния приведено в п.3).

Запись в порт #9C позволяет установить или сбросить бит запроса в регистр запросов для одного из каналов. Формат команды следующий.

 

 

Запись в порт #AC позволяет установить или сбросить бит маски в регистре масок для одного из каналов. Формат команды:

 

Запись в порт #BC устанавливает значение в регистре режимов одного из 4-х каналов ПДП. Биты 0 и 1 задают номер канала(00-0, 01-1, 10-2, 11-3). В биты 2-7 заносятся значения, передаваемые соответственно в биты 0-6 регистра режимов. (Описание битов регистра режимов приведено в п.3).

Запись в порт #DC задает программный сброс контроллера (Master Clear). Вывод любого байта в этот порт имеет один и тотже эффект, что и аппаратный сброс контроллера. При программном сбросе очищаются регистры команд,состояния, запросов и рабочий регистр. Также сбрасывается триггер-защелка и усанавливаются все биты масок в регистре масок. После программного сброса контроллер переходит в цикл ожидания.

Вывод лбого байта в порт #EC очищает регистр масок-сбрасывает биты всех четырех каналов ПДП и таким образом разрешает прием запросов на ПДП по всем каналам.

Через порт #FC можно задать произвольное значение регистра масок ПДП. Для этого необходимо в битах 0-3 регистра A установить требуемое значение масок каналов 0-3 соответственно и вывести это значение в порт.

Регистры банков ПДП предназначены для задания номера банка памяти, с которой будет производится обмен.Под номером банка понимаются старшие биты номера страницы, начиная со 2го бита. Напомним, что архитектура ПДП позволяет работать только с банками памяти размером 64К, а логика, обеспечивающая переключение банков устроена так, что банки имеют жесткие границы, описанные выше. Из-за этой особенности невозможно с помощью ПДП осуществить обмен с блоками памяти, пересекающими границу между двумя такими банками. Каждый канал ПДП имеет свой регистр банка, поэтому доступ канала к памяти независим ни от банков других каналов, ни от портов страничной памяти (#7FFD, #DFFD, #1FFD и т.п.).

Обновлено 14.10.2009 07:26  
Организация и проведение праздничных мероприятий, фото- и видеосъемка