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

2.3. Ініціалізація послідовного порту

При ініціалізації ( "відкритті") порту комунікації встановлюються всі його параметри. Ці параметри включають в себе довжину слова, число стоп-бітів, установку парності і швидкість обміну. Довжина слова - це число бітів, яке утворює основну одиницю даних. Хоч зазвичай працюють з порціями по 8 біт, але для стандартних файлів ASCII (в яких всі символи мають коди, що не перевищують ASCII 128) досить 7 біт, а для передачі числових даних - всього 4 біт.

Середній рівень

Функція 0 переривання 14Н BIOS ініціалізує порт комунікації. У DX повинен знаходитися номер комунікаційного каналу (COM1 = 0, COM2 = 1). У AL повинен міститися байт, що ініціалізує дані, значення бітів якого може бути наступним:

біти 1-0 довжина слова. 10 = 7 біт, 11 = 8 біт

2 число стоп-бітів. 0 = 1, 1 =2

4-3 парність. 00 або 10 = немає, 01 = непарн., 11 = парн.

7-5 швидкість обміну.

000 = 110 бод

001 = 150 бод

010 = 300 бод

011 = 600 бод

100 = 1200 бод

101 = 2400 бод

110 = 4800 бод

111 = 9600 бод

У даному прикладі порт ініціалізується зі словом, рівним 8 бітам, одним стоп-бітом і парною парністю. Швидкість обміну -1200 бод.

; присвоюємо значення параметрів змінним

MOV WORDLENGTH,00000011В ;довжина слова 8 біт

MOV STOPBITS, 00000000B ;1 стоп-біт

MOV PARITY, 00011000В ;парна парність

MOV BAUDRATE,10000000В ;швидкість 1200 бод

;ініціалізувати СОМ1

MOV AL,0 ;очищаємо AL

OR AL,WORDLENGTH ;встановлюємо потрібні біти

OR AL,STOPBITS

OR AL,PARITY

OR AL,BAUDRATE

MOV AH, 0 ;функція ініціалізації порту

MOV DX, 0 ;вибераємо СОМ1

INT 14H ;ініціалізувати порт

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

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

Ініціалізація швидкості обміну. Дільник швидкості обміну – це число, на яке треба розділити частоту системних годин (1190000 Гц), щоб отримати бажану швидкість обміну. Наприклад, для швидкості обміну 1200 бод дільник швидкості обміну повинен бути рівний 96, оскільки 1190000/96 приблизно дорівнює 1200. Чим більший дільник, тим менша швидкість обміну. Швидкість обміну 300 бод і менше вимагає двобайтового числа для дільника. Старший байт посилається в 3F9H (або 2F9H), а молодший - в 3F8H (2F8H). У обох випадках біт 7 регістра управління лінії повинен бути встановлений в 1 перед засиланням значення, в іншому випадку за цими двома адресами значення будуть адресовані в інші регістри . Ось деякі значення, необхідні для звичайних швидкостей обміну:

Швидкість обміну

3F9H

3F8H

110

04H

17H

300

01H

80H

600

00H

C0H

1200

00H

60H

1800

00H

40H

2400

00H

30H

3600

00H

20H

4800

00H

18H

9600

00H

0CH

Завжди встановлюйте регістри швидкості обміну першими, оскільки вони єдині, які вимагають установки біта 7 в регістрі контролю лінії. Після цього треба змінити вміст регістра контролю лінії, скидаючи біт 7, щоб всі інші доступи до регістрів були правильними. Оскільки регістр контролю лінії є регістром тільки для запису, то немає способу повернути біт 7 назад в 1 без одночасної установки всіх інших бітів цього регістра. Зазначимо, що PCjr використовує інших дільників, опис яких ви можете знайти в технічному керівництві.

Ініціалізація регістра контролю лінії. Значення бітів регістра контролю лінії, адреса порту якого рівна 3FBH (або 2FBH), можуть бути наступними:

бити 1-0 довжина символа: 00 = 5 біт, 01=6 біт, 10=7 біт, 11=8 біт

2 число стоп-бітів: 0 = 1, 1 = 1,5, якщо довжина символів рівна п'яти, інакше - 2

3 парність: 1 = генерується біт парності, 0 = немає

4 тип парності: 0 = непарна, 1 = парна

5 фіксація парності: примушує біт парності завжди бути 0 або 1.

0 = відмінена

1 = завжди 1, якщо біт 3 = 1 & біт 4=0

або 1 = завжди 0, якщо біт 3 = 1 & біт 4 = 1 або

1 = немає парності, якщо біт 3 = 0

  1. установка перерви: Викликає виведення строки нулів як сигнал віддаленої станції.

0 = заборонено, 1 = перерва

7 міняє адреси портів інших регістрів

Зазвичай биті 5-7 скинені в 0. Інші описують значення, що визначаються протоколом обміну.

Регістр дозволу переривання. Навіть якщо ви не використовуєте переривання, все одно треба зробити запис в регістр дозволу переривання, щоб бути упевненим, що переривання заборонені. Просто вмістіть в цей регістр 0. Регистр ідентифікації переривання можна ігнорувати.

Ініціалізація інших регістрів пов'язана з модемами. Ясно, що модеми потрібні тільки для зв'язку з віддаленими пристроями, а не для управління сусідніми, такими, як послідовний принтер. У [5] пояснено, як ініціалізувати регістр контролю модему.

У наступному прикладі з області даних BIOS береться базова адреса СОМ1, після чого різні регістри ініціалізуються для швидкості обміну 1200 бод, семибітових даних, парної парності і одного стоп-біта.

;отримуємо базову адресу СОМ1

MOV AX, 40H ;ES вказує на область даних BIOS

MOV ES, AX

MOV DX, ES:[0] ;отримуємо базову адресу СОМ 1

; ініціалізувати регістри дільника швидкості обміну на 1200 бод

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

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

OUT DX, AL ;посилаємо байт

DEC DX ;вказуємо на старший байт дільника

DEC DX ;швидкості обміну

MOV AL, 0 ;старший байт для 1200 бод

OUT DX, AL ;посилаємо старший байт для 1200 бод

DEC DX ;вказуємо на молодший байт дільника

MOV AL, 60H ;молодший байт дільника для 1200 бод

OUT DX, AL ;посилаємо молодший байт

;ініціалізувати регістр контролю лінії

MOV AL, 0 ;обнулюємо AL

OR AL, 10B ;довжина даних 7 біт

OR AL, 000B ;1 стоп-біт

OR AL,1000B ;генерується біт парності

OR AL,10000B ;парна парність

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

OUT DX, AL ;посилаємо значення ініціалізації

;ініціалізувати регістр дозволу переривання

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

DEC DX ;переривання

MOV AL, 0 ;забороняємо переривання

OUT DX, AL ;посилаємо байт

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