КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Порты асинхронного адаптера
Асинхронный адаптерПК обычно содержит несколько портов, через которые можно подключать внешние устройства. Каждому порту соответствует несколько регистров, через которые программа получает к нему доступ. В зависимости от версии, BIOS инициализирует первые два или четыре порта коммуникации. Каждому порту отводится по одной микросхеме UART. Базовый адрес – это двухбайтовый адрес порта, который является младшим из группы адресов портов, дающих доступ к UART. Базовые адреса портов хранятся в ячейках, начиная с адреса 0040:0000h. При выполнении BIOS начальной загрузки каждому порту присваивается логическое имя COM1÷COM4. Базовый адрес порта определяется путем чтения переменных BIOS, адреса которых приведены в табл. 105. Перед работой с портом рекомендуется определить его адрес путем чтения переменной BIOS, а не использовать стандартное значение.
Табл. 105. Адреса переменных BIOS для COM портов.
Порту соответствует также определенная линия прерывания IRQ для уведомления об изменении его состояния. Архитектура IBM PC обеспечивает управление прерываниями для двух последовательных портов COM1 (IRQ4, соответствует INT 0Ch) и COM2 (IRQ3 соответствует INT 0Bh), и оставляет место в таблице прерываний еще для COM3 и COM4. Микросхема 8250 содержит 11 программируемых однобайтовых регистров, с помощью которых управляется и контролируется последовательный порт. Адреса регистров, соответствующих каждому порту, вычисляются путем добавления смещений к базовому адресу. Доступ к регистрам осуществляется через восемь адресов портов (табл. 106), занимающих смежные адреса в пространстве устройств ввода-вывода. Следует заметить, что регистров реально больше, т.к. регистры по смещениям 0 и 1 мультиплексируются регистром управления линией LCR. Регистр хранения передатчика (Transmitter Register). Байт данных, записанный в регистр THR, сразу передается в сдвиговый регистр передатчика (TSR). Здесь данные преобразуются в последовательную форму, добавляются биты четности и кадрирования и передаются на последовательный выход микросхемы SOUT. В отличие от параллельного интерфейса здесь нет необходимости в наличии стробирующего импульса. Младший значащий разряд передаваемого символа записывается в D0.
Табл. 106. Назначение регистров микросхемы 8250.
Буферный регистр приемника RBR (Read Buffer Register). Данные в последовательной форме поступают на вход микросхемы SIN. Затем удаляются кадрирующие биты, бит четности и информационные разряды передаются в сдвиговый регистр приемника RSR (Receiver Shift Register). В регистре RSR выполняется «сборка» символа из требуемого числа информационных разрядов (от 5 до 8), даже при наличии ошибок кадрирования и четности. Полученный символ записывается в регистр RBR, начиная с младшего разряда D0. Формат регистров THR и RBR одинаков (табл. 107).
Табл. 107. Формат регистра передатчика и приемника.
Регистр управления линией LCR (Line Control Register). Значения разрядов регистра LCR определяют асинхронный формат данных (табл. 108).
Табл. 108. Формат регистра управления линией.
Разряды WLS1 и WLS0 определяют число информационных разрядов, которые рассматриваются как один символ (табл. 109). Данные от микропроцессора передаются побайтно, независимо от размерности. При длине слова, меньшей 8 разрядов, сохраняется только заданное число младших разрядов.
Табл. 109. Кодирование данных.
Разряд STB задает число стоповых бит, добавляемых к каждому кадру при передаче. При STB=0 добавляется один стоп-бит. При STB=1 добавляется два стоп-бита, если размерность информационного поля равна 6,7,8, либо 1.5 стоп-бита при 5-разрядной длине поля. Половина стопового бита означает, что линия связи удерживается в состоянии MARK в течение времени, составляющего 150% от времени действия одного элементарного сигнала. Следует заметить, что 8250 проверяет только первый стоповый бит при любой установке поля STB. Разряды SPS, EPS и PEN задают тип контроля четности (табл. 110).
Табл. 110. Кодирование типа четности.
Разряд BC используется для генерации выходного сигнала BREAK. При лог. 1 на последовательном выходе SOUT микросхемы 8250 принудительно устанавливается сигнал SPACE. Сигнал будет оставаться таким независимо от изменения других параметров передатчика до появления лог. 0 в поле BC. Разряд DLAB предназначен для доступа к регистрам делителя скорости передачи. Для обращения к регистрам TBR, RBR и IER разряд должен быть установлен в 0. При DLAB=1 регистры перестраиваются на обращение к регистрам делителя скорости. Регистр состояния линии LSR (Line Status Register) линии определяет протокол связи (табл. 111). В процессе обмена регистр обычно постоянно просматривается. При передаче данных регистр информирует, что предыдущий символ уже послан, позволяя записать новый символ поверх него. При приеме данных регистр информирует о поступлении следующего символа, чтобы программа могла прочитать его прежде, чем он будет перезаписан следующим прибывшим. Проверка значений разрядов требует маскирования. Кроме того, операция считывания приводит к сбросу значений некоторых полей, поэтому после анализа их необходимо самостоятельно восстанавливать.
Табл. 111. Формат регистра состояния линии.
Разряд DR (готовность данных, Data Ready) устанавливается в 1, когда поступающий символ принят и передан в буферный регистр приемника RBR. Считывание символа из RBR приведет к автоматическому сбросу DR в 0. Разряд OE (ошибка переполнения приемника, Overflow Error) устанавливается в 1 при возникновении ошибки переполнения (перезаписи). Ошибка возникает при записи в RBR символа, когда предыдущий еще не был считан. В этом случае непрочитанный символ безвозвратно теряется. Разряд устанавливается в 0 при считывании данных из LSR. Разряд PE (ошибка четности, Parity Error) указывает на ошибку четности. При получении очередного символа вычисляется бит четности в соответствии с параметрами, заданными в регистре LCR. При несовпадении расчетного значения с битом четности, полученным вместе с символом, разряд PE устанавливается в 1. Разряд сбрасывается в 0 только при считывании данных из LSR. Разряд FE (ошибка кадрирования, Frame Error) устанавливается в 1, если бит, следующий за последним разрядом данных или битом четности, не является стоповым (не имеет значение MARK). Тем не менее, принятый символ передается в RBR. Разряд сбрасывается в 0 только при считывании данных из LSR. Разряд BI (прерывание по сигналу BREAK) устанавливается в 1 каждый раз, когда на последовательном входе SIN присутствует сигнал BREAK. Сигнал соответствует BREAK, когда он удерживается в состоянии SPACE в течение промежутка времени, превышающего длительность одного кадра. Для снятия сигнала BREAK вход SIN должен оставаться в состоянии MARK в течение промежутка времени, не меньше половины длительности одного элементарного сигнала. Даже при снятии сигнала BREAK флаг BI остается установленным, и сбросить его можно только при прочтении данных из LSR. Разряд THRE (готовность регистра хранения передатчика) устанавливается в 1, при передаче символа из регистра хранения передатчика THR в сдвиговый регистр передатчика TSR. Флаг сообщает, что THR пуст и готов принять очередной символ. Ошибка переполнения передатчика может возникнуть при записи символа в THR, когда флаг THR сброшен в 0. Следует заметить, что флаг THRE не отражает состояние готовности сдвигового регистра TSR. Разряд TSRE (готовность сдвигового регистра) устанавливается в 1, когда символ, находящийся в сдвиговом регистре передатчика TSR передан, а новый символ еще не готов для передачи. При передаче очередного символа из THR в TSR флаг сбрасывается в ноль. Запись в разряд не приводит к его изменению. Таким образом, последовательная передача может считаться завершенной, когда оба флага THRE и TSRE будут установлены в 0. Регистр разрешения прерывания IER (Interrupt Enable Register). Скорость передачи данных по последовательному интерфейсу невелика, поэтому имеет смысл выполнять его в фоновом режиме, используя прерывания по окончании передачи или приема символа. Регистр IER (табл. 112) запрещает или разрешает по отдельности четыре типа прерываний, которые может генерировать адаптер (выход INTR). Запись 1 в разряды 0-3 разрешает соответствующий тип прерывания. Разрешенное прерывание сообщается в регистр идентификации прерывания IIR и активизирует выход INTR. Разряд ERDAI разрешает прерывание по готовности принимаемых данных. Прерывание возникает при передаче принятого символа из сдвигающего регистра приемника RSR в буферный регистр RBR.
Табл. 112. Формат регистра разрешения прерывания.
Разряд ETHREI разрешает прерывание по готовности регистра хранения передатчика THR. Прерывание возникает при передаче символа их регистра THR в сдвигающий регистр TSR. Разряд ERLSI разрешает прерывание по изменению регистра состояния линии LSR. Прерывание возникает при установке флагов (одного или всех сразу) OE, PE, FE или BI в 1. Последующий анализ регистра LSR позволит определить причину прерывания. Разряд EMSI разрешает прерывание по состоянию модема. Прерывание возникает при установке одного или всех сразу флагов DCTS, DDSR, TERI или DDCD регистра состояния модема MSR в 1. Последующий анализ регистра MSR позволит определить причину прерывания. Когда происходит одно из перечисленных событий, в контроллере прерываний инициируется аппаратное прерывание IRQ3 для порта СОМ2 и IRQ4 для порта COM2. Процедура обработки прерываний передает управление подпрограмме, на которую указывает соответствующий вектор прерывания. Поскольку прерывание аппаратное, оно может быть маскировано. Одновременно возможно любое число типов прерывания. При одновременном поступлении двух или более прерываний, они обрабатываются в соответствии с их приоритетом (табл. 113). Если разрешен более чем один тип прерывания, процедура обработки должна сама определять тип с помощью регистра идентификации.
Табл. 113. Приоритеты прерываний.
Регистр идентификации прерывания IIR (Interrupt Identification Register) хранит информацию о прерывании с наивысшим приоритетом (табл. 114). Разряд INP сообщает об отложенных прерываниях. Если таковых нет, флаг равен 1. При наличии нескольких прерываний, требующих обработки, флаг равен 0 и флаги IID0 и IID1 кодируют прерывание с наивысшим приоритетом. Разряды IID0 и IID1 идентифицируют прерывание.
Табл. 114. Формат регистра идентификации прерывания.
Типы прерываний, их приоритеты и действия для сброса прерывания перечислены в табл. 115. Таким образом, при одновременном появлении нескольких прерываний бит 0 регистра IIR будет установлен в 0. Если такая ситуация имеет место, перед завершением обработки прерывания следует снова прочитать регистр IIR и обработать следующее прерывание. Так следует поступать до тех пор, пока бит 0 регистра IIR не станет равным 1.
Табл. 115. Кодирование типов прерываний.
Регистры делителя скорости передачи. Микросхема 8250 использует программируемый генератор скорости передачи, который использует 16-разрядный делитель частоты внешнего опорного сигнала. Типичной тактовой частотой внешнего опорного сигнала является 1.8432 МГц. Формула вычисления делителя скорости передачи данных имеет вид:
, где – частота внешнего опорного сигнала в герцах.
Делитель скорости записывается в два байта. Формат регистров делителей приведен в табл. 116 и 117. Для передачи делителя в регистры флаг DLAB регистра управления линией LCR должен быть установлен в 1, в противном случае по этим двум адресам значения будут адресованы в регистры THR и IER. Регистры скорости обмена всегда следует устанавливать первыми, т.к. они единственные, которые требуют установки бита DLAB регистре контроля линии LCR. После этого необходимо сбросить бит DLAB в 0.
Табл. 116. Младший значащий разряд делителя.
Табл. 117. Старший значащий разряд делителя.
Старший байт делителя передается по адресу 3F9H (или 2F9H), младший – по адресу 3F8H (или 2F8H). Зависимость скорости передачи данных от некоторых значений делителя частоты представлена в табл. 118. Первый столбец делителя содержит старший значащий байт MSB, второй – младший значащий байт LSB.
Табл. 118. Скорость передачи данных.
Регистр сверхоперативной памяти SCR (Scratch Register) является 8-разрядным и служит для временного хранения данных. Его содержимое не влияет на работу адаптера. Формат хранения данных регистра приведен в табл. 119. При использовании регистра в прикладных программах следует помнить, что его услугами могут пользоваться и другие программы, поэтому всегда необходимо сохранять в стеке его содержимое, а затем вновь восстанавливать.
Табл. 119. Формат регистра сверхоперативной памяти.
Регистр состояния модема MSR (Modem Status Register) позволяет узнать текущие значения сигналов состояния модема и фиксировать их изменения с момента последнего считывания данных из MSR (табл. 120). При считывании разряды регистра сбрасываются в ноль и их необходимо вручную восстанавливать.
Табл. 120. Формат регистра состояния модема.
Разряд DCTS (сброс передатчика) позволяет отследить изменение входного сигнала CTS. Любое изменение приводит к установке разряда в 1. Разряд DDSR (готовность модема) отслеживает уровень сигнала на входе DSR, что приводит к установке в 1. Разряд TERI (задний фронт сигнала или «указатель вызовов») отслеживает изменение сигнала на входе RI, что приводит к установке в 1. Разряд DDCD («указатель несущей» или «указатель сигнала на линии приема») отслеживает любое изменение сигнала на входе DCD и устанавливает 1. Разряд CTS («сброс передатчика») указывает текущее значение сигнала на входе CTS. Разряд DSR («готовность модема») указывает текущее значение сигнала на входе DSR. Разряд RI («указатель вызовов») указывает текущее значение сигнала на входе RI. Разряд DCD («указатель несущей») указывает текущее значение сигнала на входе DCD.
Регистр управления модемом MCR (Modem Control Register) выдает управляющие сигналы устройству сопряжения, например, модему (табл. 121).
Табл. 121. Формат регистра управления модемом.
Разряд DTR (готовность терминала, Data Terminal Ready) определяет сигнал на выходе DTR микросхемы 8250. При DTR = 0 на выходе устанавливается 1 и наоборот. Разряд RTS (запрос передатчика, Request Terminal Station) определяет сигнал на выходе RTS микросхемы 8250. При RTS = 0 на выходе устанавливается 1 и наоборот. Разряды OUT1 и OUT2 являются выходами общего назначения. При 0 на выходе устанавливается 1 и наоборот. Разряд LOOP (петлевая конфигурация) обеспечивает выполнение процедуры самопроверки. При установлении 1 происходит следующее (табл. 122): - последовательный вход SIN отсоединяется от внешнего соединения и внутренне подключается к последовательному выходу SOUT; - выход сдвигового регистра передатчика подключается к входу сдвигового регистра приемника; - старшие 4 разряда регистра состояния отключается от внешних соединений и внутренне связывается с младшими 4 разрядами регистра управления.
Табл. 122. Схема петлевого подключения.
В результате, любые отправляемые данные будут сразу приниматься. Сравнивая полученные данные с отправленными, можно проверить функциональные узлы адаптера. В этом режиме можно также провести проверку системы прерываний. Для этого необходимо записать 1 в любой из значимых разрядов регистра разрешения прерывания IER.
Дата добавления: 2014-11-16; Просмотров: 630; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |