Поиск по базе сайта:
Лабораторна робота №7 тема: Контролер прямого доступу до пам’яті. Мета: Опанування основ роботи І програмуванням контролера прямого доступу до пам’яті в комп’ютері івм рс. Теоретичні icon

Лабораторна робота №7 тема: Контролер прямого доступу до пам’яті. Мета: Опанування основ роботи І програмуванням контролера прямого доступу до пам’яті в комп’ютері івм рс. Теоретичні




Скачати 154.52 Kb.
НазваЛабораторна робота №7 тема: Контролер прямого доступу до пам’яті. Мета: Опанування основ роботи І програмуванням контролера прямого доступу до пам’яті в комп’ютері івм рс. Теоретичні
Дата конвертації25.10.2014
Розмір154.52 Kb.
ТипЛабораторна робота



Лабораторна робота №7
ТЕМА: Контролер прямого доступу до пам’яті.
МЕТА: Опанування основ роботи і програмуванням контролера прямого доступу до пам’яті в комп’ютері ІВМ РС.

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

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

Для здійснення ПДП контролер повинен виконати наступні операції:

  1. прийняти запит (DRQ) від пристрою введення/виведення;

  2. видати HRQ у процесор на захоплення шини (HOLD);

  3. прийняти сигнал HLDA, який дозволяє захоплення шини;

  4. сформувати сигнал (DACK), який повідомляє пристрій про початок обміну даними.


Призначення каналів ПДП для IBM AT.

^ Номер каналу

Призначення

0, 5, 6, 7

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

1

Керування синхронною передачею даних (SLDC)

2

Обмін з контролером гнучких дисків

3

Обмін з контролером жорстких дисків

4

Для каскадного з’єднання з 1-м контролером ПДП



^ Принцип роботи контролера ПДП

