Системна підтримка СОМ-портів.

 

СОМ-порти підтримуються сервісом BIOS Int 14h, що забезпечує описані нижче функції.

· OOh — ініціалізація (установка швидкості обміну і формату посилок, заданих регістром AL; заборона джерел переривань). На сигнали DTR і RTS впливу не робить (після апаратного скидання вони пасивні).

· 0lh — вивод символу з регістра AL (без апаратних переривань). Активуються сигнали DTR і RTS, і після звільнення регістра THR у нього міститься виведений символ. Якщо за заданий час регістр не звільняється, фіксується помилка тайм-ауту і функція завершується.

· 02h — уведення символу (без апаратних переривань). Активується тільки сигнал DTR (RTS переходить у пасивний стан), і очікується готовність прийнятих даних, прийнятий символ міститься в регістр AL. Якщо за заданий час дані не отримані, функція завершується з помилкою тайм-ауту.

· 03h — опитування стану модему і лінії (читання регістрів MSR і LSR). Цю
гарантовано швидку функцію звичайно викликають перед функціями
введення-виведення щоб уникнути ризику чекання тайм-ауту.

При виклику Int 14h номер функції задається в регістрі АН, номер порту (0-3) - у регістрі DX (0 - СОМ1, 1 - COM2...). При поверненні з функцій 0, 1 і 3 регістр АН містить байт стану лінії (регістр LSR), AL — байт стану модему (MSR). При поверненні з функції 2 нульове значення біта 7 регістра АН указує на наявність прийнятого символу в регістрі AL; ненульове значення біта 7 — на помилку прийому, яку можна уточнити функцією 3.

Байт стану лінії (регістр АН) має наступний формат:

· біт 7 — помилка тайм-ауту (після виклику функції 2 — ознака будь-якої помилки);

· біт 6 — регістр зрушення передавача порожня (пауза передачі);

· біт 5 — проміжний регістр передавача порожній (готовий прийняти символ для передачі);

· біт 4 — виявлений обрив лінії;

· біт 3 — помилка кадру (відсутність стоп-бита);

· біт 2 — помилка паритету прийнятого символу;

· біт 1 — переповнення (утрата символу);

· біт 0 — регістр даних містить прийнятий символ.

Байт стану модему (регістр AL при поверненні з функцій 0, 1, 3) має наступний формат:

· біт 7 — стан лінії DCD;

· біт 6 — стан лінії RI;

· біт 5 — стан лінії DSR;

· біт 4 — стан лінії CTS;

· біт 3 — зміна стану DCD;

· біт 2 — зміна що обгинає RI;

· біт 1 — зміна стану DSR;

· біт 0 — зміна стану CTS.

При ініціалізації порту біти регістра AL мають наступне призначення:

· біти [7:5] — швидкість обміну:

000=110; 100=1200; 001 = 150; 101=2400; D 010=300; 110=4800; 011=600; 111=9600 біт/с;

· біти [4:3] — контроль паритету:

01 — число одиниць непарне;

11 — парне;

0 і 10 — без контролю;

 

· біт 2 — кількість стоп-бита: 0 — 1 біт, 1 — 2 біти (на швидкості 110 біт/с – 1,5 стоп-біт);

· біти [1:0] — довжина посилки: 00 — 5 біт, 01—6 біт, 10 — 7 біт, 11-8 біт.

 

У процесі початкового тестування POST BIOS перевіряє наявність послідовних портів (регістрів UART 8250 чи сумісних) по стандартних адресах і поміщає базові адреси виявлених портів в осередки BIOS Data Area 0:0400, 0402, 0404, 0406. Ці осередки зберігають адреси портів з логічними іменами З0М1-З0М4. Нульове значення адреси є ознакою відсутності порту з даним номером. В осередки 0:047С, 047D, 047Е, 047F заносяться константи, що задають тайм-аут для портів.

Виявлені порти ініціюються на швидкість обміну 2400 біт/з, 7 біт даних з контролем на парність (even), 1 стоп-битий. Керуючі сигнали інтерфейсу DTR і RTS переводяться у вихідний стан («виключена» — позитивна напруга).