Контролер прямого доступу до пам'яті
Химия

Контролер прямого доступу до пам’яті


Завантажити доповідь: Контролер прямого доступу до пам’яті

Прямий доступ до пам’яті (Direct Memory Access — DMA) використовується для виконання операцій передачі безпосередньо між оперативною пам’яттю і пристроями вводу/вывода. Зазвичай це такі пристрої як НГМД, НЖМД, касетні накопичувачі на магнітній стрічці КНМЛ (стріммери).

При використанні ОМА процесор не бере участі в операціях введення/виводу, контролер прямого доступу сам формує всі сигнали, необхідні обміну даними з пристроєм. Швидкість такого безпосереднього обміну значно вища, ніж при традиційному введенні/виводі з використанням центрального процесора та команд INP, OUT.

Контролер прямого доступу IBM PC/XT

Контролер прямого доступу для IBM PC/XT реалізований на базі мікросхеми Intel 8237A і містить чотири канали. Ці канали використовуються так:

0 – оновлення вмісту динамічної пам’яті комп’ютера, цей канал має найвищий прморитет;

1 – не використовується;
2 – адаптер НГМД;
3 – адаптер НЖМД.

Канал 0 має найвищий пріоритет, канал 3 – нижчий.

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

Кожен канал містить 16-розрядні регістри:

— регістр поточної адреси CAR, що містить поточну адресу осередку пам’яті при виконанні операції обміну даними з використанням DMA;

— регістр циклів прямого доступу до пам’яті CWR, що містить кількість слів, призначених для передачі мінус одиниця; при виконанні обміну даними регістр працює у режимі віднімання;

— регістр зберігання базової адреси BAR, що використовується для зберігання базової адреси пам’яті, що використовується при передачі даних; у процесі роботи каналу DMA вміст цього регістру не змінюється;

— регістр зберігання базового числа циклів прямого доступу до пам’яті WCR; він зберігає кількість циклів DMA, його вміст також не змінюється;

— Регістр режиму MR, що визначає роботу каналу.

Наведемо адреси регістрів та його формати для комп’ютера IBM PC/XT.

Порти 00h — 07h

Ці регістри містять базові адреси та лічильники переданих даних каналів О — 3. Їх призначення таке:

00h     Запись: Базовый адрес канала О
        Чтение: Текущий адрес
01h     Запись: Счетчик канала О
        Чтение: Текущий адрес
02h     Запись: Базовый адрес канала 1
        Чтение: Текущий адрес
03h     Запись: Счетчик канала 1
        Чтение: Текущий адрес
04h     Запись: Базовый адрес канала 2
        Чтение: Текущий адрес
05h     Запись: Счетчик канала 2
        Чтение: Текущий адрес
06h     Запись: Базовый адрес канала 3
        Чтение: Текущий адрес
07h     Запись: Счетчик канала 3
        Чтение: Текущий адрес

Порт 08h

Цей порт використовується при записі як керуючий регістр і при читанні як регістр стану.

Формат керуючого регістру:

 7 6 5 4 З 2 1 0
--T-T-T-T-T-T-T-¬
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
LT+T+T+T+T+T+T+T-
 ¦ ¦ ¦ ¦ ¦ ¦ ¦ L- 1 - использование режима память-память;
 ¦ ¦ ¦ ¦ ¦ ¦ ¦    0 - обычный режим работы
 ¦ ¦ ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ ¦ ¦ L--- если используется режим память-память,то 1
 ¦ ¦ ¦ ¦ ¦ ¦      этом разряде разрешает захват канала,
 ¦ ¦ ¦ ¦ ¦ ¦      0 - запрещает; в обычном режиме работы
 ¦ ¦ ¦ ¦ ¦ ¦      состояние этого бита безразлично
 ¦ ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ ¦ L----- 1 - запрет работы DMA;
 ¦ ¦ ¦ ¦ ¦        0 - разрешение работы DMA
 ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ L------- 1 - использование сжатия во времени, если
 ¦ ¦ ¦ ¦              установлен бит обычного режима работы;
 ¦ ¦ ¦ ¦          0 - обычный режим работы
 ¦ ¦ ¦ ¦
  ¦ ¦ ¦ L--------- 1 - вращение приоритетов:
 ¦ ¦ ¦            0 - фиксированные приоритеты
 ¦ ¦ ¦
 ¦ ¦ L----------- 1 - удлиненный цикл записи;
 ¦ ¦              0 - нормальный цикл записи
 ¦ ¦
 ¦ L------------- 1 - используется низкий уровень для
 ¦                    сигнала запроса на DMA DREQ;
 ¦                0 - используется высокий уровень
 ¦
  L--------------- 1 - используется высокий уровень для
                      сигнала запроса на DMA DACK;
                  0 - используется низкий уровень

Зазвичай цей регістр ініціалізується BIOS у процесі тестування системи, і згодом змінювати режим роботи контролера DMA не потрібно. Помилки при ініціалізації цього порту можуть призвести до «зависання» системи.

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

 7 6 5 4 З 2 1 0
--T-T-T-T-T-T-T-¬
¦       ¦       ¦
L-+-+-+-+-+-+-+--
 L--T--- L-----+- Биты 0-3 устанавливаются  в  1  при  достижении
    ¦             счетчиками каналов 0-3 конечных значений
    ¦
    L------------ Биты 4-7 установлены в 1, если имеется
                  разрешение на DMA соответственно каналов 0-3

Порт 09h

Реєстр запиту. Призначений для організації програмного (а не апаратного) запиту на DMA. Для використання програмного запиту канал має бути запрограмований у режимі блокової передачі. Формат регістру:

 7 6 5 4 З 2 1 0
--T-T-T-T-T-T-T-¬
¦         ¦ ¦   ¦
L-+-+-+-+-+T+-+--
 L---T---- ¦ L-+- Номер используемого канала:
     ¦     ¦        00 - канал О;  10 - канал 2;
     ¦     ¦        01 - канал;    11 - канал 3
     ¦     ¦
     ¦     L----- 0 - установить запрос; 1 - сбросить запрос
     ¦
     L----------- Не используются.

Порт 0Ah

Реєстр маски. Використовується для маскування запитів на прямий доступ для окремих каналів:

 7 6 5 4 З 2 1 0
--T-T-T-T-T-T-T-¬
¦         ¦ ¦   ¦
L-+-+-+-+-+T+-+--
 L---T---- ¦ L-+- Номер канала:
     ¦     ¦        00 - канал О;  10 - канал 2;
     ¦     ¦        01 - канал;    11 - канал 3
     ¦     ¦
     ¦     L----- 0 - установить маску; 1 - сбросить маску
     ¦
     L----------- Не используются.

Порт 0Bh

Регістр режиму. Служить визначення режимів роботи калів контролера DMA:

 7 6 5 4 З 2 1 0
--T-T-T-T-T-T-T-¬
¦   ¦ ¦ ¦   ¦   ¦
L-+-+T+T+-+-+-+--
 LT- ¦ ¦ LT- L-+- Номер канала:
  ¦  ¦ ¦  ¦         00 - канал О;  10 - канал 2;
  ¦  ¦ ¦  ¦         01 - канал;    11 - канал 3
  ¦  ¦ ¦  ¦
  ¦  ¦ ¦  L------ Тип цикла DMA:
  ¦  ¦ ¦            00 - цикл проверки;
  ¦  ¦ ¦            01 - цикл записи;
  ¦  ¦ ¦            10 - цикл чтения;
  ¦  ¦ ¦            11 - запрещеннная комбинация.
    ¦  ¦ ¦
  ¦  ¦ L--------- 1 - режим автоинициализации
  ¦  ¦
  ¦  L----------- Приращение адреса:
  ¦                 0 - инкрементирование, 1 декрементирование
  ¦
  L-------------- Режим обслуживания
                    00 - передача по требованию;
                    01 - одиночная передача;
                    10 - блочнная передача;
                    11 - каскадирование

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

Порт 0Dh

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

Порт 0Eh

Скидання регістру маски. Після запису цього регістру будь-якого значення дозволяється робота всіх чотирьох каналів прямого доступу.

Порт 0Fh

Маскування/розмаскування каналів. За допомогою цього порту можна виконати одночасне маскування або розмаскування кількох каналів:

 7 6 5 4 З 2 1 0
--T-T-T-T-T-T-T-¬
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
L-+-+-+-+T+T+T+T-
 L--T--- ¦ ¦ ¦ L- 1 - маскирование канала 0;
    ¦    ¦ ¦ ¦    0 - разрешение канала 0
    ¦    ¦ ¦ ¦
    ¦    ¦ ¦ L--- 1 - маскирование канала 1;
    ¦    ¦ ¦      0 - разрешение канала 1
    ¦    ¦ ¦
    ¦    ¦ L----- 1 - маскирование канала 2:
    ¦    ¦        0 - разрешение канала 2
    ¦    ¦
    ¦    L------- 1 - маскирование канала 3:
    ¦             0 - разрешение канала 3/>    ¦
        L------------ Не используются

