|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Розробка та програмування пристроїв спряження для послідовного інтерфейсуРозробка та програмування пристроїв спряження для послідовного інтерфейсу22 3 Реферат Розробка та програмування пристроїв спряження для послідовного інтерфейсу Вступ Послідовний інтерфейс використовується для зв'язку двох пристроїв між собою. Дані в одну сторону передаються по одному проводу за допомогою послідовності бітів. Природно, при підключенні декількох пристроїв до комп'ютера обмін виробляється тільки з одним з цих пристроїв. Для з'єднання з боку комп'ютера використовується інтерфейс, названий СОМ-порт (COMmunication port, комунікаційний порт). Взаємодія комп'ютера з зовнішніми пристроями досить часто відбувається через послідовний (СОМ) порт (Serial Interface RS-232C). Послідовна передача даних дозволяє значно спростити канал зв'язку між пристроями, але одночасно приводить до ускладнення формату передачі даних. Дані передаються по бітам (послідовно) - Serial Interface: Інтерфейс RS-232C, RS-422A, RS-423A, RS-485, послідовний порт COM. 1. Послідовна передача даних Послідовний потік даних складається з бітів синхронізації і власне бітів даних. Формат послідовних даних містить чотири частини: стартовий біт, біти даних (5-8 біт), перевірочний і стоповий біти; уся ця конструкція іноді називається символом. На рис.6.1 зображений типовий формат послідовних даних. Коли дані не передаються, на лінії встановлюється рівень логічної одиниці. Це називається режимом очікування. Початок режиму передачі даних характеризується передачею рівня логічного нуля тривалістю в одну елементарну посилку. Такий біт називається стартовим. Біти даних посилаються послідовно, причому молодший біт - першим; усього їх може бути від п'яти до восьми. Рис. 1. Формат послідовних даних, які формує UART За бітами даних випливає перевірочний біт, призначений для виявлення помилок, що виникають під час обміну даними. Останньою передається стопова посилка, що інформує про закінчення символу. Стоповий біт передається рівнем логічної одиниці. Тривалість стопової посилки - 1, 1.5 чи 2 біти. Спеціально розроблений електронний пристрій, що генерує і приймає послідовні дані, називається універсальним асинхронним прийомо-передавачем (Universal Asynchronous Receiver Transmitter, UART). Обмін інформацією за допомогою мікросхем UART відбувається в такий спосіб. Приймач виявляє перший фронт стартового біта і вичікує один чи півтора тактових інтервали, оскільки зчитування повинне початися точно в середині першої посилки. Через один тактовий інтервал зчитується другий біт даних, причому це відбувається точно в середині другої посилки. Після закінчення інформаційного обміну приймач зчитує перевірочний біт для виявлення помилок і стоповий біт, а потім переходить у режим чекання наступної порції даних. Швидкість передачі інформації в послідовному інтерфейсі вимірюється в бодах (бод - кількість переданих бітів за 1 с). Стандартні швидкості рівні 110, 150, 300, 600, 1200, 2400, 4800, 9600 і 19200 бод. Знаючи швидкість у бодах, можна обчислити число переданих символів за секунду. Наприклад, якщо мається вісім біт даних без перевірки на парність й один стоповий біт, то загальна довжина послідовності, включаючи стартовий біт, дорівнює 10. Швидкість передачі символів відповідає швидкості в бодах, діленої на 10. Таким чином, при швидкості 9600 бод (див. рис. 1.6) буде передаватися 960 символів у секунду. Перевірочний біт призначений для виявлення помилок у переданих бітах даних. Коли він присутній, здійснюється перевірка на парність чи непарність. Якщо інтерфейс націлений на перевірку за парністю, такий біт буде виставлятися в одиницю при непарній кількості одиниць у бітах даних, і навпаки. Це найпростіший спосіб перевірки на наявність однократних помилок у переданому блоці даних. Однак, якщо під час передачі було спотворено декілька бітів, подібна помилка не виявиться. Перевірочний біт генерується передаючим UART таким чином, щоб загальна кількість одиниць була непарним чи парним числом в залежності від настройки інтерфейсу; приймаючий пристрій повинен мати таку ж настройку. Прийомний UART рахує кількість одиниць у прийнятих даних. Якщо дані не проходять перевірку, генерується сигнал помилки. Більшість комп'ютерів, сумісних з IBM PC, використовує UART 16450, з IBM PC XT - UART 8250. В UART застосовуються рівні напруги ТТЛ. Для передачі даних по каналу зв'язку напруга за допомогою спеціалізованих перетворювачів конвертується з інверсією: логічному нулю відповідає діапазон напруг від +3 до + 12 В, логічній одиниці - від -3 до -12 В. а) б) Рис. 2. Функції контактів роз'ємів RS232 на комп'ютері: а) - блочна частина 9-контактного штирьового роз'єму, вигляд зі сторони задньої стінки комп'ютера; б) - блочна частина 25-контактного штирьового роз'єму, вигляд зі сторони задньої стінки комп'ютера; Таблиця 1. Призначення контактів роз'ємів послідовного порту
2. Сигнали та роз'єми порту RS232 Стандартний послідовний порт має 25- чи 9-контактний роз'єм. На рис. 6.2 представлені два типи з'єднань між комп'ютером і зовнішнім пристроєм по протоколу RS232. Стрілки показують напрямок потоків даних. На рис. 6.2а представлене так зване нуль-модемне з'єднання. На рис. 6.2б зображене з'єднання, що використовує тільки три лінії: перша - для передачі даних, друга - для прийому, третя - загальна. З'єднання організоване таким чином, що передані дані від першого пристрою надходять на прийомну лінію другого. а) б) Рис. 3. З'єднання комп'ютера та зовнішнього пристрою по протоколу RS232: а) - з використанням нуль-модемного кабеля; б) за допомогою трьох ліній Таблиця 6.2 Призначення сигналів послідовного інтерфейсу
3. Програмна модель послідовного порта Комп'ютер, сумісний з IBM PC, може мати до чотирьох послідовних портів. Вони маркуються як COМ1 - COM4. Кожен СОМ-порт формується окремим UART 16450, встановленим усередині комп'ютера / UART 8250/16450/. На рис. 6.4 показана внутрішня структура UART. У ньому маються вісім восьмибітових регістрів. Адреси введення/виведення цих регістрів обчислюються додаванням зсуву регістра до базової адреси СОМ-порту. Зсуви і функції регістрів UART такі: 00h - буферний регістр передавача/буферний регістр приймача: використовується для обміну даними; 01h - регістр дозволу переривань: установлює режим запиту переривань; 02h - регістр ідентифікації переривань: перевіряє режим запиту переривань; 03h - регістр формату даних: встановлює формат послідовних даних; 04h - регістр керування модемом: установлює керування модемом (RTS, DTR і т.д.); 05h - регістр стану прийомопередавача: містить інформацію про стан приймача і передавача; 06h - регістр стану модему: містить поточний стан ліній DCD, RI, DSR і CTS; 07h - регістр надоперативної пам'яті: працює як байт пам'яті. Рис. 4. Внутрішня блок-схема UART 8250/16450 Зсув 00h вказує на буферний регістр читання приймача і регістр запису передавача, що доступний, коли біт DLAB у регістрі формату даних (зсув 03h) дорівнює нулю. Якщо по цій адресі записаний байт, то він передається в регістр зміщення передавача і послідовно надходить на вихід. Під час прийому відбувається зворотна операція: після того як дані успішно прийняті і за допомогою регістра зміщення перетворені в рівнобіжний формат, вони передаються в буферний регістр приймача. Коли інформація з цього регістра зчитана, він очищається і готовий до прийому наступного блоку даних. По зсуву 01h від базового знаходиться регістр дозволу переривань, за допомогою якого можна конфігурувати переривання, що генеруються UART. Призначення бітів цього регістра: 0 0 0 0 SINP ERBK TBE RxRD біти з 7 по 4 завжди нулі SINP 1 = переривання по зміні стану ліній CTS, DSR, DCD і RI 0 = немає переривання ERBK 1 = переривання при помилці прийому даних 0 = немає переривання ТВЕ 1 = переривання, коли регістр передавача порожній 0 = немає переривання RxRD 1 = переривання при одержанні цаннх 0 = немає переривання По зсуву 02h знаходиться регістр ідентифікації переривань. При виникненні переривання нульовий біт цього регістра встановлюється в 0. Біти 1 і 2 указують причину переривання. Біти з 7 по 3 не використовуються і завжди дорівнюють нулю. Призначення бітів регістра наступне: 0 0 0 0 0 ID1 ID0 PND PND 1 = немає переривання 0 = переривання ID1, ID0 00 = зміна вхідного сигналу RS232 (пріоритет 3) 01 = регістр передавача порожній (пріоритет 2) 10 = у буферному регістрі приймача дані готові (пріоритет 1) 11 = помилка передачі даних чи зупинка (пріоритет 0, вищий ступінь) Якщо процес обміну даними організований по перериваннях, то стале переривання повинно бути скинуте; у протилежному випадку коректність обміну даними порушиться. Дії, необхідні для очищення переривання, такі: ID1 = 0, ID0 = 0 читання вмісту регістра стану модему (06h) ID1 = 0, ID0 = 1 запис у регістр передавача (00h) чи читання регістра ідентифікації переривань (02h) ID1 = 1, ID0 = 0 читання байта даних з буферного регістра приймача (00h) ID1 = 1, ID0 = 1 читання регістра стану прийомопередавача (05h) По зсуву 03h знаходиться регістр формату даних, що визначає такі параметри переданих даних, як швидкість, кількість бітів даних, кількість стопових бітів і настроювання перевірочного біту. Призначення бітів регістра приведене нижче: DLAB BRK PAR2 PAR1 PAR0 STOP DAB1 DAB0 DLAB 1 = доступ до установки швидкості 0 = доступ до регістра приймача/регістру передавача (00h) й до регістра дозволу переривань BRK 1 = зупинка включена 0 = зупинка виключена PAR2,1,0 000 = немає перевірки 001 = непарна 011 = парна 101 = завжди 1 111 = завжди STOP 1 = 2 стопових біти 0 = 1 стоповий біт DAB1,0 00 = 5 біт даних 01 = 6 біт даних 10 = 7 біт даних 11 = 8 біт даних Коли біт DLAB дорівнює 1, регістри прийомопередавача (00h) і дозволу переривань (01h) використовуються для завантаження дільника швидкості обміну. У перший записується молодший, у другий - старший байт дільника. Вони формують шістнадцятибітовий дільник, значення якого обчислюється за наступною формулою: Дільник = байтрегістр 00h + 256Чбайт регістр 01h У комп'ютері тактова частота, що подається в UART, складас 1,8432 Мгц. Усередині UART еталонна частота утвориться як тактова, ділена на 16, і дорівнює 115200 Гц. Співвідношення між значеннями дільника і швидкістю можна представити у виді формули: Для одержання швидкості 9600 бод необхідно, щоб дільник був рівний 12. Отже, у буферний регістр прийомопередавача (00h) повинно бути записане число 12, а в регістр дозволу переривань (01h) - нуль. Якщо в регістри дільника записана одиниця, то вийде найвища швидкість - 115200 бод. По зсуву 04h розташований регістр керування модемом. У загальному випадку він використовується для керування двома виходами інтерфейсу - RTS і DTR. Призначення бітів регістра наступні: По зсуву 05h знаходиться регістр стану прийомопередавача, що містить інформацію про стан приймача і передавача UART. При використанні разом з регістром ідентифікації переривань (02h) можна установити джерело переривань. Призначення бітів регістра приведені нижче: По зсуву 06h знаходиться регістр стану модему, що може використовуватися для визначення стану вхідних сигналів, зокрема DCD, DSR, CTS, RI, а також для зчитування чотирьох цифрових вхідних ліній. Призначення бітів регістру наступні: Регістр зі зсувом 07h - це байт пам'яті. Запис даних у регістр не впливає на операції UART. Отримання базової адреси послідовного порта (2 байти) При ввімкнення або перевантаженні комп'ютера перевіряє адреси всіх встановлених послідовних портів і записує їх адреси у визначені комірки пам'яті. СОМ1: 0000:0400h - 0000:0401h СОМ2: 0000:0402h - 0000:0403h СОМ3: 0000:0404h - 0000:0405h СОМ4: 0000:0406h - 0000:0407h Однобайтова комірка пам'яті 0000:0411h містить число СОМ портів, що записані в 0, 1 та 2 бітах: 000 - 0 port 001 - 1 port 010 - 2 port TP Procedure COM_Address; Var Num_COM:integer; COM1, COM2, COM3, COM4:integer; b1:byte; Begin Num_COM:=mem($0000: $0411); b1:=Num_COM; asm mov al,b1 and al,00000111b mov b1,al end; Num_COM:=b1; COM1:=memw($0000: $0400); COM2:=memw($0000: $0402); COM3:=memw($0000: $0404); COM4:=memw($0000: $0406); End; 4. Електричний інтерфейс RS-232C В даний час найбільш розповсю-дженим є стандарт, розроблений асоціацією промислових засобів зв'язку (ТІA, Telecommunication Industry Association, http://www.tiaonline.org) і асоціацією електронної промисловості (EIA Electronic Industries Alliance, http://www.eia.org) "EIA/TIA-232-E". Більш відомий за назвою "RS-232". Стандарт RS-232 (його офіційна назва "Interface Between Data Terminal Equipment and Data Circuit-Termination Equipment Employing Serial Binary Data Interchange") призначений для підключення апаратури, що передає чи приймає дані, до кінцевої апаратури каналів даних. Стандарт описує керуючі сигнали інтерфейсу, пересилання даних, електричний інтерфейс і типи роз'ємів. Інтерфейс RS-232 використовується й у багатьох пристроях звичайного персонального комп'ютера, починаючи з "миші" і модему до ключів апаратного захисту. І хоча уже всі комп'ютери мають інтерфейс USB, інтерфейс RS-232 ще живий і активно застосовується. DTE (Data Terminal Equipment) - кінцеве устаткування, що приймає чи передає дані. У якості DTE може виступати комп'ютер, принтер, плоттер чи інше периферійне устаткування. DCE (Data Communications Equipment) - апаратура каналу даних. Функція DCE полягає в забезпеченні можливості передачі інформації між двома чи більшим числом DTE. Для цього DCE повинно забезпечити з'єднання з DTE, з одного боку, і з каналом передачі - з іншого. Роль DCE найчастіше виконує модем. Рис. Повна схема з'єднання по RS-232 Рис. 6. З'єднання по RS-232 нуль-модемним кабелем Таблиця 3. Межі напруг СОМ-порта (стандарт RS-232)
Протокол RS-232 Відповідно до стандарту RS-232, сигнал (послідовності бітів) передається напругою. Передавач і приймач є несиметричними: сигнал перелається щодо загального проводу (на відміну від симетричної передачі протоколу RS-485 чи RS-422). У табл. 1.1 приведені границі напруг для сигналів приймача і передавача. Логічному нулю на вході приймача відповідає діапазон +3...+12В, а логічній одиниці - діапазон -12...-3 В. Діапазон -3...+3 В -. Перша частина, стандарт RS-232C, була прийнята 1969 року і містить опис електричних ланцюгів і сигналів несиметричного послідовного зв'язку. Друга частина, стандарт RS-232D, прийнята в 1987 році і визначає додаткові лінії тестування, а також формально описує роз'єм DB-2 Третя частина, RS-232E, прийнята в 1991 році. Інтерфейс не забезпечує гальванічної розв'язки пристроїв. Підключення і відключення інтерфейсних кабелів пристроїв з незалежним живленням повинно здійснюватись при відключеному живленні. Один із самих неприємних недоліків стандарту RS-232 - погана перєшкодозахищеність і, відповідно, короткі лінії передачі. Природно, були створені стандарти, що вирішують ці проблеми. Протокол RS-422A Стандарт RS-422A (інша назва ITU-T V.II) визначає електричні характерис-тики симетричного цифрового інтерфейсу. Він передбачає роботу на більш високих швидкостях (до 10 Мбіт/с) і більших відстанях (до 1000 м) в інтерфейсі DTE-DCE. Для його практичної реалізації, на відміну від RS-232, вимагаються два фізичних проводи на кожен сигнал. Реалізація симетричних ланцюгів забезпечує найкращі вихідні характеристики. Подібно V.28, даний стандарт є простим описом електричних характеристик інтерфейсу і не визначає параметри сигналів, типи роз'ємів і протоколи керування передачею даних. Для ліній інтерфейсів RS-422A та RS-423A можуть бути використані різні провідники (чи пари провідників) того самого кабелю. Стандарт RS-422A був розроблений разом з RS-423A і дозволяє розміщувати лінії цих інтерфейсів в одному кабелі. Він несумісний з RS-232, і взаємодія між RS-422A і RS-232 може бути забезпечена тільки за допомогою спеціального интерфейсного конвертера. Практично це повнодуплексний протокол RS-43 Прийом і передача йдуть по двох окремих парах проводів, причому на кожній парі може бути тільки по одному передавачу. Протокол RS-423A Стандарт RS-423A (інша назва V.6) визначає електричні характеристики несиметричного цифрового інтерфейсу. "Несиметричність" означає, що даний стандарт, подібно RS-232, для кожної лінії інтерфейсу використовує тільки один провід. Прн цьому для всіх ліній використовується єдиний загальний провід. Як і RS-422A, цей стандарт не визначає сигнали, конфігурацію виводів чи типи роз'ємів. Він містить тільки опис електричних характеристик інтерфейсу. Стандарт RS-423A передбачає максимальну швидкість передачі 100 Кбіт/с. RS-232C, RS-423A - асиметричні; RS-422A, RS-485 (магістральний) - симетричні Способи керування портами у WINDOWS95 та WINDOWS XP Ініціалізація СOM-порту Перед тим як використовувати СOM-порт, його необхідно настроїти на визначений формат передачі даних, тобто встановити швидкість, кількість бітів даних, кількість стопових бітів та біт перевірки. Існує три методи настроювання. Перший полягає у використанні команди MODE операційної системи MS DOS. Синтаксис команди можна представити так: MODE COMm: baud=b, parity=p, data=d, stop=s, retry=r або MODE COMm:b,p,d,s,r MODE COM1:96,n,8,1 конфігурує порт СОМ1 з наступними параметрами: швидкість 9600 бод, без перевірки на парність, 8 біт даних, 1 стоповий біт. Зазначена команда може бути включена у файл autoexec.bat. Недолік такого методу - неможливість змінювати формат передачі даних у користувацьких програмах. Другий метод використовує переривання BIOS INT 14h, що дозволяє виконувати конфігурування порту з програм користувача. Для цього необхідно в регістр АН завантажити 0, а в DX - число від 0 до 3, що вказує на відповідний порт (СОМ1 - COM4). У регістр AL завантажується байт ініціалізійних даних, значення бітів якого показані нижче: BD2 BD1 BDO PAR1 PAR0 STOP DA1 DA0 BD2 - BDO (швидкість) 111 = 9600 011 = 600 110 = 4800 010 = 300 101 = 2400 001 =150 100 = 1200 000=110 PAR1,0 (перевірка на парність) 00 чи 10 = немає перевірки 01 = непарна 11 = парна STOP (кількість стопових бітів) 0 = 1 1 = 2 DA1,0 (довжина блоку даних) 10 = 7 біт 11 = 8 біт Наступна програма на мові ТР6 робить те ж, що і команда DOS MODE СОМ1:96,n,8,1. Procedure initialize; {СОМ1: 9600, без перевірки на парність, 0 біт даних, 1 стоповий біт.} var register: registers; begin with register do begin ah:=0; {Завантаження номера функції переривання.} al:=128+64+32+0+0+0+2+1; {Завантаження ініціалізаційного коду 11100011B.} dx:=0; {Номер порту: DX=0:COM1, DX=1:COM2 і т.д.} intr($14,register); {Виклик переривання BIOS.} end; end; Обмеження описаного методу полягає в тому, що можна задати швидкість тільки 9600 бод. UART 16450 здатний працювати зі швидкістю 115200 бод, це досягається безпосереднім звертанням до регістра. Третій, найбільш гнучкий метод конфігурує порт за допомогою запису даних у регістр формату даних UART (зсув 03h). Наступна програма на ТР6 дозволяє налаштувати сам регістр, для цього потрібна базова адреса порту, що конфігурується, швидкість, режим перевірки, довжина блоку даних і кількість стопових бітів. Процедура переводить задану швидкість у шістнадцятибітовий дільник і завантажує його у відповідні регістри. (*-Бібліотека ресурсів № А9 (запис у регістр формату даних).-*) Procedure Write_data_format (RS232_address, Baud, Parity, Data_bit, Stop_bit:integer); var byte1,byte2,output_byte:byte; divisor:integer; begin divisor:=115200 div Baud; if divisor<=255 then begin byte1:=divisor; byte2:=0; end; if divisor>255 then begin byte1:=divisor mod 256; byte2:=divisor div 256; end; output_byte:=(data_bit-5)+4*(stop_bit-1)+8*(parity); port(RS232_address+3):=128: {Завантаження ініціалізаційних даних, перший біт регістра дорівнює 1.} port(RS232_address+0):=byte1; {Молодший байт дільника дорівнює 1.} port(RS232_address+1);=byte2; {Старший байт дільника дорівнює 0.} port(RS232_address+3):=output_byte; {Завантаження дільника й інших параметрів.} end; Наступна функція, написана мовою Turbo Pascal для Windows, виконує те ж саме: (*-Бібліотека ресурсів № A9 (запис у регістр формату даних).-*) Function Write_data_format(RS232_address, Baud, Parity, Databit, Stop_bit:integer):integer; export; Var byte1, byte2,output_byte:byte; divisor:integer; begin divisor:=115200 div Baud; if divisor<=255 then begin byte1:=divisor; byte2:=0; end; if divisor>255 then begin byte1:=divisor mod 256; byte2:=divisor div 256; end; output_byte:=(data_bit-5)+4*(stop_bit - 1)+8*(parity); port(RS232_address+3):=126; {Завантаження ініціалізаційних даних, перший біт регістра порівнює 1.} port(RS232_address+0):=byte1; {Молодший байт дільника дорівнює 1.} port(RS232_address+1):=byte2; {Старший байт дільника дорівнює 0.} port(RS232_address+3):=output_byte; {Завантаження дільника й інших параметрів.} end; Передача і прийом послідовних даних Існує кілька способів прийому і передачі даних через послідовний порт: за допомогою команд операційної системи, переривань BIOS чи безпосереднього доступу до порту. Останній спосіб найбільш зручний при проведенні операцій введення/виведення загального призначення. Розглянемо приклад для порту СОМ1. Щоб передати дані, можна записати їх безпосередньо в буферний регістр передавача 3F8h використовуючи наступний оператор мови QBASIC: OUT 3F8h,X де X - дані в десятковому форматі. Для одержання даних з порту СОМ1 зчитуються дані з буферного регістра приймача 3F8h. З цією метою використовується інший оператор мови QBASIC (Y - вхідні дані в десятково-му форматі): Y=INP(3F8h) Наступні дві процедури написані на мові ТР6 і виконують ті ж функції. (*Бібліотека ресурсів № А10 (запис даних в буферний регістр передавача).*) Procedure write_transmit_buffer(RS232_address,output_byte:integer); Begin port(RS232_address):=output_byte; end; (*Бібліотека ресурсів № A12 (зчитування даних з буферного регістра прий-мача).*) Function read_receive_buffer(RS 232_addгеss,output_byte: integer]: integer; begin read_receive_buffer:=port(RS232_address); end; Нижче показані дві функції, написані на Turbo Pascal для Windows. (*Бібліотека ресурсів № А10 (запис даних в буферний регістр передавача).*) Function write_transmit_butfer(RS232_address;output_byte:integer):integer; export; begin port(RS232_address):=output_byte; end; (*Бібліотека ресурсів № A11 (читання даних з буферного регістра прийма-ча). *) Function read_reseive_buffer(RS232_address,output_byte:integer):integer; export; begin read_reseive_buffer:=port(RS232_address); end; |
РЕКЛАМА
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |