Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНА РОБОТА2.docx
Скачиваний:
2
Добавлен:
13.11.2019
Размер:
211.09 Кб
Скачать

Лабораторна робота №2 Системний таймер.

Мета: вивчення функцій системного таймера та набуття практичних навичок роботи з таймером та динаміком при генерації звука.

Теоретичні відомості

Структура та призначення таймера

Всі комп'ютери IBM містять 3-х канальний 16-ти розрядний пристрій, що називається системним таймером. Таймер реалізується на мікросхемі Intel 8253 (для IBM PC та IBM XT) або 8254 (для IBM AT та IBM PS/2). Структурна схема системного таймера зображена на рис.2.1.

Таймери 8253 та 8254 складаються з трьох незалежних каналів. Кожний канал містить регістри:

– стану каналу RS (8 розрядів);

– керуючого слова PSW (6 розрядів);

– буферний регістр OL (16 розрядів);

– регістр лічильника CE (16 розрядів);

– регістр констант перерахунку CR (16 розрядів).

Канали таймера підключаються до зовнішніх приладів за допомогою трьох ліній:

– GATE - керуючий вхід;

– CLOCK - вхід тактової частоти;

– OUT - вихід таймера.

Регістр лічильника CE працює в режимі віднімання. Його вміст зменшується по задньому фронту сигналу CLOCK за умови, що на вході GATE встановлений рівень логічної 1. В залежності від режиму роботи таймера при досягненні лічильником CE нуля тим або іншим способом змінюється вихідний сигнал OUT.

Буферний регістр OL потрібен для запам’ятовування поточного вмісту регістру лічильника CE без зупинки процесу рахування. Після запам’ятовування буферний регістр є доступним програмі для зчитування.

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

Вміст регістру CR змінюється тільки при перезавантаженні лічильника або при перепрограмуванні режиму (запису керуючого слова). При перепрограмуванні вміст CR обнулюється.

Регістр стану каналу RS зберігає поточний стан каналу і може бути зчитаний для вибраного каналу командою "зворотне читання".

Регістр керуючого слова PSW зберігає керуючу інформацію каналу і задає його режим роботи до наступного перепрограмування.

Системний генератор імпульсів (СГІ) незалежно від типу і продуктивності комп'ютера IBM виробляє імпульси однієї і тієї же частоти - 1 193180 Гц.

Рис. 2.1 – Структурна схема таймера

В комп'ютерах IBM PC/XT/AT/PS2 задіяні всі три канали таймера. Канал 0 використовується в системному годиннику. Цей канал працює в режимі 3 і використовується як генератор імпульсів з частотою приблизно 18.2 Гц. Вихід каналу OUT0 підключений до лінії запиту на переривання IRQ0 і виробляє переривання INT 8h приблизно 18.2 разу в секунду (точне значення - 1193180/65535 разу в секунду).

При ініціалізації BIOS встановлює свій оброблювач для переривань таймера. Ця програма кожний раз збільшує на 1 поточне значення 4-байтової змінної, що розташована в області даних BIOS за адресою 0040: 006Ch - лічильника тіков таймера.

Якщо цей лічильник переповнюється (тобто минуло більш 24 годин з моменту запуску таймера), в середину 0040: 0070h заноситься 1.

Стандартний оброблювач переривань таймера здійснює також контроль за роботою двигунів НГМД. Якщо після останнього звернення до НГМД минуло більше 2 секунд, оброблювач переривань вимикає двигун (адреса 0040:0040h містить час, що залишився до виключення двигуна).

Остання дія, яку виконує оброблювач переривань таймера, це виклик переривань INT 1Ch. Після ініціалізації системи вектор INT 1Ch вказує на команду IRET, тобто нічого не виконується. Програма користувача може встановити власний оброблювач цього переривання для того, щоб виконати будь-які періодичні дії.

Необхідно відзначити, що переривання INT 1Ch викликається до скидання контролера переривань, тому під час виконання переривання INT 1Ch всі апаратні переривання заборонені. Для скидання контролера переривань треба в порт 20h записати значення 20h. На рис.2.2. зображений механізм обробки переривання таймера.

Рис.2.2 – Механізм обробки переривань таймера

Канал 1 використовується для регенерації вмісту динамічної пам'яті комп'ютера, тому його краще не чіпати. Вихідна лінія каналу OUT зв'язана з мікросхемою прямого доступу до пам’яті (DMA), і її імпульс змушує DMA регенерувати пам'ять. Канал використовує режим 2 таймера. Канал 2 зв'язаний з гучномовцем (динаміком) комп'ютера і може бути використаний для генерації різноманітних звуків або музики або як генератор випадкових чисел. Канал використовує режим 3 таймера.

