Echo
#06
30 июня 2000 |
|
Железо - Контроллер прямого доступа к памяти звуковой карты DMA Ultrasound Card.
────────────────────────────────────────── Контроллер прямого доступа к памяти ────────────────────────────────────────── Контроллер прямого доступа к памяти (ПДП, 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 бита внутренней памяти, организованной в виде регистров. Описание внутренних регистров ПДП приведе- но в таблице. ┌───────────────────────────────────┬──────────────┬───────────┐ │ Наименование │ Разрядность │ Число │ │ регистра │ (бит) │ регистров │ ├───────────────────────────────────┼──────────────┼───────────┤ │ Регистр начального адреса │ 16 │ 4 │ │ (Base Address Register) │ │ │ │ Регистр начального счетчика циклов│ 16 │ 4 │ │ (Base Word Count Register) │ │ │ │ Регистр текущего адреса │ 16 │ 4 │ │ (Current Address Register) │ │ │ │ Регистр текущего счетчика циклов │ 16 │ 4 │ │ (Current Word Count Register) │ │ │ │ Рабочий регистр адреса │ 16 │ 1 │ │ (Temporary Address Register) │ │ │ │ Рабочий регистр счетчика циклов │ 16 │ 1 │ │ (Temporary Word Count Register) │ │ │ │ Регистр состояния │ 8 │ 1 │ │ (Status Register) │ │ │ │ Регистр команд │ 8 │ 1 │ │ (Command Register) │ │ │ │ Регистр режима (Mode Register) │ 6 │ 4 │ │ Рабочий регистр │ 8 │ 1 │ │ (Temporary Register) │ │ │ │ Регистр масок (Mask Register) │ 4 │ 1 │ │ Регистр запросов │ 4 │ 1 │ │ (Request Register) │ │ │ └───────────────────────────────────┴──────────────┴───────────┘ 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). Данный регистр задает режимы работы своего канала контроллера. 7 6 5 4 3 2 1 0 ╔═╤═╤═╤═╤═╤═╤═╤═╗ ║x│x│ │ │ │ │ │ ║ ╚═╧═╧╤╧╤╧╤╧╤╧╤╧╤╝ Раскладка битов: │ │ │ │ │ │ ──────────────── │ │ │ │ └─┴ 0-1: Режим работы: │ │ │ │ 00=запись(в память) │ │ │ │ 10=чтение(из памяти) │ │ │ │ 11=недопустимая комбинация │ │ │ └──── 2: Автоинициализация: │ │ │ 0=запрещена │ │ │ 1=разрешена │ │ └────── 3: Изменение текущего адреса при обмене: │ │ 0=увеличение │ │ 1=уменьшение └─┴──────── 4-5: Тип передачи: 00=режим передачи по требованию 01=режим одиночной передачи 10=режим блочной передачи 11=каскадный режим Каждый из четырех каналов ПДП имеет свой набор регистров, описанных выше. Кро- ме того, имеется следующий набор регист- ров, общих для всех каналов. 3.7. Регистр команд (Command Register). Этот 8-битный регистр управляет работой контроллера. Он программируется, когда контроллер находится в состоянии програм- мирования и очищается командами сброса "Reset" и "Master Clear". Назначение битов регистра команд приведено на рисунке. 7 6 5 4 3 2 1 0 ╔═╤═╤═╤═╤═╤═╤═╤═╗ ║ │ │ │ │ │ │ │ ║ ╚╤╧╤╧╤╧╤╧╤╧╤╧╤╧╤╝ Раскладка битов: │ │ │ │ │ │ │ │ ──────────────── │ │ │ │ │ │ │ └ 0:0=запретить передачу память-память │ │ │ │ │ │ │ 1=разрешить │ │ │ │ │ │ └── 1:0=запретить фиксацию адреса в канале 0 │ │ │ │ │ │ 1=разрешить │ │ │ │ │ └──── 2:0=разблокировать контроллер │ │ │ │ │ 1=заблокировать │ │ │ │ └────── 3:0=нормальная временная диаграмма │ │ │ │ 1=сжатие времени передачи, │ │ │ │ если бит 0 установлен, то игнорируется │ │ │ └──────── 4:0=режим фиксированных приоритетов │ │ │ 1=реим циклического сдвига приоритетов │ │ └────────── 5:1=режим расширенной записи │ │ 0=задержки при записи, │ │ если бит 3 установлен, то игнорируется │ └──────────── 6:0=активен высокий уровень сигнала запроса │ 1=низкий DREQ └────────────── 7:0=активен высокий уровень сигнала подтверждения запроса на ПДП(DACK) 1=низкий 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 │запись│Запись начального адреса в регистр начального │ │ │ │адреса и регистр текущего адреса канала 0 │ │#2C │запись│то же для канала 1 │ │#4C │запись│то же для канала 2 │ │#6C │запись│то же для канала 3 │ ├────┼──────┼──────────────────────────────────────────────────┤ │#0C │чтение│Чтение текущего адреса из регистра текущего │ │ │ │адреса канала 0 │ │#2C │чтение│тоже для канала 1 │ │#4C │чтение│тоже для канала 2 │ │#6C │чтение│тоже для канала 3 │ ├────┼──────┼──────────────────────────────────────────────────┤ │#1C │запись│Запись в регистр начального счетчика циклов и в │ │ │ │регистр текущего счетчика циклов канала 0 │ │#3C │запись│то же для канала 1 │ │#5C │запись│то же для канала 2 │ │#7C │запись│то же для канала 3 │ ├────┼──────┼──────────────────────────────────────────────────┤ │#1C │чтение│Чтение текущего значения из регистра текущего │ │ │ │счетчика циклов канала 0 │ │#3C │чтение│то же для канала 1 │ │#5C │чтение│то же для канала 2 │ │#7C │чтение│то же для канала 3 │ ├────┼──────┼──────────────────────────────────────────────────┤ │#8C │запись│Запись регистра команд ПДП │ │#8C │чтение│Чтение регистра состояния ПДП │ │#9C │запись│Запись в регистр запросов ПДП │ │#AC │запись│Запись бита маски для одного из каналов ПДП │ │#BC │запись│Запись регистра режимов для одного из каналов ПДП │ │#CC │запись│Очистка (сброс) триггера-защелки(триггера первого/│ │ │ │последнего) │ │#DC │запись│Программный сброс контроллера │ │#EC │запись│Очистка битов масок всех 4-х каналов │ │#FC │запись│Запись регистра масок для всех 4-х каналов │ │#DC │ │ │ │или │чтение│Чтение рабочего регистра ПДП │ │#FC │ │ │ ├────┼──────┼──────────────────────────────────────────────────┤ │#07 │запись│Задание номера банка для канала 0 │ │#17 │запись│то же для канала 1 │ │#27 │запись│то же для канала 2 │ │#37 │запись│то же для канала 3 │ └────┴──────┴──────────────────────────────────────────────────┘ Порты #0C-#7C предназначены для записи исходных значений в регистры начального и текущего адреса, начального и текущего счетчика циклов для всех 4-х каналов. Так как порты восьмиразрядные, а регистры, в которые через них заносятся данные, 16-разрядные, то запись производится в два приема. Перед первой командой вывода в требуемый порт необходимо сбросить триг- гер-защелку, для чего выполняется команда вывода произвольного значения в порт #CC, после чего в требуемый порт выводится младший байт 16-разрядного значения и за- тем старший байт следующей команды вывода в тот же порт. Вывод в порт #8C позволяет занести зна- чение в регистр команд ПДП (Описание битов регистра команд приведено в п. 3). Чтение из порта #8C считывает регистр состояния ПДП (Описание битов регистра состояния приведено в п. 3). Запись в порт #9C позволяет установить или сбросить бит запроса в регистр запро- сов для одного из каналов. Формат команды следующий: 7 6 5 4 3 2 1 0 ╔═╤═╤═╤═╤═╤═╤═╤═╗ ║x│x│x│x│x│ │ │ ║ Раскладка битов ╚═╧═╧═╧═╧═╧╤╧╤╧╤╝ ─────────────── │ └─┴─ 0-1:выбор канала 00-0 │ 01-1 │ 10-2 │ 11-3 └───── 2: 1=установить бит запроса на ПДП 0=сбросить бит запроса на ПДП Запись в порт #AC позволяет установить или сбросить бит маски в регистре масок для одного из каналов. Формат команды: 7 6 5 4 3 2 1 0 ╔═╤═╤═╤═╤═╤═╤═╤═╗ ║x│x│x│x│x│ │ │ ║ Раскладка битов ╚═╧═╧═╧═╧═╧╤╧╤╧╤╝ ─────────────── │ └─┴─ 0-1:выбор канала 00-0 │ 01-1 │ 10-2 │ 11-3 └───── 2: 1=установить бит маски 0=сбросить бит маски Запись в порт #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 и т. п.).
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября