Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







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 бит, проверка на четность и один стоповый бит, который вместе со стартовым битом добавляет до
10 бит на символ. Вы ожидаете получать около 30 символов каждую секунду. После чтения символа программа имеет около 1/30 секунды для выполнения других операций. Если вы не желаете потерять какие-либо символы, то в это время должны снова начать упорядочение порта. Что произойдет, когда скорость возрастет до 9600 бод? Временной интервал между символами слишком мал для выведения символа на экран дисплея, не позволяет интерпретировать специальные символы и эмулировать терминал.

В подходе, основанном на управлении прерываниями, программа предоставляет возможность прерываниям устройства ввода/вывода поступать непосредственно на центральный процессор, который продолжает выполнять свою работу, не связываясь с устройством. Когда устройство готово к вводу/выводу, оно сигнализирует об этом центральному процессору посредством аппаратуры. Получив этот сигнал, центральный процессор сохраняет свое текущее состояние и вызывает подпрограмму обслуживания прерываний, адрес которой хранится в таблице векторов прерываний. Эта подпрограмма выполняет операцию ввода/вывода, затем восстанавливает состояние машины и возвращается в прерванную программу. Учитывайте регистр символов, поступающих в коммуникационный порт персонального компьютера. Организовав где-нибудь некоторые ячейки памяти (буфер), вы можете использовать простую подпрограмму обработки прерываний, которая быстро считывает символ из коммуникационного порта и сохраняет его в следующей доступной ячейке памяти в буфере. Символы не будут утеряны в процессе считывания и сохранения символа драйвером прерываний перед поступлением следующего символа. Эта несложная задача достаточно проста для выполнения в короткие временные интервалы между поступающими символами при скорости передачи
9600 бод. Прелесть этого метода заключается в том, что время обработки главной программой символов, хранящихся в буфере, не имеет значения. Конечно, существует риск переполнения буфера, но эта проблема может быть решена простым увеличением его размера. Если этот способ не очень хорош, то для избежания переполнения буфера можно использовать управление потоком с помощью XON/XOFF.

Из наших рассуждений должно стать очевидным, что управляемая прерываниями буферная связь с использованием управления потоком с помощью XON/XOFF, предпочтительнее упорядоченной связи.

Последовательный адаптер персонального компьютера может быть запрограммирован для прерывания работы центрального процессора всякий раз, как только происходит одно из четырех событий (см. рис. 17.8). Универсальный асинхронный приемопередатчик присваивает приоритет каждому из четырех событий. В табл. 17.1 перечислены четыре прерывания.

Таблица 17.1

Прерывания последовательного адаптера

 

Приоритет Идентификатор прерывания
  Состояние приемной линии (RLS) Доступность данных для приема (RDA) Регистр хранения передачи свободен (THRE) Состояние модема (MS)

 

 

Символы ASCII

┌─┬─┬─┬─┬─┬─┬─┬─┐ ┌─────────────────────────────────┐

└─┴─┴─┴─┴─┴─┴─┴─┘ | Регистр разрешения 1 2 3 4 |

| прерывания ┌─┬─┬─┬─┐ |

| └─┴─┴─┴─┘ |

| │ |

| |

| Идентификация ┌─┬─┬─┬─┐ |

| прерывания └─┴─┴─┴─┘ |

Последовательный | ┌────────┘ |

адаптер └──────────────┐ |

│ ││││││││││││││││ |

└─┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴─┘

 

┌─┐

Прерывание к 8259A ─┘ └──

 

 

Рис. 17.8. Прерывания последовательного адаптера

 

Событием высшего приоритета является прерывание «состояние приемной линии» (RLS), которое обрабатывается чтением регистра состояния линии. Прерывание RLS имеет место, когда происходит одно из следующих событий:

– линия отключается (логический 0) на период времени больше требуемого для получения символа;

– символ получен до того, как был считан предыдущий (ошибка выхода за границы);

– ошибка при проверке на четность;

– при восстановлении символа из полученных битов не обнаружен стоповый бит (ошибка кадровой синхронизации).

Затем следует прерывание «доступность данных для приема» (RDA), которое возникает при готовности символа для чтения из приемного буферного регистра. Оно может быть сброшено путем считывания символа из регистра.

Следующий приоритет имеет прерывание «регистр хранения передачи свободен» (THRE). Как следует из имени прерывания, оно имеет место, когда регистр, хранящий символ, предназначенный для передачи (имеет тот же адрес порта, что и регистр приемного буфера), свободен. Прерывание обрабатывается записью в этот регистр или чтением из регистра идентификации прерывания. Необходим другой метод сброса этого прерывания, так как иногда даже через прерывания универсального асинхронного приемопередатчика сообщается, что буфер передачи пуст и, возможно, отсутствует информация для передачи.

Самый низкий приоритет имеет прерывание «состояние модема» (MS). Оно имеет место, когда модем:

– получает (посылает) сигнал «открыт для передачи» (CTS);

– показывает свою готовность установкой линии «набор данных готов» (DSR);

– получает сигнал, устанавливающий линию «индикатор кольца» (RI) в логическую;

– определяет сигнал переноса (тот тон, который Вы слышите, когда вызываете номер и модем отвечает), устанавливая линию «определение сигнала приемной линии» (RLSD) в 1.

Прерывание состояния модема может быть сброшено чтением регистра состояния модема.

Эти прерывания могут включаться и выключаться индивидуально установкой соответствующих битов в регистре разрешения прерываний. В последовательно-параллельном адаптере фирмы IBM (так же, как и в асинхронном адаптере фирмы IBM) бит с именем OUT2 в регистре управления модемом должен быть установлен в 1 до того, как прерывания универсального асинхронного приемопередатчика могут достичь центральный процессор. Когда имеют место прерывания, последовательный адаптер собирает их согласно приоритету и направляет прерывание высшего приоритета в регистр идентификации прерывания. Адаптер прекращает отвечать на последующие прерывания равного или меньшего приоритета до тех пор, пока не определит, что текущее не обслужено подпрограммой обслуживания прерываний.

Программируемый контроллер прерываний 8259A. В системах
MS-DOS центральный процессор (микропроцессор 80х86) непосредственно не принимает прерывания, поступающие от аппаратных средств, таких как последовательный адаптер. Прерывания аппаратуры сначала обслуживаются чипом программируемого контроллера прерываний Intel 8259A. Он действует как «приемщик» центрального процессора. Контроллер 8259A, как программируемое устройство, принимает до восьми различных прерываний и может маскировать (игнорировать) прерывания индивидуально. 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.


МЕТРОЛОГИЯ И СТАНДАРТИЗАЦИЯ

 







Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычис­лить, когда этот...

Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор...

Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...

Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.