|
A Приемный буфер/регистр хранения передачиB ┌───┬───┬───┬───┬───┬───┬───┬───┐ (COM1-3F8| 1.| | | | | | | 2.| COM2-2F8)└───┴───┴───┴───┴───┴───┴───┴───┘ Регистр разрешения прерывания B+1 ┌───┬───┬───┬───┬───┬───┬───┬───┐ | 0 | 0 | 0 | 0 | 3.| 4.| 5.| 6.| └───┴───┴───┴───┴───┴───┴───┴───┘ Установить бит в 1 для разрешения Регистр идентификации прерывания B+2 ┌───┬───┬───┬───┬───┬───┬───┬───┐ | 0 | 0 | 0 | 0 | 0 | | | 7.| └───┴───┴───┴───┴───┴───┴───┴───┘ └─3-битовый идентификатор прерывания 110 = состояние линии 100 = приемные данные 010 = буфер передачи свободен 000 = состояние модема Регистр управления линией B+3 ┌───┬───┬───┬───┬───┬───┬───┬───┐ | 8.| | 9. |10.| 11. | └───┴───┴───┴───┴───┴───┴───┴───┘ └─BREAK: 1 устанавливает линию в SPACE Регистр управления модемом B+4 ┌───┬───┬───┬───┬───┬───┬───┬───┐ a. - OUT2 | 0 | 0 | 0 |12.| a.| b.| c.| d.| b. - OUT1 └───┴───┴───┴───┴───┴───┴───┴───┘ c. - RTS └── 13. d. - DTR Регистр состояния линии B+5 ┌───┬───┬───┬───┬───┬───┬───┬───┐ | 0 |14.|15.|16.|17.|18.|19.|20.| └───┴───┴───┴───┴───┴───┴───┴───┘ Регистр состояния модема a. - RLSD B+6 ┌───┬───┬───┬───┬───┬───┬───┬───┐ b. - Delta RLST | a.| RI|DSR|CTS| b.| c.| d.| e.| c. - Delta RI └───┴───┴───┴───┴───┴───┴───┴───┘ d. - Delta DSR E. - Delta CTS
Рис. 17.7. Регистры в 8250 UART: A – адрес порта или регистр; B – базовый адрес; 1. – бит 7 данных; 2. – бит 0 данных; 3. – состояние модема; 4. – состояние линии приема; 5. – регистр хранения передачи свободен; 6. – прием данных разрешен; 7. – 0 означает, что прерывание ждет; 8. – бит доступа к защелке; 9. – четность: 000 = нет, 001 = нечетность, 011 = четность; 10. – число стоповых битов; 11. – длина слова: 10-7, 11-8; 12. – проверка обратного цикла; 13. – должен быть 1 для прерывания ввода/вывода персонального компьютера; 14. – передача свободна; 15. – регистр хранения передачи свободен; 16. – обнаружен BREAK; 17. – ошибка кадровой синхронизации; 18. – ошибка четности; 19. – ошибка выхода за границы; 20. – данные для приема готовы
Затем следует регистр управления линией, используемый для установления различных связных параметров: длина слова, количество стоповых битов, четность и скорость передачи в бодах. Пятый регистр – это регистр управления модемом, который используется для передачи модему сигналов, таких как DTR (терминал готов) и RTS (запрос на передачу). Наконец, два последних регистра – регистр состояния линии и регистр состояния модема – показывают соответственно состояние линии и модема. Первые два регистра применяются также для установки скорости передачи в бодах. Скорость передачи в бодах определяется как 16-битовый делитель тактовой частоты, используемой для последовательного адаптера (1,8432 МГц в большинстве систем MS-DOS). Значение делителя вычисляется по формуле
1,843,200 делитель= ------------------------------ Х скорость передачи в бодах
Чтобы установить скорость передачи в бодах, необходимо проделать следующее: 1. Установить в 1 наиболее значимый бит регистра управления линией (он называется битом защелки доступа делителя или DLAB). 2. Загрузить младший и старший байты делителя соответственно в приемный буфер и регистр разрешения прерываний. 3. Установить DLAB в 0 для обеспечения нормальной работы универсального асинхронного приемопередатчика. Применяя этот подход можно установить любое значение скорости передачи в бодах. Обратите внимание, что максимально возможной скоростью передачи является 1/16 тактовой частоты, или 115,200 бод (для этой скорости передачи делитель равен 1). Этот предел вытекает из того, что делитель не может быть меньше единицы. Cуществуют два общих метода ввода/вывода в любой вычислительной системе: упорядоченный и управляемый прерываниями. Упорядоченность относится к повторяющейся проверке состояния регистра устройства ввода/вывода для инициализации требуемой транзакции. В упорядоченном вводе/выводе программа, запрашивающая символ ввода, многократно считывает состояние регистра в устройстве ввода/вывода до тех пор, пока оно не покажет, что символ доступен для ввода (или до тех пор, пока программа не решит, что «время закончилось»). Когда состояние указывает, что имеется готовый для работы символ, программа считывает его из соответствующего регистра устройства ввода/вывода. Сходная последовательность «ждать, до тех пор, пока не готов, затем писать» используется при выведении символов на устройство ввода/вывода. Таким образом, дальнейшее выполнение программы приостанавливается до завершения выполнения операции ввода/вывода. Большой проблемой для упорядоченного ввода/вывода через коммуникационный порт является то, что при скорости передачи выше 300 бод программе трудно что-либо сделать с получаемым символом, кроме как отображать его на экране. Рассмотрим следующий пример. Предположим, что мы читаем символы со скоростью 300 бод и имеем следующие связные параметры: длина слова 7 бит, проверка на четность и один стоповый бит, который вместе со стартовым битом добавляет до В подходе, основанном на управлении прерываниями, программа предоставляет возможность прерываниям устройства ввода/вывода поступать непосредственно на центральный процессор, который продолжает выполнять свою работу, не связываясь с устройством. Когда устройство готово к вводу/выводу, оно сигнализирует об этом центральному процессору посредством аппаратуры. Получив этот сигнал, центральный процессор сохраняет свое текущее состояние и вызывает подпрограмму обслуживания прерываний, адрес которой хранится в таблице векторов прерываний. Эта подпрограмма выполняет операцию ввода/вывода, затем восстанавливает состояние машины и возвращается в прерванную программу. Учитывайте регистр символов, поступающих в коммуникационный порт персонального компьютера. Организовав где-нибудь некоторые ячейки памяти (буфер), вы можете использовать простую подпрограмму обработки прерываний, которая быстро считывает символ из коммуникационного порта и сохраняет его в следующей доступной ячейке памяти в буфере. Символы не будут утеряны в процессе считывания и сохранения символа драйвером прерываний перед поступлением следующего символа. Эта несложная задача достаточно проста для выполнения в короткие временные интервалы между поступающими символами при скорости передачи Из наших рассуждений должно стать очевидным, что управляемая прерываниями буферная связь с использованием управления потоком с помощью XON/XOFF, предпочтительнее упорядоченной связи. Последовательный адаптер персонального компьютера может быть запрограммирован для прерывания работы центрального процессора всякий раз, как только происходит одно из четырех событий (см. рис. 17.8). Универсальный асинхронный приемопередатчик присваивает приоритет каждому из четырех событий. В табл. 17.1 перечислены четыре прерывания. Таблица 17.1 Прерывания последовательного адаптера
Символы ASCII ┌─┬─┬─┬─┬─┬─┬─┬─┐ ┌─────────────────────────────────┐ └─┴─┴─┴─┴─┴─┴─┴─┘ | Регистр разрешения 1 2 3 4 | | прерывания ┌─┬─┬─┬─┐ | | └─┴─┴─┴─┘ | | │ | | | | Идентификация ┌─┬─┬─┬─┐ | | прерывания └─┴─┴─┴─┘ | Последовательный | ┌────────┘ | адаптер └──────────────┐ | │ ││││││││││││││││ | └─┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴─┘
┌─┐ Прерывание к 8259A ─┘ └──
Рис. 17.8. Прерывания последовательного адаптера
Событием высшего приоритета является прерывание «состояние приемной линии» (RLS), которое обрабатывается чтением регистра состояния линии. Прерывание RLS имеет место, когда происходит одно из следующих событий: – линия отключается (логический 0) на период времени больше требуемого для получения символа; – символ получен до того, как был считан предыдущий (ошибка выхода за границы); – ошибка при проверке на четность; – при восстановлении символа из полученных битов не обнаружен стоповый бит (ошибка кадровой синхронизации). Затем следует прерывание «доступность данных для приема» (RDA), которое возникает при готовности символа для чтения из приемного буферного регистра. Оно может быть сброшено путем считывания символа из регистра. Следующий приоритет имеет прерывание «регистр хранения передачи свободен» (THRE). Как следует из имени прерывания, оно имеет место, когда регистр, хранящий символ, предназначенный для передачи (имеет тот же адрес порта, что и регистр приемного буфера), свободен. Прерывание обрабатывается записью в этот регистр или чтением из регистра идентификации прерывания. Необходим другой метод сброса этого прерывания, так как иногда даже через прерывания универсального асинхронного приемопередатчика сообщается, что буфер передачи пуст и, возможно, отсутствует информация для передачи. Самый низкий приоритет имеет прерывание «состояние модема» (MS). Оно имеет место, когда модем: – получает (посылает) сигнал «открыт для передачи» (CTS); – показывает свою готовность установкой линии «набор данных готов» (DSR); – получает сигнал, устанавливающий линию «индикатор кольца» (RI) в логическую; – определяет сигнал переноса (тот тон, который Вы слышите, когда вызываете номер и модем отвечает), устанавливая линию «определение сигнала приемной линии» (RLSD) в 1. Прерывание состояния модема может быть сброшено чтением регистра состояния модема. Эти прерывания могут включаться и выключаться индивидуально установкой соответствующих битов в регистре разрешения прерываний. В последовательно-параллельном адаптере фирмы IBM (так же, как и в асинхронном адаптере фирмы IBM) бит с именем OUT2 в регистре управления модемом должен быть установлен в 1 до того, как прерывания универсального асинхронного приемопередатчика могут достичь центральный процессор. Когда имеют место прерывания, последовательный адаптер собирает их согласно приоритету и направляет прерывание высшего приоритета в регистр идентификации прерывания. Адаптер прекращает отвечать на последующие прерывания равного или меньшего приоритета до тех пор, пока не определит, что текущее не обслужено подпрограммой обслуживания прерываний. Программируемый контроллер прерываний 8259A. В системах Как контроллер 8259A присваивает приоритеты? Как и универсальный асинхронный приемопередатчик имеет свой метод определения приоритетов прерываний последовательного адаптера, 8259A обладает своей схемой присваивания приоритетов прерываниям. Последовательный адаптер является только одним из аппаратных средств, которые могут направлять прерывания контроллеру 8259A. Каждое устройство жестко смонтировано или соединено проводниками с различными входными устройствами, известными как входные устройства запроса прерываний (IRQ) контроллера 8259A. Поэтому обычно говорят об IRQ, присвоенном аппаратному прерыванию. Другой характеристикой, связанной с IRQ прерывания, является номер прерывания, используемый для обращения к отдельному прерыванию. В персональном компьютере IBM PC этот номер равен восьми плюс IRQ. Когда имеет место прерывание, центральный процессор использует его номер в качестве индекса в таблице, известной как таблица векторов прерываний (расположена в начале памяти), которая содержит адрес подпрограммы обработки данного прерывания. Так как контроллер 8259A связывает высшие приоритеты с низкими IRQ, аппаратные устройства, требующие максимального внимания, имеют низкие IRQ. Таким образом, системный таймер имеет IRQ0, клавиатура имеет IRQ1 и так далее. Несмотря на то, что MS-DOS 3.3 поддерживает четыре коммуникационных порта, с COM1 по COM4, эта поддержка не означает ничего, кроме обладания четырьмя драйверами с этими именами, каждый из которых поддерживается безбуферно и только упорядоченным вводом/выводом. Так как мы интересуемся управляемыми прерываниями последовательным вводом/выводом, детали поддержки системой MS-DOS коммуникационных портов не относятся к данному вопросу. В персональном компьютере IBM PC только два первых порта, COM1 и COM2, имеют определенные номера IRQ и номера прерываний. Другие последовательные порты, такие как COM3 и COM4 могут быть использованы для управляемого прерываниями ввода/вывода после установки адаптеров и присваивания номеров IRQ посредством соответствующей установки перемычек. Как только станет известен номер IRQ, программирование портов COM3 и COM4 выполняется таким же образом, как и портов COM1 и COM2. Более того, мы будем рассматривать только порты COM1 и COM2. Двум последовательным портам COM1 и COM2 присвоены соответственно IRQ4 и IRQ3, то есть номера прерываний 12 и 11 (десятичные). Между прочим, номера прерываний должны быть известны, так как функциональные вызовы DOS (посредством программного прерывания 21h) с функциональными номерами 35h и 25h могут быть использованы соответственно для получения и установки векторов прерываний. Есть еще несколько моментов, о которых необходимо упомянуть перед началом разговора о программировании последовательных портов для управляемого прерываниями ввода/вывода. Микропроцессор 80х86 автоматически делает невозможными все прерывания в то время, когда он передает управление обслуживающей подпрограмме текущего прерывания. Несмотря на то, что контроллер 8259A во время обслуживания прерывания задерживает последующие прерывания того же или меньшего приоритета, прерывания старшего приоритета все еще получают подтверждение о приеме, если установлен флаг прерывания. Если мы вновь немедленно не разрешим прерывание до начала обслуживания прерывания от последовательного порта, многие жизненно важные системные функции, передаваемые прерываниями (такие как системный таймер, клавиатура и контроллер диска), обслуживаться не будут. Важно поэтому, используя команду STI (установить флаг прерывания), переключить прерывание как только обслуживающая подпрограмма примет на себя управление. Это предоставит возможность таймеру, клавиатуре и контроллеру диска прерывать подпрограмму обслуживания последовательного порта, позволяя функционировать другим устройствам. Как мы сможем сообщить контроллеру 8259A о том, что обработка последовательного прерывания завершена? Наша служебная подпрограмма должна направить 8259A команду «конец прерывания» (EIO) перед возвращением управления центральному процессору. Несмотря на то, что существуют способы требования EIO для различных IRQ, для схемы приоритета, используемой в персональном компьютере, достаточно направить контроллеру 8259A то, что известно как «неспецифический» EOI (код 20h). Название «неспецифический» вытекает из того, что эта команда не определяет, какое прерывание обслуживалось. Она просто говорит контроллеру, что обслуживание прерывания высшего приоритета завершено. Это разрешает обслуживание прерываний того же или высшего IRQ. МЕТРОЛОГИЯ И СТАНДАРТИЗАЦИЯ
ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования... ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры... Система охраняемых территорий в США Изучение особо охраняемых природных территорий(ООПТ) США представляет особый интерес по многим причинам... Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|