Програмування таймера

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

Оскільки розмір даних, що записуються у порт обмежується 1 байтом, то запис даних більшого об’єму виконується у відповідності з вказівками керуючого слова.

Таймеру відповідають 4 порти вводу/виводу з наступними адресами: 40h - канал 0; 41h - канал 1; 42h - канал 2; 43h - керуюче слово. Призначення бітів керуючого регістру (керуючого слова) наступне:

0: 0 – двійкові дані; 1 - дані в формі BCD (двійково-десяткові)

1-3: номер режиму: 000 – режим 0 (переривання термінальної лічби); 001 – режим 1 (програмуємий чекаючий мультивібратор); X01 – режим 2 (програмуємий генератор імпульсів); X11 – режим 3 (генератор меандра); 100 – режим 4 (програмно-запускаємий одновібратор); 101 – режим 5 (апаратно-запускаємий одновібратор)

5-4: тип операції: 00 – передати значення лічильника в буфер (читання на льоту); 01 – читати/писати тільки старший байт; 10 – читати/писати тільки молодший байт; 11 – читати/писати спочатку молодший байт потім – старший;

7-6: номер каналу: 00 – канал 0; 01 – канал 1; 10 – канал 2; 11 – код команди RBC ("зворотне читання").

Молодший розряд байта визначає формат константи, що використовується для рахування. В двійково-десятковому форматі константа задається в діапазоні 1-9999, в двійковому форматі діапазон рівний 1h-FFFFh.

Для визначення поточного значення регістру лічильника можна використати просте читання (читання з портів 40h-42h), але на час читання повинен бути заблокований сигнал CLK або встановлений GATE=0 для зупинення рахування, інакше вміст лічильника може бути змінений при читанні.

При читанні вмісту лічильника каналу "на льоту", тобто без зупинки процесу рахування, необхідно в 43h порт послати керуюче слово, призначення бітів якого наступне:

7-6: задають номер каналу (0, 1, 2);

5-4: містять нулі - код даної команди.

Інші біти не мають значення і керуюче слово не завантажується в регістр PSW (тобто не міняється режим роботи каналу), по ньому тільки запирається вміст CE в вихідному регістрі OL і може бути прочитаний через порт 40h+N (де N - номер каналу) по правилу, що задається розрядами 5 і 4 регістру PSW. При читанні двох байт (код 3h) після читання першого (молодшого) байта можливі операції запис/читання інших каналів.

"Зворотне читання" дозволяє визначити поточний стан регістрів CE вибраних одного, двох або всіх трьох каналів і/або визначити стан (режим роботи, тип рахування, код читання/запису, признак перезавантаження констант, стан сигналу OUT) на час виконання команди.

Для виконання "зворотного читання" необхідно в порт 43h записати керуюче слово, призначення бітів якого наступне:

0: повинен бути рівний 0;

1: CNT0, вибір нульового каналу при CNT0=1;

2: CNT1, вибір першого каналу при CNT1=1;

3: CNT2, вибір другого каналу при CNT2=1;

4: STATUS, запирається стан каналів, визначених в 1-3 розрядах при STATUS=0;

5: COUNT, запирається поточний стан лічильників (регістрів CE) каналів, визначених в 1-3 розрядах при COUNT=0;

6-7: код команди "зворотне читання". Обидва біти повинні дорівнювати одиниці.

Як при "читанні на льоту" дане керуюче слово не записується в регістр PSW і не міняє режимів роботи каналів. Читання запертих значень каналів, означених в розрядах 1-3, виконується з портів 40h-42h.

При цьому якщо в керуючому слові "зворотного читання" обидва біти STATUS і COUNT (4-й і 5-й) рівні нулю і, наприклад, біт 3-й (CNT2) рівний одиниці (вибраний другий канал), то при першому читанні з 42h порту прочитається заперте слово стану каналу, а при двох наступних читаннях з того ж 42h порту - молодший і старший байт запертого регістру CE. Формат (значення бітів) прочитаного слова стану наступний:

0: тип рахування (0 – двійковий, 1 – двійково-десятковий BCD);

1-3: код режиму роботи;

4-5: код читання/запису констант рахування;

6: ознака перезавантаження (0 – константа завантажена в CE, 1 – не завантажена);

7: стан вихідного сигналу (0 – OUT=0, 1 – OUT=1).

Генерація звуків і музики

Звуки і музику на ПЕОМ можна відтворювати двома засобами: з використанням таймера; без використання таймера.

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

Відзначимо, що в усіх моделях IBM, за винятком IBM PCjr, що має (окрім динаміка) спеціальний звуковий генератор, гучність звука не змінюється.