
- •Національний університет “львівська політехніка”
- •Програмування послідовного інтерфейсу
- •Доступ до послідовного порту
- •Програмування мікросхеми uart 8250
- •Ініціалізація послідовного порту
- •Установка поточного комунікаційного порту
- •Визначення статусу комунікаційного порту
- •Ініціалізація і управління модемом
- •Передача даних
- •Отримання даних
МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
Національний університет “львівська політехніка”
Кафедра САПР
Програмування послідовного інтерфейсу
Звіт
до лабораторної роботи №5
з курсу “Системне програмування”
Виконала:
ст. гр. КН-24
Андрусів М.І.
Прийняв:
Ханас Ю.Ю.
Львів – 2012
МЕТА РОБОТИ
Мета роботи – засвоїти основи організації обміну інформацією між ЕОМ і отримати практичнi навики програмування вводу-виводу через послідовний інтерфейс.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Доступ до послідовного порту
При асинхронному зв'язку машина посилає або приймає байти інформації порціями по одному біту. Тимчасові інтервали між байтами при цьому несуттєві, але дуже важливі інтервали між окремими бітами байта. Сигнал на лінії може бути високого або низького рівня, що відповідає логічним нулю і одиниці, і кажуть, що лінія відмічена (marking), коли рівень високий, і пуста (spacing), коли рівень низький.
Лінія підтримується у відміченому стані, коли по ній не передають даних. При початку передачі байта даних сигнал падає у 0, відмічаючи стартовий біт. Потім слідують вісім бітів даних (іноді менше) у вигляді набору високих і низьких рівнів. Останній біт даних може супроводжуватися бітом парності, що використовується для виявлення помилок, а потім у послідовність включаються 1 або більше стоп-біти, яким відповідає високий рівень. Ці стоп-біти починають відмічений стан, який буде зберігатися доти, поки не почнеться передача наступного байта даних; число стоп-бітів суттєве, оскільки вони встановлюють мінімальний час, який повиннен пройти перед наступним стартовим бітом. На рис. 1. показана ця послідовність.
Звичайно, передаюча і приймальна станції повинні застосовувати один і той же протокол для ланцюжків бітів і працювати з однією і тією ж швидкістю обміну (що вимірюється у бітах за секунду, які також називаються бодами). При обміні можуть легко виникати помилки, тому комунікаційне обладнання надає різносторонню інформацію про статус як самого порту, так і про приєднаного до нього модему. Задачею модему є перетворення сигналу, що генерується портом комунікації, в акустичний сигнал, який може потім бути переданий по телефонному каналу. Більшість модемів надає також додаткові комунікаційні можливості, такі, як автоматичний виклик і відповідь, які не підтримуються самим портом комунікації.
Програмування мікросхеми uart 8250
Послідовний зв'язок настільки складний, що були розроблені спеціальні мікросхеми, що виконують роботу по формуванню і синхронізації рядків бітів, що складають послідовні дані. Такі мікросхеми називають універсальним асинхронним приймачем-передавачем (universal asynchronous receiver transmitter або UART). IBM PC використовує UART 8250 фірми Intel.
Операційна система підтримує 2 порти комунікації, тому в машині є 2 мікросхеми. Їх базові адреси зберігаються в комірках 0040:0000 для СОМ1 і 0040:0002 для COM2. (Базова адреса - це двобайтова адреса порту, яка є молодша із групи адрес портів, що дають доступ до UART.) На всіх машинах, крім PCjr, COM1 має базову адресу 3F8H, а COM2 - 2F8H; PCjr має свій внутрішній модем за адресою 3F8H, а COM1 - за адресою 2F8H. Для зручності ми надалі будемо завжди нумерувати регістри 3FxH, але все сказане в рівній мірі можна застосовувати і до регістрів 2FxH.
Мікросхема 8250 має 10 програмованих однобайтових регістрів, за допомогою яких керується і контролюється порт комунікації. Більшість з них займається ініціалізацією порту, процесом, в якому виникає багато ускладнень. Доступ до цих 10 регістрів здійснюється через сім адрес портів з номерами 3F8H - 3FEH (або 2F8H - 2FEH). У п'яти випадках регістр, до якого отримуємо доступ через даний порт, залежить від того, як встановлений біт 7 в регістрі контролю лінії, який є єдиним регістром з адресою порту 3FBH. Ось ці регістри:
3F8H (OUT, біт 7 = 0 в 3FBH) Регістр зберігання передавача
3F8H (IN, біт 7 = 0 в 3FBH) Регістр даних приймача
3F8H (OUT, біт 7 = 1 в 3FBH) Дільник швидкості обміну (молодший)
3F9H (IN, біт 7 = 1 в 3FBH) Дільник швидкості обміну (старший)
3F9H (OUT, біт 7 = 0 в 3FBH) Регістр дозволу переривання
3FAH (IN) Регістр ідентифікації переривання
3FBH (OUT) Регістр управління лінії
3FCH (OUT) Регістр управління модемом
3FDH (IN) Регістр статусу лінії
3FEH(IN) Регістр статусу модему
Із десяти регістрів тільки шість необхідні для простого послідовного зв'язку. Регістр зберігання передавача містить байт даних, які будуть надіслані [6.], а регістр даних приймача - останній отрийнятий байт даних [7.]. Регістри управління і статусу лінії ініціалізують і управляють лінією зв'язку, використовуючи швидкість обміну, що міститься у двох регістрах дільника швидкості обміну [2.]. З чотирьох регістрів, що залишилися, регістри управління і статусу модему необхідні тільки для зв'язку через модем [5.], а два регістри, пов'язаних з перериваннями - тільки в процедурах, керованих перериваннями [8. ].
Переривання при зв'язку використовують в цілях ефективності. Звичайна комунікаційна процедура безперервно перевіряє регістр статусу лінії, чекаючи символа, що вводиться або вказівки, що все готове для передачі наступного байта даних. Оскільки процесор працює дуже швидко, в порівнянні із звичайними швидкостями, з якими передаються послідовні дані, то цей метод марно витрачає процесорний час, який може використовуватися для обробки даних, що поступають або передаються. З цієї причини мікросхема 8250 може бути встановлена в режим, що спричиняє переривання при появі символа, виникненні помилки і т.п. Це переривання вмить викличе процедуру вашої програми, яка, скажемо, буде передавати наступний символ з комунікаційного буфера.