У роботі ПДП розрізняються 2 головних цикли: цикл чекання (Idle cycle) і активний цикл (Active cycle). Кожен цикл підрозділяється на ряд станів, що займають за часом один період часів (тик). З циклу чекання контролер може бути переведений у стан програмування (Program Condition) шляхом подачі на вхід RESET сигналу високого рівня, тривалістю не менше 300 нс і наступної за ним подачі сигналу низького рівня (рівня 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 ("Запит на захоплення") відомого контролера подається на вхід DREQ ("Запит на ПДП") ведучого, а сигнал DACK ("Підтвердження запиту") ведучого подається на вхід HDLA ("Підтвердження захоплення") відомого. Така схема підключення аналогічна підключенню ведучого (першого) контролера до мікропроцесора, з яким він обмінюється сигналами HRQ і HDLA.

Типи передач

1. Передача пам'ять-пам'ять (Memory-to-memory DMA). Використовується для передачі блоку даних з одного місця пам'яті в інше. Вихідна адреса визначається в регістрах нульового каналу, вихідний - у регістрах першого каналу. Число циклів обміну (число байт мінус 1) задається в регістрі числа циклів каналу 1. Передача відбувається з використанням робочого регістра контролера як проміжної ланки для збереження інформації. При передачі пам'ять-пам'ять може бути заданий спеціальний режим фіксації адреси (Address hold), при якому значення поточного адреси в регістрі нульового каналу не змінюється, при цьому весь вихідний блок пам'яті заповнюється тим самим елементом даних, що знаходиться по заданій адресі.

2. Авто-ініціалізація (автозавантаження, Autoinitialization). Після завершення звичайної передачі використаний канал ПДП маскується і повинен бути перепрограмований для подальшої роботи з ним. При авто-ініціалізації маскування каналу після закінчення передачі не відбувається, а регістри поточного адреси і лічильник циклів автоматично завантажуються з відповідних регістрів з початковими значеннями. У такий спосіб для продовження (повторення) обміну досить виставити сигнал запиту на ПДП по даному каналі.

3. Режим фіксованих пріоритетів. У цьому режимі канал 0 завжди має максимальний пріоритет, а канал 3 - мінімальний. Це означає, що будь-яка передача по каналу з більш високим пріоритетом буде виконуватися раніше, ніж по каналу з більш низьким пріоритетом.

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

5. Стиск часу передачі (Compressed transfer timing). У випадку, якщо тимчасові характеристики швидкодії пристроїв, що обмінюються, збігаються, ПДП може скоротити час виконання кожного такту передачі на 2 цикли часів за рахунок тактів чекання, що входять у кожен цикл передачі.

Опис внутрішніх регістрів ПДП




Контролер має 344 біта внутрішньої пам'яті, організованої у вигляді регістрів. Опис внутрішніх регістрів ПДП приведено в таблиці.

Назва регістру

Розрядність (біт)

Кількість регістрів

Регістр початкової адреси (BAR)

16

4

Регістр початкового лічильника циклів (BWCR)

16

4

Регістр поточної адреси (CAR)

16

4

Регістр поточного лічильника циклів (CWCR)

16

4

Робочий регістр адреси (TAR)

16

1

Робочий регістр лічильника циклів (TWCR)

16

1

Регістр стану (SR)

8

1

Регістр команд (CR)

8

1

Регістр режиму (MR)

8

4

Робочий регістр (TR)

8

1

Регістр масок (Mask Register)

4

1

Регістр запитів (RR)

4

1

Регістр початкової адреси (Base Address Register). У цьому регістрі задається стартова адреса ОЗУ, з якого починається передача. Регістр містить 16 розрядів і визначає адреса усередині заданої сторінки пам'яті розміром 64 кб. Завдання номера сторінки пам'яті здійснюється через спеціальні сторінкові регістри (Page Registers), підтримувані зовнішньою логікою. Кожен канал ПДП має свій регістр початкової адреси і сторінковий регістр. Такий розподіл пам'яті на сторінки не дозволяє здійснити обмін із блоком пам'яті, що знаходиться на перетинанні двох сторінок. Кожна сторінка починається із сегментної адреси, кратного 1000h (0, 1000h, 2000h, ..., 9000h).

Регістр початкового лічильника циклів (Base Word Count Register). У цьому регістрі задається початкове число циклів передачі для програмувального каналу. Фактичне число переданих під час роботи ПДП елементів даних на одиницю перевищує задане число циклів.

Регістр поточного адреси (Current Address Register). Початкове значення заноситься в цей регістр одночасно з регістром початкової адреси. Надалі в ході передачі значення поточного адреси автоматично чи збільшується зменшується (конкретний напрямок зміни задається при програмуванні в регістрі режиму). Якщо дозволена авто-ініціалізація, то після закінчення передачі в регістр автоматично встановлюється значення з регістра початкової адреси.

Регістр поточного лічильника циклів (Current Word Count Register). Регістр містить поточне значення лічильника циклів (число циклів передачі, що залишилися). Відображуване в ньому число циклів завжди на одиницю менше числа ще не переданих елементів даних, тому що зміна значення в цьому регістрі проводиться наприкінці циклу передачі, уже після фактичної передачі елемента даних, а кінець передачі фіксується в момент переповнення лічильника (зміна його значення з 0 на 0FFFFh).

Р
егістр режиму (Mode Register).
Даний регістр задає режими роботи свого каналу контролера.



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

Регістр команд (Command Register). Цей 8-бітний регістр керує роботою контролера. Він програмується, коли контролер знаходиться в стані програмування й очищається командами скидання "Reset" і "Master Clear". Призначення бітів регістра команд приведено нижче


^ Р
егістр стану (Status Register).
Регістр відображає поточний стан запитів і передач по всім чотирьох каналах. Біти 0 - 3 встановлюються в одиницю після завершення передачі по каналах 0 - 3 (біт 0 - канал 0, біт 1 - канал 1 і т.д.), якщо не заданий режим авто-ініціалізації. Ці біти очищаються після команди скидання контролера і після кожної операції зчитування стану з регістра стану. Біти 4 - 7 указують по якому з каналів 0 - 3 активний в даний момент сигнал запиту на ПДП.

^ Регістр масок (Mask Register). Кожен біт цього 4-бітового регістра маскує/демаскує свій канал ПДП, при цьому значення 1 маскує канал, значення 0 демаскує канал і дозволяє прийом сигналу запиту по цьому каналу.





^ Регістр запитів (Request Register). Сигнал запиту на ПДП (DREQ) може бути виданий як пристроєм, що обслуговується, так і програмно. Для програмного видання сигналу запиту по одному з 4-х каналів ПДП необхідно установити відповідний біт у 4-розрядному регістрі запитів. Запит на ПДП може бути відмінений записом нульового значення у відповідний біт регістра. Біт запиту очищається автоматично при закінченні передачі по даному каналу. Усі біти запитів очищаються при скиданні контролера. Для того, щоб сприймати програмні запити на ПДП, канал повинен знаходиться в режимі блокової передачі.

Р
обочий регістр (Temporary Register).
Цей 8-розрядний регістр використовується для збереження елемента даних, переданого в режимі фіксованої адреси при передачі пам'ять або для тимчасового збереження переданого байта при всіх інших режимах передачі.

Програмне керування контролером ПДП

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

У таблиці приведений опис портів введення-виведення, призначених для керування контролером ПДП.

Порт

Режим

Призначення

0, 2, 4, 6

запис

Запис початкової адреси в регістр початкової адреси відповідно каналу 0, 1, 2, 3

читання

Читання поточної адреси в регістр початкової адреси відповідно каналу 0, 1, 2, 3

1, 3, 5, 7

запис

Запис в регістр початкового лічильника циклів і в регістр поточного лічильника циклів відповідно каналу 0, 1, 2, 3

читання

Читання поточного значення з регістру поточного лічильника циклів відповідно каналу 0, 1, 2, 3

8

запис

Запис регістра команд КПДП

читання

Читання регістру стану КПДП

9

запис

Запис в регістр запитів КПДП

0Ah

запис

Запис біта маски для каналів 0-3 КПДП

0Bh

запис

Запис регістра режимів для каналів 0-3 КПДП

0Ch

запис

Очищення (скидання) тригера-засувки

0Dh

запис

Програмне скидання контролера

0Eh

запис

Очищення бітів масок каналів 0-3

0Fh

запис

Запис регістра масок для каналів 0-3

читання

Читання робочого регістра КПДП

Порти 0h - 7h призначені для запису вихідних значень у регістри початкової і поточної адреси, початкового і поточного лічильника циклів для каналів 0-3. В силу того, що порти 8-розрядні, а регістри, в які через них заносяться дані – 16-розрядні, то запис виконується в два прийоми. Перед першою командою виведення в необхідний порт необхідно скинути тригер-засувку, для чого виконується команда виведення довільного значення в порт 0Ch, після чого в необхідний порт виводиться молодший байт 16-розрядного значення і потім старший байт наступною командою виведення в той же порт.


Приклад завантаження початкової адреси каналу 1:
Мова Asm86:

.

mov al, 0

out 0Ch, al ; Скидання тригера-засувки перед записуванням потрібних

; значень в регістр початкової адреси каналу 1
mov al, LowByte

out 2h, al; завантаження молодшого байту початкової адреси каналу 1

mov al, HighByte

out 2h, al; завантаження старшого байту початкової адреси каналу 1

.
Мова C:

.

outportb(0x0С, 0xB6); // Скидання тригера-засувки перед записуванням

// потрібних значень в регістр початкової адреси

// каналу 1

outportb(0x2, char(Address)); // завантаження молодшого байту

// початкової адреси каналу 1

outportb(0x2, char(Address>>8)); // завантаження старшого байту

// початкової адреси каналу 1

.

Виведення в порт 8h дозволяє занести значення в регістр команд ПДП. Читання з порту 8h зчитує регістр стану ПДП. Опис бітів регістра стану та регістра команд було приведено вище.

Запис у порт 9h дозволяє встановити або скинути біт запиту в регістр запитів для одного з каналів.

Запис у порт 0Ah дозволяє встановити або скинути біт маски в регістрі масок для одного з каналів.

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

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

Виведення будь-якого байта в порт 0Eh очищає регістр масок - скидає біти масок усіх 4-х каналів ПДП і в такий спосіб дозволяє прийом запитів на ПДП по всіх каналах.

Через порт 0Fh можна задати довільне значення регістра масок ПДП. Для цього необхідно в бітах 0 - 3 регістри AL установити необхідне значення масок каналів 0 - 3 відповідно і вивести це значення в порт.

Доступ до регістрів сторінок ПДП здійснюється через наступні порти:

Номер каналу

Номер порту

0

87h

1

83h

2

81h

3

82h

5

8Bh

6

89h

7

8Ah

IBM PC AT и AT-подібні ПЕОМ мають два контролера ПДП 8237А, які працюють в каскадному режимі.

Керування каналами 4 - 7 здійснюється аналогічно PC/ХТ. Канали 4 - 7 призначені для обміну 16-розрядними словами. У зв'язку з цим виникає ряд відмінностей у роботі з цими каналами:

- біт 0 у даних, що заносяться в регістри початкового і поточного адреси, завжди мається на увазі рівним 0, тому через ці регістри передаються біти 1 - 16 повної 23-розрядної адреси (а не біти 0 - 15 повної 20-розрядної адреси, як це реалізовано на ХT – подібних ПЕОМ), по цій же причині в сторінкові регістри каналів 4 - 7 заносяться біти 17 - 23 повної адреси, а не біти 16 - 20, як це треба зробити при роботі з каналами 0 - 3;

- оскільки передача здійснюється 16-розрядними словами, у регістри поточного і початкового лічильника циклів заноситься не число байт, а число слів, зменшене на одиницю;

- розміри сторінок пам'яті, у межах яких можливий обмін протягом однієї передачі складають 2000h байтів.

У таблиці приведений опис портів введення-виведення, призначених для керування другим контролером ПДП.

Порт

Режим

Призначення

0C0h, 0C4h, 0C8h, 0CCh

запис

Запис початкової адреси в регістр початкової адреси відповідно каналу 4, 5, 6, 7

читання

Читання поточної адреси в регістр початкової адреси відповідно каналу 4, 5, 6, 7

0C2h, 0C6h, 0CAh, 0CEh

запис

Запис в регістр початкового лічильника циклів і в регістр поточного лічильника циклів відповідно каналу 4, 5, 6, 7

читання

Читання поточного значення з регістру поточного лічильника циклів відповідно каналу 4, 5, 6, 7

0D0h

запис

Запис регістра команд КПДП

читання

Читання регістру стану КПДП

0D2h

запис

Запис в регістр запитів КПДП

0D4h

запис

Запис біта маски для каналів 4-7 КПДП

0D6h

запис

Запис регістра режимів для каналів 4-7 КПДП

0D8h

запис

Очищення (скидання) тригера-засувки КПДП

0DAh

запис

Програмне скидання контролера

0DCh

запис

Очищення бітів масок каналів 4-7

0DEh

запис

Запис регістра масок для каналів 4-7

0DAh

читання

Читання робочого регістра КПДП

Формати даних, що вводяться/виводяться через ці порти збігаються з форматами даних аналогічних портів першого контролера. При роботі з цими портами варто тільки враховувати, що нумерація каналів починається не з 0, як у першого контролера, а з 4 (канал 4 - це канал 0 другого контролера, канал 5 - це його канал 1 і т.д.).



Завдання

Розробити блок-схему алгоритма та програму, яка ініціалізує DMA на запис блоку даних на дискету.

Контpольнi питання


              1. Пpизначення контролера прямого доступу до пам’яті;

              2. Призначення каналів КПДП для IBM AT;

              3. Які порти використовуються для роботи з КПДП;

              4. Принцип роботи КПДП;

              5. Типи передач, що здійснює КПДП;

              6. Призначення регістрів КПДП;

              7. Каскадування контролерів;

              8. Відмінність КПДП для IBM AT і IBM XT.






Схожі:




База даних захищена авторським правом ©lib.exdat.com
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації