Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
uart.doc
Скачиваний:
2
Добавлен:
23.04.2019
Размер:
216.58 Кб
Скачать

2.6. Ініціалізація і управління модемом

Є 6 ліній, по яких модеми зв'язуються з комп'ютером (вдосконалені моделі можуть мати додаткові лінії по інтерфейсу RS232). Ось їх назви, скорочення і функцій:

Від комп'ютера до модему

Data Terminal Ready (DTR)Інформує модем, що комп'ютер включений і готовий до зв'язку

(готовність комп'ютера)

Request To Send (RTS) Інформує модем, що комп'ютер чекає посилання даних

(запит на посилку)

Від модему до комп'ютера

Data Set Ready (DSR) Інформує комп'ютер, що модем включений і готовий

(готовність модему)

Clear To Send (CTS) Інформує комп'ютер, що модем готовий почати передачу даних

(готовність до посилки)

Data Carrier Detect (DCD) Інформує комп'ютер, що модем пов'язаний з іншим модемом

(виявлений носій даних)

Ring Indicator (RI) Інформує комп'ютер, що телефонна лінія, до якої приєднаний (індикатор дзвінка) модем, має дзвінок

Спочатку комп'ютер встановлює сигнал DTR, а потім інструктує модем зв'язатися з віддаленою станцією. Після того як модем встановив зв'язок, він встановлює сигнал DSR. Цей сигнал інформує комп'ютер, що модем готовий до зв'язку і в цей момент комп'ютер може встановити сигнал RTS. І якщо модем відповість сигналом CTS, почнеться передача.

Дві стандартні лінії, по яких комп'ютер управляє модемом, доступні через регістр контролю модему мікросхеми UART 8250. Цей регістр має адресу порту на 4 більшу, ніж базова адреса комунікаційного каналу, що використовується. Значення його бітів такі:

Регістр контролю модему

біти 7-5 (завжди 0)

4 1 = вихід UART замкнутий на вхід

3 додатковий користувач призначений на вихід #2

2 додатковий користувач призначений на вихід #1

1 1 = "запит на посилку" активний

0 1 = "готовність комп'ютера" активна

Зазвичай биті 0 і 1 регістра контролю модему встановлені, а інші - рівні 0. Біт 2 рівний 0, за винятком випадків, коли виробник модему призначив його для спеціальних потреб. Біт 3 встановлений тільки у випадку, коли використовуються переривання [8]. Нарешті, біт 4 надає можливість тестування комунікаційних програм без встановлення реального зв'язку. Вихідний сигнал мікросхеми UART подається на вхід, ніби UART приймає послідовні дані. Цю властивість можна застосовувати для тестування правильності роботи самої мікросхеми. Однак при використанні комунікаційних процедур переривання 14Н BIOS вона недоступне.

Чотири лінії, по яких модем посилає інформацію комп'ютеру, керуються регістром статусу модему. Цей регістр розташований за адресою порту на 6 більшою, ніж базова адреса комунікаційного адаптера, що використовується. Ось значення його бітів:

Регістр статусу модему

біт 7 1 = DCD

6 1 = RI

5 1 = DSR

4 1 = CTS

3 1 = зміна в DCD

2 1 = зміна в RI

1 1 = зміна в DSR

0 1 = зміна в CTS

Програма безперервно перевіряє ці біти в ході комунікаційних операцій. Зазначимо, що 4 молодших біта паралельні старшим чотирьом бітам. Ці біти встановлюються в 1 тільки тоді, коли відбувається зміна в статусі відповідного старшого біта з моменту, коли регістр читався останній раз. Всі 4 молодших біта автоматично скидаються при читанні регістра. Програми будь-якого рівня можуть безпосередньо читати цей регістр. Іншою можливістю є використання функції 3 переривання 14Н BIOS, яка повертає регістр статусу модему в AL (при цьому в AH буде міститися регістр статусу лінії). При вході DX повинен містити номер комунікаційного каналу (0 або 1).

Багато які модеми мають значно більше можливостей в порівнянні з тими, що відображені в двох пов'язаних з модемом регістрах. Є можливості автоматичного зв'язку і автоматичної відповіді, які контролюються керуючим рядком. Цей рядок посилається в модем у вигляді звичайних даних. Модем виділяє керуючий рядок з даних по спеціальному символу, що використовується тільки для вказівки початку керуючого рядка. Цей символ може бути попередньо визначений (часто використовується код Esc - ASCII 27) або вибираним користувачем. Модем здатний визначити, наскільки довгим повиннен бути кожний рядок, тому по закінченні рядка він знову розглядає вхідний потік інформації як дані. Кожний модем має свій набір команд. Як приклад розглянемо команди, що використовуються внутрішнім модемом PCjr:

Символ

Значення

Застосування

А

відповідь

вхід в режим відповіді

Bn

перерва

посилає сигнал перерви n × 100 мс

Cn

відлік n

відлічує n дзвінків до відповіді

Dn...n

виклик

посилає рядок чисел n...n

Fn

формат

встановлює протокол зв'язку

Н

розрив

припиняє зв'язок з машиною

I

ініціалізація

ініціалізувати модем

LR

довга відповідь

міняє кодову систему, що використовується

М

режим

модем приймає символи як дані

Nn

новий

міняє командний символ на n

O

originate

вхід в режим originate

Р

pick-up

вхід в режим голосу

Q

запит

запит статусу модему

R

повтор

повторити команду зв'язку

Sn

швидкість

вибір швидкості обміну

Tn...n

прозорість

ігнорувати керуючі рядки в наступних n...n байтах

V

голос

перевести модем в режим голосу

W

очікування

нічого не робити до наступної команди

X

передати

передача тону виклику

Z

тест

проводить діагностику обладнання

У відповідь на команду запиту модем видає інформацію про свій стан, посилаючи її в UART як звичайні дані. Крім іншої інформації може повідомлятися, що лінія зайнята. Щоб правильно використати команди управління модемом і інформацію про його статус, треба ретельно вивчити документацію на даний модем. Модем PCjr описаний в технічному керівництві по PCjr. Приведений нижче приклад дають тільки загальну схему встановлення зв'язку через модем.

Низький рівень

Схема зв'язку через модем на мові асемблер виглядає так:

;встановлюємо сигнал DTR

MOV DX, BASADR ;починаємо з базової адреси

ADD DX, 4 ;вказуємо на регістр контролю модему

MOV AL, 1 ;встановлюємо біт 1

OUT DX,AL ;посилаємо в порт

;посилаємо керуючий рядок модему для виклику

.

(цей код різний для різних типів модемів)

.

;чекаємо поки буде встановлений сигнал DSR

INC DX ;вказуємо на регістр статусу модему

INC DX

TRYAG: IN AL, DX ;отримуємо вміст

TEST AL, 10B ;перевіряємо другий біт

JZ TRYAG ;чекаємо поки він не буде рівний 1

;встановлюємо біт RTS

DEC DX ;повертаємося до регістра управління

DEC DX

MOV AL,3 ;встановлюємо сигнал RTS

OUT DX,AL ;посилаємо в порт

;чекаємо сигналу CTS

INC DX ;повертаємося до регістра статусу

INC DX

ON_MO: IN AL,DX ;отримуємо байт статусу

TEST AL,1 ;перевіряємо біт CTS

JZ ON_МО ;не продовжуємо, поки він не встановлений

;тепер можна посилати дані

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]