1. Визначити причину переривання
Для цього потрібно проаналізувати стан бітів D1 D2, які визначають причину переривання:
Біти D2 D1 | Причина переривання |
00 | переривання по лінії стану; |
01 | буфер передавача порожній; |
10 | дані прийняті; |
11 | змінився стан модему. |
У залежності від того, яке відбулося переривання, його треба відповідним чином обробити.
Алгоритм роботи для кожного типу переривання від СОМ порта:
Відбулося переривання по лінії стану
Прочитати регістр стану лінії і конкретизувати причину переривання (дане переривання скидається після читання регістра стану лінії). Якщо це необхідно, подати основній програмі сигнал про помилку, що відбулася, з метою її усунення. Наприклад, у випадку розриву лінії (BREAK) (віддалений модем повісив трубку), можна було б спробувати відновити зв'язок.
Переривання по прийому даних
Черговий символ прийнятий, і його можна прочитати через регістр даних. Переривання скидається після читання регістра даних. Прийнятий байт необхідно записати в прийомний буфер програми, з якого згодом його прочитає основна програма. Буфер приймача зручно організувати у виді черги.
Буфер передавача порожній
Переривання відбувається у випадку, якщо буфер передавача порожній і можна передати COM-порту черговий символ. Можна організувати буфер передавача програми, у який програма буде записувати дані, призначені для відправки через COM-порт. У цьому випадку, коли прийде переривання, треба прочитати черговий символ з програмного буфера і записати його в регістр даних. Переривання скидається після запису чергового символу в регістр даних UART. Якщо немає даних для передачі (програмний буфер передавача порожній), можна заборонити це переривання через регістр керування перериваннями.
Змінився стан модему
Переривання відбувається при зміні стану вхідних ліній CTS, RI, DCD, DSR. Стан цих ліній можна визначити, прочитавши регістр стану модему MSR. Це переривання використовується для виявлення сигналу RING на телефонній лінії. Переривання автоматично скидається після читання регістра стану модему.
За час який переривання оброблялося може наступити нове переривання по ліній IRQ, тому необхідно проаналізувати біт D0. У випадку коли переривання знову згенероване (біт D0 регістра ідентифікації переривань дорівнює одиниці). Тоді перед завершенням обробки переривання необхідно обробити наступне переривання відповідно до стану бітів D1, D2. Так варто робити до тих пір, поки не будуть оброблені всі переривання (біт D0 не буде рівний нулю).
Виконавши всі вищевказані застереження та вимоги для виходу з процедури обробки переривання необхідно передати контролеру переривань команду обробки кінця переривання. Для цього посилається в порт з адресою 20h команда кінця переривання і здійснюється вихід з процедури обробки переривання:
mov al,20h
out 20h,al
iret
Установка оброблювача переривань
Необхідно установити оброблювач переривань, змінивши відповідний елемент таблиці векторів переривань. Адреса старого оброблювача зберігається в глобальних змінних.
Останнім кроком в ініціалізації регістрів UART є установка регістра керування перериваннями, у який записується занчення причин при настанні яких генеруються переривання. Наприклад, щоб дозволити генерацію переривань при надходженні чергового символу, треба записати значення для бітів D1,D2 відповідно 0 та 1 у регістрі керування перериваннями:
// установлюємо регістр керування перериваннями
//ICR - адреса регістра керування перериваннями
outp(port_adr+ICR, 1);
На цьому етап ініціалізації регістрів UART можна вважати закінченим. Тепер COM-порт готовий до обміну через нього даними з мобільним телефоном.
Ініціалізація мобільного телефону
Ініціалізація мобільного телефону здійснюється через передачу мобільному телефону АТ команд, які реалізовані в стандарті 07.07, 05.07 міжнародної організації ETSI 15.03.2000 року.
Для ініціалізації мобільного телефону завантажимо стандартну (заводську) конфігурацію параметрів стільникового термінального обладнання.
Для цього передамо мобільному телефону команду ATZ. Якщо ініціалізація пройшла успішно мобільний телефно поверне “ОК”. Після цього задамо режим передачі номеру телефону на СОМ порт: АТ+CLIP = 1
Список основних команд приведений у пункці 2.2 цього розділу [4].
Після ініціалізації мобільного телефону, комплекс переходить у режим очікування дзвінків. Якщо у процесі роботи мобільний телефон повернув на СОМ порт команду <ОК>, то команда розпізнана, виконана без помилок.
Завершення програми
Для завершення комунікаційної програми, що використовує переривання, необхідно скинути сигнали DTR і RTS і заборонити через контролер переривань переривання від COM-порту:
// зчитуємо стан регістра маски переривань
mov dx,21h
in dx,al
// забороняємо переривання від порту COM1
or al,00010000b
// записуємо нове значення в регістр
// маски переривань
out dx,al
Потім потрібно відновити старий вектор оброблювача переривань і вийти з програми. Якщо програму завершити некоректно, то при наступних завантаженнях драйвер СОМ порту буде працювати некоректно.
... та модернізації переліку послуг, в основу проекту були покладені принципи, аналогічні принципам конструювання послуг інтелектуальної мережі. 2. Системи комп'ютерної телефонії фірми «Беркут» Науково-виробнича фірма «Беркут» (Санкт-Петербург) є виробником широкого спектра систем телекомунікаційного обладнання, розроблюваних на базі власної платформи комп'ютерної телефонії та прикладного ПЗ. ...
0 комментариев