Программирование модемов


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



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

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

  • UART 8250 не имеет регистра расширения.
  • 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.




Начало  Назад  Вперед



Книжный магазин