Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архітектура методичка.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
20.71 Mб
Скачать

95. Паралельний інтерфейс lpt-порт. Стандартний режим spp

ПК може працювати з трьома паралельними портами (LPT1 - LPT3), до яких підключаються принтери, плоттери, сканери і т.д. Для підключення використовується стандартний роз'єм Centronix, що має 36 контактних виходів (вітчизняний аналог ИРПР-М).

Кожен паралельний порт має свій адаптер. Адаптер управляється регістрами введення / виводу які відображаються на різні області простору введення / виведення кожного адаптера. Область даних BIOS містить базові адреси для кожного адаптера. Базова адреса відповідає молодшому адресою групи регістрів. Базова адреса для LPT1 зберігається в двухбайтного змінної за адресою 0040:0008 h (378h) для LPT2 - за адресою 0040:000 Ah (278h), для LPT3 - за адресою 0040:000 Ch (стандартом не визначений і практично не використовується).

Для LPT1 використовується сигнал переривання IRQ7 (вектор переривання OFh), для LPT2 - IRQ5 (вектор ODh).

Спочатку LPT-порт розроблявся для паралельних матричних принтерів (інших принтерів ще не було), що працюють в основному в текстовому режимі під управлінням MS-DOS. Це зумовило його односпрямований режим роботи та специфіку керуючих сигналів. Зараз цей режим носить назву стандартного режиму або SPP (Serial Parallel Port) і підтримується всіма адаптерами. Надалі були розроблені вдосконалені протоколи обміну і відповідні їм режими (ЕРР і ЕСР).

3.2Л. Стандартний режим SPP

Передача односпрямована (від комп'ютера до пристрою), програмно ¬ керований обмін, при якому передача кожного байта супроводжується циклом квитирования (запит на передачу, підтвердження готовності пристрою до прийому, передача байта, підтвердження правильності прийому). У стандартному режимі використовується три регістра, що мають зсув щодо базової адреси 0,1 і 2 відповідно.

Призначення зазначених регістрів наступне:

- Регістр вихідних даних (зміщення О, W) - це той адресу порту, через який проходить кожен байт даних, що посилається в пристрій, при читанні дозволяє вважати останній байт, переданий пристрою;

- Регістр статусу (зсув 1, R) - дозволяє прочитати значення сигналів інтерфейсу (поточна інформація про пристрої). Процесор може постійно опитувати його, щоб розпізнати момент, коли прийнятий черговий байт і можна посилати наступний байт даних. Регістр статусу повідомляє також про помилки. Призначення його біт:

0-2: не використовуються;

3:0 - при друку виникла помилка (сигнал ERROR #);

4:0 - пристрій в автономному режимі (сигнал SELECT #);

5:1 - сигнал "кінець папери" (сигнал РЕ);

6:0 - пристрій готовий до прийому наступного символу (сигнал АСК #);

7: 0 - пристрій зайнятий, в автономному режимі або сталася помилка (сигнал BUSY).

- Регістр управління (зміщення 2, W) - ініціалізує адаптер і управляє виводом даних. Він може також готувати паралельний порт для операцій переривання, з тим щоб пристрій посилало переривання до процесора, коли він готовий до прийому чергового символу, залишаючи процесор вільним для інших справ. Призначення його біт і відповідних сигналів інтерфейсу:

0: біт запуску друку. Для запуску друку символу потрібно на короткий час встановити біт 0 регістра керування в 1, а потім скинути його (сигнал STROBE #);

1: 1 - після повернення каретки виводити переклад рядка (в MS-DOS повинен бути скинутий в 0) (сигнал AUTOLINEFEED #);

2: 1 - ініціалізувати адаптер пристрої (сигнал INIT #);

3: 1 - дозволити висновок (повинен бути завжди встановлений в 1) (сигнал SELECTIN #);

4: 1 - дозволити переривання від пристрою. Переривання відбувається після закінчення прийому символу.

5 - 7: не використовуються.

Добре написана програма повинна починатися з перевірки зв'язку пристрою з машиною (on line). Якщо приєднано не одне пристрій, то програма повинна дозволяти користувачеві вибрати з яким з них він буде працювати. Крім того, ця програма повинна відновлювати ситуацію за будь-яких помилках пристрою. При цьому бажано передбачити таку організацію даних, щоб не було необхідності знову друкувати весь документ (тобто продовження друку із заданою сторінки).

Ініціалізація порту. Програми повинні ініціалізувати порт кожного пристрою (LPT1 - LPT3) перед першим використанням. Порти повинні також повторно инициализироваться після усунення причин помилки. Слід розрізняти ініціалізацію порту пристрою і ініціалізацію самого пристрою. Ініціалізація пристрою це внутрішня справа пристрою. Вона відбувається автоматично при його включенні і в більшості випадків пристрій не може бути повторно ініціалізований без його виключення і повторного включення. Але програма може повторно ініціалізувати пристрій в тому сенсі, що можуть бути відновлені початкові параметри, які пристрій використовує для друку, скасовуючи всі спеціальні шрифти, аррестори, табуляції і т.д. Доцільно проводити скидання пристрою, коли програма завершує роботу з ним. Мови високого рівня ініціалізували LPT-порт автоматично, але власні програми виведення вимагають для цієї мети розробки спеціальних процедур ініціалізації. З іншого боку, відновлення початкових параметрів друку потрібно у всіх

Слід мати на увазі, що на багатьох принтерах символи не друкуються до тих пір, поки не отримано код повернення каретки, завершальний рядок (або до тих пір поки не введена ціла рядок даних). Символи можуть спокійно чекати в буфері принтера, навіть після того, як породила їх програма завершилася. Коли починається нова передача даних на принтер, то ці символи будуть надруковані. Щоб уникнути цієї проблеми, не забувайте почистити буфер перед початком друку при завершенні програми. Це робиться посилкою на принтер коду ASCII 18h (при цьому параметри печатки не міняються).

Регістр управління виводу кожного адаптера принтера має біт (2-й біт регістра управління), який викликає ініціалізацію адаптера.

Біт 2 - біт ініціалізації адаптера і зазвичай він встановлюється в 0. Для ініціалізації адаптера треба встановити цей біт в 1 на 1 / 20 секунди. У цей момент потрібно, щоб був встановлений тільки біт 3 (дозволений висновок на друк). Тому пошліть у порт значення ОСЬ, зробіть затримку, а потім пошліть у порт звичайне (без переривань) неініціалізованих значення, яке дорівнює 08h.

Функція 1 переривання 17h BIOS ініціалізує порт принтера і повертає байт, що дає статус порту. Для цього слід помістити в DX номер порту (число від 0 до 2 для LPT1 - LPT3), після чого викликати переривання. Байт статусу принтера повертається в АН.

Висновок даних, Програма завжди повинна перевірити, зв'язок пристрою з ПК перед тим, як послати на нього висновок. Легко встановити, що пристрій не готове, тому що біт 3 регістра статусу встановлюється вів цьому випадку. Складніше визначити причину неготовності принтера: вимкнений він, відмінено вибір принтера або в ньому немає паперу. Це відбувається через те, що принтери різних виробників посилають різні набори бітів в регістр статусу принтера, навіть коли вони знаходяться в ідентичному стані. Хоча регістр статусу має біти, які повинні показувати ці три стани принтера, але насправді значення бітів можуть не відповідати цим умовам (біт 3 повинен показувати, що принтер вик ¬ лючение, біт 4 - що відмінено вибір принтера і біт 5 - що немає паперу ). Типова послідовність дій для виводу на друк одного символу така:

- Вивести передається байт в регістр даних;

- В циклі перевіряти стан принтера до установки біта 7 регістра стану (тут можливе використання таймауту);

- Перевірити біти 3-5 регістра стану на наявність помилки;

- Встановити і відразу ж скинути нульовий біт регістра управління.

- Далі можна прочитати регістр стану і перейти до друку наступного символу.

Незважаючи на простоту управління, принтер представляє із себе досить складний пристрій, що має свій мікропроцесор, ПЗУ і ОЗУ. Мікропроцесор використовується для обробки керуючих послідовностей і управління печаткою. ПЗУ містить опис малюнків символів залежно від їх коду та обраної таблиці і програми мовою використовуваного мікропроцесора. ОЗУ використовується для тимчасового зберігання введених даних і спроектованих користувачем символів. Принтер обробляє ряд спецсимволів (таких, як дзвінок, забій, горизонтальна і вертикальна табуляція), а також має досить складну систему команд (ESC-послідовності) для зміни режимів роботи та управління печаткою.

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

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