Модемы и факс-модемы. Программирование для MS-DOS и Windows

       

Как определить тип микросхемы UART


Как же определить, какая из этих микросхем UART установлена на вашем асинхронном адаптере? Кроме возможности заглянуть в документацию, существует еще один способ. Фактически этот способ основан на различиях в особенностях микросхем UART. Ниже приведены особенности микросхем UART различных типов:

         UART8250 не имеет регистра расширения

         UART 16450 не имеет внутренних буферов FIFO

         UART 16550 имеет внутренние буфера FIFO, но с ошибками. Бит D7 регистра управления прерываниями (регистр IIR) равен единице, а бит D6 - нулю

         UART 16550A не содержит ошибок при реализации FIFO. Биты D7 и D6 регистра управления прерываниями (регистр IIR) равны единице.

Согласно этим особенностям микросхем UART возможен следующий алгоритм определения их типа:

         Читаем и сохраняем значение регистра расширения. Адрес регистра расширения определяем как базовый адрес плюс семь (base_adr + 7)

         Записываем в регистр расширения какое-либо число, например, 0A5h

         Снова считываем значение регистра расширения и сравниваем его с числом 0A5h, записанным в него ранее. Если эти значения не равнозначны, значит регистр расширения отсутствует и, следовательно, тип проверяемой микросхемы UART - 8250

         Запоминаем в регистре расширения другое число, например, 5Ah

         Снова считываем значение регистра расширения и сравниваем его с ранее записанным числом. Если эти значения не одинаковы, значит регистр расширения отсутствует и, следовательно, тестируемая микросхема UART 8250

         Восстанавливаем величину, изначально хранившуюся в регистре расширения

         Считываем и сохраняем значение регистра управления прерываниями

         Записываем единицу в регистр управления режимом буферизации (регистр FCR, подробно описан ниже)

         Считываем значение регистра управления прерываниями. Если бит D7 сохраненного регистра управления прерываниями содержит нулевое значение, запоминаем единицу в регистре FCR

         Если бит D6 регистра управления прерываниями содержит единицу, тип микросхемы UART - 16550A

         Если бит D7 регистра управления прерываниями содержит единицу, тестируемая микросхема - UART 16550

         В противном случае мы имеем микросхему UART 16450.



Содержание раздела