Порти 81h-8Fh

Це порти регістрів сторінок.

Для роботи з пам’яттю контролер прямого доступу використовує 20-розрядні фізичні адреси. Шістнадцять молодших біт адреси необхідно записати в регістр базової адреси каналу. Старші чотири біти — біти 16-10 мають бути записані у відповідні порти регістрів сторінок. При ініціалізації регістрів базової адреси та регістру сторінок необхідно стежити за тим, щоб у процесі передачі не відбувався перехід за кордон 64 кілобайт. Для адресації регістрів сторінок можна використовувати порти:

     81h Регистр страниц канала 2
     82h Регистр страниц канала 3>          83h Регистр страниц канала 1

9.1.2. Ініціалізація каналу DMA

Для ініціалізації каналу програма має виконати такі кроки:

     - сбросить триггер байтов командой записи в регистр 0Ch;
          - задать режим работы канала, выполнив запись по адресу
       0Bh в регистр режима MR;
     - заслать младшие 16 битов 20-битового адреса области па-
       мяти, которая будет использована для передачи данных, в
       регистр базового адеса (адрес порта зависит от номера ка-
       нала: 0-й канал использует адрес 00h, 1-й канал - 02h,
       2-и канал - 04h, З-й канал - 06h);
     - заслать номер страницы (старшие 4 бита 20-битового адре-
       са) в соответствующий регистр страниц (81h, 82h или 83h);
     - загрузить регистр циклов прямого доступа к памяти CWR
       значением, на 1 меньшим требуемого количества переда-
       ваемых байтов (адреса этих портов для каналов 0...3 соот-
              ветственно 01h, 03h, 05h, 07h);
     - разрешить работу канала, выполнив запись в регистр маски
       каналов по адресу 0Ah.

Відразу після дозволу канал починає передачу даних. Закінчивши передачу, пристрій зазвичай виробляє переривання, яке є ознакою закінчення передачі.

Контролер прямого доступу для IBM AT

Контролер DMA комп’ютера IBM AT сумісний знизу нагору з контролером IBM PC/XT. Він складається із двох каскадно включених мікросхем Intel 8237A-5. Другий контролер обслуговує канали DMA із номерами 4-7.

Наведемо призначення каналів DMA для IBM AT:

0 - Зарезервировано
1 - Управление синхронной передачей данных SDLC
2 - Адаптер накопителя на гибком магнитном диске (НГМД)
3 - Адаптер накопителя на магнитном диске (НЖМД);
4 - Используется для каскадного соединения с первым
    контроллером DMA.
5-6 Зарезервировано

Інша відмінність – це розрядність каналів. Канали 0-3 є каналами 8-бітової передачі, а канали 4-7 забезпечують 16-бітову передачу даних. У зв’язку з цим використовуються всі 8 бітів регістрів сторінок. Формується 24-бітова адреса з 16 молодших бітів адреси, що записуються в базові регістри, і 8 старших бітів адреси, що записуються в регістри сторінок.

Розмір сторінки складає 128 кілобайт, тому при передачі даних із використанням DMA не повинна перетинатися межа 128 кілобайт.

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

81h  -  Регистр страниц канала 2
82h  -  Регистр страниц канала 3
83h  -  Регистр страниц канала 1
87h  -  Регистр страниц канала 0
89h  -  Регистр страниц канала 6
8Bh  -  Регистр страниц канала 5
8Ah  -  Регистр страниц канала 7
8Fh  -  Регенерация динамической памяти

Для 16-бітових каналів 4-7 передача даних починається з межі слова та всі адреси відносяться до 16-бітових слів.

Порти 0C0h-0CFh

Ці регістри містять базові адреси та лічильники переданих даних каналів 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:

0D0h - Управляющий регистр/регистр состояния
0D2h - Регистр запроса
0D4h - Регистр маски
0D6h - Регистр режима
0D8h - Сброс триггера байтов
0DAh - Сброс контроллера
0DCh - Сброс регистра маски
0DEh - Маскирование/размаскирование каналов

© Реферат плюс



Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *