Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

Порти передачі даних

Порти введення-виводу переважно використовуються для управління про-тимі зовнішніми пристроями: якщо біт встановлений, мотор крутиться (заслінка відкрита, нагрівач включений і т. д.), і навпаки. Якщо ж уст-оойство складніше, і робота з ним передбачає обмін послідовностями команд і відповідей, або просто великими об'ємами даних, простий порт виявляється не дуже зручний.
Основна проблема при використанні простого порту як засіб обміну даними полягає в тому, що приймаючому пристрою необхідно знати, чи виставило передавальний пристрій на своїх виходах нову порцію даних, або ще немає. Три основні підходи до вирішення цієї проблеми називаються синхронною, асинхронною і ізохронною передачами даних.
При синхронній передачі ми або надаємо додатковий сигнал строб (мал. 9.6), або тим або іншим способом передаємо синхросигнали по тих же дротах, що і дані. Наприклад, можна встановити, що кожна наступна порція даних повинна хоч би одним бітом відрізнятися від попередньої. При цьому необхідно передбачити протокол, за допомогою якого передавач кодуватиме, а приймач декодувати послідовності символів, що повторюються. Наприклад, другий символ з пари однакових послідовних символів можна замінювати на спеціальний символ повторення, втім, в цьому випадку нам необхідно передбачити і спосіб кодування символу, співпадаючого за значенням з символом повторення. Реальні способи поєднання тих, що кодують і синхронізующих сигналів в одному дроті відносно складні і їх детальне обговорення було б доречніше в книзі, присвяченій мережевим технологіям. Деякі прості способи кодування з таким поєднанням ми розглянемо в разд. Пристрої прямого доступу, що запам'ятовують.

Мал. 9.6. Тимчасова діаграма стробованого порту

Передача стробуючого сигналу вимагає прокладки додаткових дротів, але з реалізаційної точки зору набагато простіше поєднання синхросигналу і даних і тому широко застосовується в найрізноманітніших ситуаціях. Більшість стробованих портів асиметричні: один з пристроїв ведучий (master — господар), генерує стробовий сигнал, а друге ведений (slave — раб), користується цим сигналом для прийому або передачі. Нерідко замість одиночного строба використовується декілька різних сиг налов — наприклад, один сигнал виставляється передавачем і повідомляє чт наступна порція даних готова, а другий сигнал — приймачем і сооб шаєт, що приймач прийняв ці дані і готовий прийняти наступні Додаткові сигнали можуть також вирішувати питання про те, який з пристроїв в даному циклі буде приймачем, а яке — передавачем.
При асинхронному обміні даними передавальний пристрій посилає спеціальний стартовий символ, що сигналізує про те, що зараз підуть дані, і з фіксованим інтервалом виставляє на своїх виходах символи даних. Передаваний за один прийом блок даних зазвичай невеликий за об'ємом — адже необхідно зважати на небезпеку того, що годинник приймача і передавача, за допомогою якого вони відмірюють інтервал між послідовними порціями даних, недостатньо точні і можуть розійтися. Зазвичай блок даних складається з фіксованої кількості символів і називається кадром або фреймом (frame). Кадр зазвичай завершується одним або декількома стоповими символами. Не виявивши цих символів (або виявивши на місці цих символів невірні значення), приймач може зрозуміти, що його годинник все-таки розійшовся з годинником передавача.
Асинхронна передача дозволяє заощадити на дротах (не вимагається стробуючих сигналів) і при цьому уникнути складних способів кодування, характерних для поєднаної синхронної передачі, проте стартові і стопові символи складають значну частину потоку передаваних даних і створюють відчутні накладні витрати.
Крім того, при передачі великого об'єму даних у вигляді щільний наступних один за одним кадрів велика небезпека, що приймач втратить заголовок чергового кадру і не зможе відновити структуру потоку, тому багато асинхронних протоколів вимагають паузи між послідовними кадрами.
Асинхронна передача даних зручна в ситуаціях, коли об'єм передаваних даних невеликий, а потреба в їх передачі виникає в труднопредськазуємиє моменти. Зазвичай асинхронні порти працюють на невеликих швидкостях, не більше декількох кілобіт в секунду.
Ізохронна передача даних по ідеї нагадує асинхронну, з тією лише відзнакою, що при обміні даними приймач і передавач користуються ви-сокостабільнимі, але незалежними — при використанні одного тактового генератора вийде синхронна передача — тактовими генераторами, і завдяки цьому можуть обмінюватися кадрами великого розміру. У ідеалі, ізохронна передача поєднує переваги синхронною і асинхронною. але на практиці складнощі забезпечення стабільності і калібрування тактових операторів досить великі і в чистому вигляді ізохронна передача використовується дуже рідко.
Як синхронні, так і асинхронні порти бувають наступних типів (мал. 9.7):

  • сімплексні (simplex — передавати дані може лише одне пристрій);
  • напівдуплексні (half-duplex — обидва пристрої можуть приймати і передавати дані, але не здатні робити це одночасно, наприклад, тому, що прийом і передача йдуть по одному дроту);
  • повнодуплексні (full-duplex) або просто дуплексні (обидва пристрої здатні одночасно передавати і приймати дані, частіше всього -по різним дротам).

Мал. 9.7. Сімплексні, напівдуплексні і повнодуплексні порти

Ще одна практично важлива класифікація портів передачі даних -ето ділення їх на послідовні і паралельні порти (мал. 9.8).
Послідовний порт складається з одного дроту, по якому, як випливає з назви, послідовно передаються біти даних, а також, можливо, або стартових і стопових біти синхронізацій. Паралельний порт має декілька ліній передачі даних, зазвичай 8 (щоб можна було передати за один прийом один байт), а інколи і більше.
правило, послідовні порти — асинхронні або синхронні з поєднаною передачею синхросигналу, але виключення з цього правила — стробовані послідовні порти — також нерідкі. Навпаки, якщо вже ми проклали вісім дротів для даних, то економити на дев'ятому — синхронізующем дроті — було б зовсім вже дурне, тому переважна більшість практично використовуваних паралельних портів — синхронні стробовані.

Мал. 9.8. Послідовні і паралельні порти

Порт Rs232
Протокол послідовного асинхронного обміну Rs5232/ссiтт V24 широко застосовується для підключення до комп'ютера алфавітно-цифрових терміналів, низькошвидкісних друкуючих пристроїв, позиційних пристроїв введення (мишей, планшетів), низькошвидкісного телекомунікаційного устаткування і так далі, а інколи і для з'єднання комп'ютерів між собою, наприклад, якщо швидкісніше мережеве устаткування відсутнє або не може бути використане.
Такі порти використовуються для передачі даних за межі корпусу комп'ютера, тому окрім лінії передачі даних передбачений також дріт, передавальний опорну нульову напругу, Замість TTL-совместимых напруги, Rs232 використовує як 1 напругу в діапазоні від -25 до -3 У, а як 0 — відповідно, в діапазоні від +3 до +25 У (мал. 9.9).
Rs232 передбачає двосторонній обмін даними. Для цієї мети передбачено дві лінії даних — для прийому і для передачі, ТХ, що позначаються, і Rx-у відповідності із стандартом, пристрої діляться на двох типів: "комп'ютери і "термінали". Відмінність між ними полягає в тому, що "комп'ютер" передає дані по лінії ТХ, а отримує по лінії RX, а "термінал" — навпаки. Для з'єднання двох "комп'ютерів" необхідний спеціальний, так званий нуль-модемний кабель, в якому дроти ТХ і RX перехрещені. Цікаво, що стандартні порти IBM РС є "терміналами", а не "комп'ютерами".



Мал. 9.9. Діаграма напруги Rs232

Обмін даними здійснюється кадрами, що складаються із стартового біта, семи або восьми бітів даних (молодший біт передається першим), можливо — контрольного біта парності (див. разд. Контрольні суми), і одного або двох стопових бітів. Ігноруючи помилки парності або взагалі не перевіряючи парність, можна використовувати цей біт для передачі даних, і отримати, таким чином, дев'ять бітів даних в одному кадрі.
Мінімальна швидкість передачі складає 300 біт/с, подальші допустимі швидкості виходять подвоєнням предидущей— 600 біт/с, 1200, 2400 і так далі Сучасні реалізації Rs232 підтримують швидкості 115 200 біт/с і більш. Швидкість і варіації формату кадру визначаються налаштуваннями приймача і передавача. Необхідно, щоб в сполучених портом пристроїв ці налаштування збігалися, проте протокол сам по собі не надає засобів для їх узгодження.
Окрім ліній прийому, передачі, нуля і живлення специфікація Rs232 передбачає ряд додаткових сигналів, в просторіччі званих модемними лініямі— ознака тієї, що несе, дозвіл передачі даних (очищенням цього сигналу приймач може сигналізувати передавачу, що він не встигає обробляти дані, що поступають) і ін. Ці сигнали не повинні обов'язково підтримуватися всіма пристроями і використовуються, головним чином, акустичними модемами, звідки і відбувається назва. Повна специфікація при використанні 25-контактного роз'єму передбачає також можливість синхронної передачі даних з окремими стробуючими сигналами, але основна маса реалізацій Rs232 цього не підтримує.
Протокол Rs232 вельми простий і легко може бути реалізований програмними засобами з використанням двох біт порту введення-виводу (приклад 9.1) — втім, в цьому випадку буде потрібно ще зовнішню мікросхему приймача, що перетворює TTL-совместимые напруги в діапазон напруги Rs232. Що проте використовують цей протокол, застосовуються дуже широко, і багато моделей мікроконтроллерів і практично всі комплекти допоміжних мікросхем для мікропроцесорів пропонують апаратні реалізації цього стандарту.

Приклад 9.1. Програмна імітація Р5232-совместімого послідовного порту, цит. по [www.atmel.com Avr305]

;**** Applicationnoteavr305 ************************ . *
;* Назва : Напівдуплексний програмний UART
;* Версія : 1.20
;* Останнє оновлення : 97.08.27
;* Цільовий пристрій : Всі мікроконтроллери AVR . *
;* Адреса підтримки : avr@atmel.com . *
;* Розмір коди : 32 слова
;* Мин. Регістрів : О
;* Макс. Регістрів : 4 .
;* Переривання : Не використовуються
;* Опис
;* Цей приклад містить ефективний з точки зору об'єму коди програмний UART.
;* Програма-приклад отримує один символ і передає його назад.
.include "1200def.inc" .***** визначення контактів
.equ RXD =0 /контакт прийому PDO .equ TXD =1 ;Контакт передачі Pd1
.*****
Глобальні регістрові змінні
.def bitcnt =R16 ;счетчик бітів
.def temp =R17 проміжний регістр
.def Txbyte =R18 ;Передаваемые дані
def Rxbyte =.<19 /полученниє дані .cseg
.org
0
* "putchar" *
* Ця підпрограма передає байт з регістра "Txbyte"
* Кількість стопових бітів визначається константою sb *
* Кількість слів :14 включаючи повернення
* Кількість циклів :Зависит від частоти передачі
* Мин. Регістрів :Нет
* Макс. Регістрів :2 (bitcnt,txbyte)
* Покажчики :Не використовуються
.equ sb =1 ;Кол-во стопових бітів (1, 2 ...)
putchar: Idi bitcnt,9+sb ;1+8+sb com Txbyte ;Инвертировать все sec ;Стартовый біт
putcharo: brcc putchar1 ;Если перенесення встановлене cbi Portd,txd ; передати 'о' rjmp putchar2 ;иначе
putcharl: sbi Portd,txd ; передати '!' пір
Putchar2: rcall Uart_delay /задержка в один біт real! Uart_delay
Isr Txbyte /получить наступний біт dec bitcnt /еслі не всі біти передані brne putcharo ; послати наступний ;иначе
.Leu ; повернення
* "getchar"
?
* Ця підпрограма отримує один байт і повертає його в "Rxbyte" *
* К-ть слів :14 включаючи повернення
* К-ть циклів :Зависит від швидкості прийому
* Мин. Регістрів :Нет
* Макс. Регістрів :2 (bitcnt,rxbyte)
* Покажчики :Не використовуються
getchar: Idi bitcnt,9 ;8 біт даних + 1 столовий
*
getcharl: sbic Pind,rxd ;Ждать стартового біта rjmp getcharl
rcall Uart_delay ;задержка у 0.5 біта
getchar2: rcall Uart_delay /задержка в один біт rcall UART__delay
clc /очистіть перенесення
sbic Pind,rxd ;если вхід RX = 1
sec
dec bitcnt ;Если біт столовий breq getchars ; повернення
/інакше
ror Rxbyte ; зрушити біт в Rxbyte rjmp getchar2 ; отримати наступний
getchars: ret
I "Uart_delay"
*
I Ця підпрограма затримки генерує необхідну затримку між бітами
* при передачі і прийомі байтів. Повний час виконання визначається I константою "Ь":
*3*ь + 7 cycles (включаючи rcall і ret)
*
f К-ть слів :4 включаючи повернення
* Мин. Регістрів :Нет
* Макс. Регістрів :1 (temp)
* Покажчики :Не використовуються
Допустимі значення Ь:
1 Mhz crystal: 9600 bps - b=14 19200 bps - b=5 28800 bps - b=2
2 Mhz crystal: 19200 bps - b=14 28800 bps - b=8 57600 bps - b=2
4 Mhz crystal: 19200 bps - b=31 28800 bps - b=19 57600 bps - b=8 115200 bps - b=2
•equ ь =31 ;19200 bps @ 4 Mhz crystal
Uart_delay: Idi temp,b uart_delayl: dec temp Brne UART delayl
ret
;***** Виконання програми починається тут ;***** Тестова програма
reset: sbi Portd,txd ;Установить контакти порту sbi Ddrd,txd
Idi Txbyte,12 /очистіть термінал rcall putchar
forever: rcall getchar mov Txbyte,rxbyte
rcall putchar ;Воспроизвести отриманий символ
rjmp forever

USART мікроконтроллера PIC
Як приклад апаратній реалізації послідовного порту, яку, окрім інших варіантів використання, м'жно застосувати і для реалізації Rs232, давайте розглянемо пристрій USART (Universal Synchronous Asynchronous Receiver Transmitter), включений до складу ряду моделей мікроконтроллерів PIC фірми Microchip [www.microchip.com Picmicro].
USART може використовуватися або як повнодуплексний асинхронний порт з форматом кадру, сумісним з Rs232, або як напівдуплексний синхронний стробований порт. Пристрій складається з приймача (receiver), передавача (transmitter) і генератора тактової частоти (baud rate generator) (мал. 9.10).

Мал. 9.10. Структура USART мікроконтроллера PIC

Генератором тактової частоти є двійковий лічильник, зменшуваний на одиницю на кожному такті центрального процесора. Коли лічильник доходить до нуля, генерується один такт і лічильник ініціалізувався вихідним значенням. Фактично, генератором є дільник тактової частоти процесора в заданому відношенні. Документ [www.microchip.com Picmicro] містить таблицю, по якій можна розрахувати коефіцієнт ділення, щоб з типових тактових частот процесора отримати (інколи з певною помилкою) стандартні частоти Rs232.
Лічильник генератора тактової частоти програмно недоступний, а початкове значення цього лічильника (воно ж коефіцієнт ділення) задається 8-розрядним регістром SPBRG. USART використовує одну і ту ж тактову частоту і для приймача, і для передавача. При синхронній роботі в режимі веденого вбудований генератор тактової частоти не використовується взагалі.
Приймач і передавач багато в чому аналогічні по структурі і мають по два програмно-доступних 8-розрядних регістра. Перший регістр називається регістром управління і статусу (status and control register), а другий — регістром даних. Значення бітів регістрів приймача і передавача, що управляють, приведені в таблиці. 9.1 і 9.2. І приймач, і передавач мають також программно-недоступний сдвіговий регістр, званий TSR (Transmit Shift Register) в передавача і RSR (Receive Shift Register) в приймача.
При передачі значення регістра даних передавача поміщається в сдвіговий регістр і можливо розширюється дев'ятим бітом, який береться з біта Tx9d регістра, що управляє. Значення молодшого біта виставляється на виході ТХ мікроконтроллера. Потім на кожному такті генератора регістр зрушується на один біт — в результаті виходить послідовна передача біт кадру із заданою швидкістю (мал. 9.11). Коли біти кінчаються, передавач встановлює біт TRMT регістра, що управляє, і, якщо це потрібно, генерує переривання після закінчення передачі.
Приймач має декілька складніший пристрій. Значення входу RX аналізується не один раз за кожен такт генератора, а 16 разів і усереднюється — завдяки цьому значно збільшується перешкодостійкість (мал. 9.12). Крім того, приймач USART має прихований буферний регістр, в який поміщається значення прийнятого байта, якщо регістр даних приймача ще не був прочитаний з моменту останнього прийому (мал. 9.13).

Таблиця 9.1. Опис бітів регістра передавача USART, що управляє

Біт Опис
7 CSRC: Clock Source — вибір джерела тактової частоти при асинхронному режимі ігнорується, при синхронному режимі:
1 = режим ведучого (USART генерує стробовий сигнал)
0 = режим веденого (стробовий сигнал генерує інший пристрій)
6 Тх9: передавати 9 біт
1 = передавати 9 біт
0 = передавати 8 біт
5 TXEN: Transmission Enabled — вирішити передачу
1 = передача дозволена
0 = передача заборонена
4 SYNC: біт вибору режиму USART
1 = синхронний режим
0 = асинхронний режим
3 Не використовується. Читається як Про
2 BRGH: Baud Rate Generator High — перемикання режимів роботи
тактового генератора
1 TRMT: біт достатку сдвігового регістра передавача
1 = TSR порожній
0 = TSR містить дані (йде передача)
0 Tx9d: дев'ятий біт передаваних даних (може використовуватися як біт парності)

Мал. 9.11. Принципова схема передавача USART

Мал. 9.12. Тимчасова діаграма роботи приймача USART

Таблиця 9.2. Опис бітів регістра приймача USART, що управляє

Біт Опис
7 SPEN: Serial Port Enable — включити послідовний порт
1 = послідовний порт включений
0 = послідовний порт вимкнений
6 Rx9: дозвіл прийому 9 біт
1 = вибраний прийом 9 біт
0 = вибраний прийом 8 біт
5 SREN: Single Receive Enable — біт одиночного прийому Асинхронний режим — не використовується. Синхронний режим (ведучий):
1 = одиночний прийом дозволений;
0 = одиночний прийом заборонений.
Цей біт очищається після завершення прийому. Синхронний режим (ведений) — не використовується
4 CREN: Continuous Receive Enable — біт безперервного прийому. Асинхронний режим:
1 = прийом дозволений;
0 = прийом заборонений. Синхронний режим:
1 = безперервний прийом дозволений;
0 = безперервний прийом заборонений
3 Не використовується. Читається як 0
2 FERR: Framing Error — помилка кадру
1 = помилка кадру
0 = немає помилки кадру
1 OERR: Overrun Error — помилка переповнювання буфера
1 = переповнювання буфера прийому
0 = немає помилки переповнювання
0 Rx9d: дев'ятий біт прийнятих даних.
Може використовуватися як біт парності

Мал. 9.13. Принципова схема приймача USART

Приймачі більшості сучасних апаратних реалізацій Rs232 мають буферні регістри. Так, послідовні порти переважної більшості сучасних IBM Рс-совместімих комп'ютерів засновані на мікросхемі National Semiconductor Pc16552 [NS Pc16552d] і мають буфери об'ємом 16 байт (в оригінальної IBM РС були порти, що не буферизували).
Окрім звільнення центрального процесора від виконання роботи сдвігових регістрів, апаратна реалізація Rs232 дозволяє замінити чекання даних в режимі опиту на роботу по перериваннях, що у багатьох випадках теж вельми корисно. Багатопортові адаптери, використовувані, наприклад, для організації модемних пулів інтернет-провайдерів, часто можуть передавати дані в режимі ПДП.

 

:: Реклама ::

уплотнитель для профнастила с8

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017