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

Кожен канал має 16-розрядний регістр поточної адреси. Цей регістр зберігає

молодші розряди адреси, що використовуються під час обслуговування ПДП.

 


Адреса автоматично зменшується або збільшується після кожної передачі, а проміжне значення адреси запам’ятовується в регістрі під час передачі. Регістр поточної адреси доступний лише для читання. Читання двох байтів з цього регістра здійснюється побайтно за дві операції, спочатку – читання молодшого байта, потім – старшого.

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

Кожен канал має 16-розрядний регістр поточного лічильника слів. Цей регістр визначає кількість передач, які необхідно виконати. У режимі програму- вання регістр CCR може бути побайтно записаний або прочитаний мікропроцесо- ром. Між обслуговуванням, коли мікропроцесору дозволяється виконувати опера- ції, проміжні значення адреси та лічильника слів зберігаються в регістрах поточної адреси та лічильника відповідного каналу.

Базові регістри адрес та лічильника (BAR та CAR)

Кожен канал має два регістри: регістр базової адреси та регістр базового лічильника. Ці регістри зберігають початкові значення відповідних поточних

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

Тимчасовий регістр (TR)

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

 

 

Таблиця 8 – Адреси портів, регістри та доступ

 

  Функції регістрів Адреси портів   Читання/запис
КПДП1 КПДП2
Регістр стану (STAT) Регістр команд (CR)   008h   0D0h читання запис
  Регістр режиму (MOD)   00Bh   0D6h читання запис
Регістр маски (MASK) – запис одиночних розрядів   00Ah   0D4h   запис
Регістр маски (MASK) – запис усіх розрядів   00Fh   0DEh   запис
  Регістр запитів (REQ)   009h   0D2h запис читання
Базовий та поточний регістри адреси (канал 0)   000h   0C0h   запис
Поточний регістр адреси (канал 0)   000h   0C0h   читання
Базовий та поточний регістри лічиль- ника (канал 0)   001h   0C2h   запис
Поточний регістр лічильника (канал 0)   001h   0C2h   читання

 

 


Продовження таблиці 8

 

Базовий та поточний регістри адреси (канал 1)   002h   0C4h   запис
Поточний регістр адреси (канал 1)   002h   0C4h   читання
Базовий та поточний регістри лічиль- ника (канал 1)   003h   0C6h   запис
Поточний регістр лічильника (канал 1)   003h   0C6h   читання
Базовий та поточний регістри адреси (канал 2)   004h   0C8h   запис
Поточний регістр адреси (канал 2)   004h   0C8h   читання
Базовий та поточний регістри лічиль- ника (канал 2)   005h   0CAh   запис
Поточний регістр лічильника (канал 2)   005h   0CAh   читання
Базовий та поточний регістри адреси (канал 3)   006h   0CCh   запис
Поточний регістр адреси (канал 3)   006h   0CCh   читання
Базовий та поточний регістри лічиль- ника (канал 3)   007h   0CEh   запис
Поточний регістр лічильника (канал 3)   007h   0CEh   читання
Тимчасовий регістр даних 00Dh 0D8h читання

 

Канали системи ПДП ПЕОМ

Перші чотири (0 – 3) канали контролера 1 реалізують байтові передачі,

канали 5 – 7 координують ПДП-передачі словами; канал 4 виділено для каскаду-

вання. Всі запити на захоплення шини від контролера 1 обробляються через канал

4 контролера 2, що недоступний для ПДП-передач.

 

 

Таблиця 9 – Розподілення каналів контролера ПДП

 

Канал Використання в AT
  Резерв
  Адаптер інтерфейса SDLC
  Адаптер НГМД
  Резерв
  Використовується для каскадування контролерів
  Резерв
  Резерв
  Резерв

 


Ініціалізація КПДП

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

· скинути тригер байтів командою запису в регістр 0Ch;

· задати режим роботи каналу, виконавши запис за адресою 0Bh у регістр режиму MR;

· заслати молодші 16 бітів 20-розрядної адреси області пам’яті, яка буде використана для передачі даних, у регістр базової адреси (адреса порту залежить

від номера каналу: канал 0 використовує адресу 00h, канал 1 – 02h, канал 2 – 04h,

канал 3 – 08h);

· заслати номер сторінки (старші 4 біти адреси) в регістр сторінок (наприк-

лад 81h);

· завантажити регістр циклів прямого доступу до пам’яті CWR значенням на 1 меншим потрібної кількості байтів, які передаються (адреси портів для каналів 0, 1, 2, 3 відповідно 01h, 03h, 05h, 07h);

· дозволити роботу каналу, виконавши запис у регістр маски каналів за адресою 0Ah.

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

передачі даних.

 

 

МЕТОДИЧНІ ВКАЗІВКИ

 

 

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

30-ї доріжки флопі-диска A: у виділену в ОЗП буферну область. Отримані дані далі виводяться на екран дисплея у вигляді: номер байта – вміст байта. Передача здійснюється через КПДП.

Для виконання даної роботи потрібні знання та навички програмування мовою С, грунтовні знання архітектури та принципів функціонування КПДП, а також знання та навички програмування каналів ПДП.

 

 

ЛІТЕРАТУРА

 

 

1. Гук М. Аппаратные средства IBM PC. Энциклопедия. – СПб.: “Издательс-

тво Питер”, 1999. – 816 с.

2. Гуржій А. М., Коряк С. Ф., Самсонов В. В., Скляров О. Я. Архітектура, принципи функціонування і керування ресурсами IBM PC: Навч. посібник.

Харків: ТОВ. “Компанія СМІТ”, 2003. – 512 с.

3. Зубков С. В. Ассемблер для DOS, Windows и Unix. – М.: ДМК, 1999. –

640 с.

4. Фролов А. В., Фролов Г. В. Аппаратное обеспечение персонального ком-

пьютера. – М.: ДИАЛОГ МИФИ, 1997. – 304 с.

 


ЗАВДАННЯ

 

 

1. Дослідити текст програми. Визначити в якому режимі працює канал 2

КПДП.

2. За текстом програми нарисувати схему алгоритму.

3. На вінчестері створити каталог DMA.

4. За допомогою середовища Borland C++ 3.1 створити символьний файл тексту програми і записати його у каталог DMA.

5. Виконати налагодження програми та запустити її на виконання.

6. Змініти номер доріжки, голівки, сектора та виконайте пункт 5. Зробити висновки про власні спостереження і спробувати розробити рекомендації про вдосконалення дослідженої програми.

7. Змінити програму таким чином, щоб вміст сектора дискети виводився у

вигляді таблиці на весь екран монітора.

8. Змінити програму таким чином, щоб можна було оперативно задавати за допомогою клавіатури номера голівки, доріжки, сектора з контролем відповідно-

сті граничним значенням заданих параметрів.

9. Зробити висновки.

 

 

ТЕКСТ ПРОГРАМИ

 

 

#include <dos.h>

#include <alloc.h>

#include <conio.h>

#include <stdio.h>

 

void wait7bit (void)

{

while ((inportb (0x3F4) & 0x80) == 0);

}

 

void ngmd (unsigned char byte)

{

wait7bit ();

outportb (0x3F5, byte);

}

 

void main (void)

{

unsigned char *buf;

int i, k;

long addrbuf;

unsigned hbuf, lbuf;

unsigned z_es, z_bx;

 

buf = (unsigned char*) malloc (512);

addrbuf = 16L * (long) FP_SEG (buf) + (long) FP_OFF (buf);

hbuf = addrbuf >> 16;

lbuf = addrbuf & 0xFFFF;

 


// ввімкнення електродвигуна НГМД диска A

outportb (0x3F2, 0x1C);

// затримка 0,5 с для розгону двигуна

delay (450);

// встановлення магнітної голівки НГМД:

// F – код команди пошуку

// 0 – номер накопичувача А

// 30 – номер доріжки

ngmd (0xF);

ngmd (0);

ngmd (30);

// очікування встановлення біта 7 регістра статусу НГМД

wait7bit ();

// затримка для встановлення магнітних головок на доріжку

delay (225);

 

outportb (0xB, 0x46);

outportb (0xC, 0x46);

outportb (0x4, (unsigned char) lbuf & 0xFF);

outportb (0xC, (unsigned char) ((lbuf & 0xFF00) >> 8));

 

outportb (0x5, 0xFF); outportb (0x5, 0x1); outportb (0xA, 0x2);

 

// вимкнення електродвигуна НГМД диска A

outportb (0x3F2, 0xC);

 

k = 0;

for (i = 0; i < 512; i++) {

printf (“%3d | %X\n”, i, buf[i]);

if ((k % 24) == 0) getch ();

k++;

}

}

 

КОНТРОЛЬНІ ЗАПИТАННЯ

 

 

1. Дайте визначення системи прямого доступу до пам’яті.

2. Перелічіть основні програмно доступні регістри та лічильники КПДП

i8237A.

3. Призначення та характеристики циклічного зсуву пріоритетів каналів.

4. Вкажіть послідовність дій при ініціалізації ПКП.

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

 

 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: