Intel 8253

редактировать

Intel C8253 Программируемый интервальный таймер Intel 8253. Intel 8254 имеет такую ​​же распиновку.

Intel 8253 и 8254 - это программируемые интервальные таймеры (PIT), которые выполняют функции хронирования и подсчета с использованием трех 16-битных счетчиков.

Семейство 825x было в первую очередь разработано для процессоров Intel 8080 / 8085, но позже использовалось в x86-совместимых системах. Чипы 825x или эквивалентные схемы, встроенные в более крупный чип, встречаются во всех IBM PC-совместимых, и советских компьютерах, таких как Vector 06C.

В PC-совместимых, таймерный канал 0 назначен на IRQ -0 (аппаратное прерывание с наивысшим приоритетом). Канал таймера 1 назначен на обновление DRAM (по крайней мере, в ранних моделях до 80386). Канал таймера 2 назначен на динамик ПК.

Вариант Intel 82c54 (c для CMOS логики) обрабатывает тактовые сигналы до 10 МГц.

Содержание
  • 1 История
  • 2 Характеристики
  • 3 Режима работы
    • 3.1 Режим 0 (000): Прерывание по количеству клемм
    • 3.2 Режим 1 (001): программируемый однократный выстрел
    • 3.3 Режим 2 (X10): генератор частоты
    • 3.4 Режим 3 (X11): генератор прямоугольных импульсов
    • 3.5 Режим 4 (100): Программный строб
    • 3.6 Режим 5 (101): Аппаратный запуск строба
  • 4 Советы и подсказки по программированию IBM PC
  • 5 См. Также
  • 6 Ссылки
  • 7 Дополнительная литература
  • 8 Внешние ссылки
История

8253 описан в публикации Intel «Каталог данных компонентов» 1980 года. 8254, описанный как расширенный набор 8253 с более высокими тактовыми частотами, имеет "предварительные" данные в "Каталоге данных компонентов" Intel 1982 года.

8254 реализован в HMOS и имеет команду «Обратное считывание», недоступную на 8253, и позволяет чередовать чтение и запись одного и того же счетчика.

Совместимость с современными ПК либо при использовании системы на кристалле процессоры или дискретные наборы микросхем обычно реализуют полную совместимость с 8254 для обратной совместимости и взаимодействия. Команда Read Back является важной функцией ввода-вывода для взаимодействия с многоядерными процессорами и графическими процессорами.

Характеристики
Блок-схема Intel 8253

Таймер имеет три счетчика, пронумерованных от 0 до 2. Каждый канал может быть запрограммирован для работы в одном из шести режимов. После программирования каналы работают независимо.

Каждый счетчик имеет два входных контакта - «CLK» (clock вход) и «GATE» - и один контакт «OUT» для вывода данных.. Три счетчика являются 16-битными счетчиками с обратным отсчетом, независимыми друг от друга, и могут быть легко прочитаны CPU..

  • Буфер шины данных содержит логику для буферизации шины данных между микропроцессором и внутренними регистрами. Он имеет 8 входных контактов, обычно обозначенных как D7..D0, где D7 - это MSB..
  • Логика чтения / записи имеет 5 контактов, которые перечислены ниже. «X» означает, что X - активный низкий сигнал.
    • RD: сигнал чтения
    • WR: сигнал записи
    • CS: сигнал выбора микросхемы
    • A0, A1: адресные строки

Режим работы PIT изменяется установкой вышеуказанных аппаратных сигналов. Например, для записи в регистр управляющего слова необходимо установить CS = 0, RD = 1, WR = 0, A1 = A0 = 1.

  • Регистр управляющего слова содержит запрограммированную информацию, которая будет отправлена ​​(микропроцессором ) на устройство. Он определяет, как логически работает каждый канал PIT. Каждый доступ к этим портам занимает около 1 мкс.

Чтобы инициализировать счетчики, микропроцессор должен записать управляющее слово (CW) в этот регистр. Это можно сделать, установив правильные значения для контактов блока логики чтения / записи, а затем отправив управляющее слово в блок буфера данных / шины.

Регистр управляющего слова содержит 8 битов, помеченных как D7..D0 (D7 - это MSB ). Расшифровка несколько сложная. Большинство значений задают параметры для одного из трех счетчиков:

  • Два старших бита (если не 11) выбирают регистр счетчика, к которому применяется команда.
  • Следующие два бита (если не 00) выбирают формат, который будет использоваться для последующего доступа для чтения / записи к регистру счетчика. Обычно это режим, в котором доступ чередуется между наименее значимыми и наиболее значимыми байтами. Одно различие между 8253 и 8254 заключается в том, что у первого был один внутренний бит, который влиял как на чтение, так и на запись, поэтому, если формат был установлен на 2-байтовый, чтение lsbyte привело бы к тому, что следующая запись будет направлена ​​в msbyte. 8254 использовал отдельные биты для чтения и записи.
  • Следующие три бита выбирают режим, в котором будет работать счетчик.
  • Самый младший бит определяет, будет ли счетчик работать в двоичном или BCD. (Подсчет BCD почти никогда не используется и может быть неправильно реализован в эмуляторах или южных мостах.)

Однако есть две другие формы:

  • Фиксировать счетчик для данного таймера. При следующем чтении вместо значения счетчика в момент чтения будет возвращено значение счетчика в момент команды защелки. После завершения чтения последующие чтения вернут текущий счетчик. Когда используется команда фиксации, режим и статус BCD не изменяются.
  • (только 8254) Фиксация статуса и / или подсчета для нескольких таймеров. Это позволяет использовать несколько одновременных команд защелки с использованием растрового изображения. Кроме того, текущая конфигурация канала может быть считана в дополнение к счетчику.
8253/8254 управляющее слово
Бит № / ИмяКраткое описание
D7. SC1D6. SC2D5. RW1D4. RW0D3. M2D2. M1D1. M0D0. BCD
00форматрежимBCDУстановить режим счетчика 0
01форматрежимBCDУстановить режим счетчика 1
10форматрежимBCDУстановить режим счетчика 2 (порт 42h)
11countstatusC2C1C0xRead- команда возврата (только 8254)
счетчик00- x -Значение счетчика фиксации. При следующем чтении счетчика будет прочитан снимок значения.
счетчик01режимBCDЧтение / запись только младшего байта значения счетчика
режим счетчика10BCDЧтение / запись только старшего байта значения счетчика
режим счетчика11BCD2 × Чтение / 2x Запись младшего байта, затем старшего байта значения счетчика
counterформат000BCDРежим 0: прерывание по счетчику терминала
формат001BCDРежим 1: аппаратный перезапуск. Счетчик кадров
форматx10BCDРежим 2: Генератор скорости
счетчикформатx11BCDРежим 3 : Прямоугольный сигнал
счетчикформат100BCDРежим 4: запускаемый программный строб
счетчикформат101BCDРежим 5: запускаемый аппаратно строб (с возможностью повторного запуска)
счетчикформатрежим0Счетчик - это 16-битный двоичный счетчик (0–65535)
счетчикформатрежим1Счетчик представляет собой 4-значное двоично-десятичное счетчик (0–9999)
11счетстатусC2C1C0xКоманда обратного чтения (только 8254)
1100C2C1C0xПри следующем чтении выбранных счетчиков будет произведено обратное чтение состояние с фиксацией, затем счетчик
1101C2C1C0xСледующее считывание выбранных счетчиков будет считывать счетчик с фиксацией
1110C2C1C0xПри следующем чтении выбранных счетчиков будет считываться состояние обратной фиксации
1111C2C1C0xНичего не делать (ничего не фиксировать на одном или всех счетчиках)
11countstatus000xНичего не делать (количество защелок и / или состояние без счетчиков)
11countstatus1C1C0xКоманда обратного чтения применяется к счетчику 2
11countstatusC21C0xКоманда обратного чтения применяется к счетчику 1
11countstatusC2C11xКоманда обратного чтения применяется к счетчику 0

При установке PIT микропроцессор сначала отправляет управляющее сообщение, а затем сообщение счетчика в ПИТ. Процесс подсчета начнется после того, как PIT получит эти сообщения, и, в некоторых случаях, если он обнаружит нарастающий фронт входного сигнала GATE. Формат байта состояния. Бит 7 позволяет программному обеспечению отслеживать текущее состояние вывода OUT. Бит 6 указывает, когда счет может быть прочитан; когда этот бит равен 1, счетный элемент еще не загружен и не может быть считан процессором. Биты с 5 по 0 совпадают с последними битами, записанными в регистр управления.

Слово состояния 8254
Номер бита / ИмяКраткое описание
D7. Выход. СостояниеD6. ноль. количествоD5. RW1D4. RW0D3. M2D2. M1D1. M0D0. BCD
0Выходной контакт равен 0
1Выходной контакт равен 1
0Счетчик может быть прочитан
1Счетчик устанавливается
форматрежимBCDБиты режима счетчика, определенные для регистра управляющего слова
Режимы работы

Биты D3, D2 и D1 управляющего слова устанавливают режим работы таймера. Всего есть 6 режимов; для режимов 2 и 3 бит D3 игнорируется, поэтому отсутствующие режимы 6 и 7 являются псевдонимами для режимов 2 и 3.

Все режимы чувствительны к входу GATE, высокий уровень GATE вызывает нормальную работу, но эффекты низкого уровня GATE зависят от режима:

  • Режимы 0 и 4: подсчет приостанавливается, пока GATE низкий, и возобновляется, когда GATE высокий.
  • Режимы 1 и 5: начинается нарастание фронта GATE подсчет. GATE может перейти в низкий уровень, не влияя на счет, но другой нарастающий фронт перезапустит счет с начала.
  • Режимы 2 и 3: GATE низкий уровень немедленно выдает высокий уровень OUT (без ожидания тактового импульса) и сбрасывает счетчик ( на заднем фронте следующих часов). Когда GATE снова переходит в высокий уровень, счет начинается с начала.

Режим 0 (000): Прерывание по счетчику клемм

Режим 0 используется для генерации точной временной задержки под управлением программного обеспечения. В этом режиме счетчик начнет отсчет от загруженного в него начального значения COUNT, вплоть до 0. Скорость счета равна входной тактовой частоте.

На выводе OUT устанавливается низкий уровень после записи управляющего слова, и отсчет начинается через один такт после программирования COUNT. OUT остается на низком уровне, пока счетчик не достигнет 0, после чего OUT будет установлен на высоком уровне до тех пор, пока счетчик не будет перезагружен или не будет записано управляющее слово. Счетчик внутренне возвращается к 0xFFFFи продолжает считать, но вывод OUT больше никогда не меняется. Для нормального счета сигнал Gate должен оставаться активным на высоком уровне. Если Gate становится низким, счет приостанавливается и возобновляется, когда он снова становится высоким.

Первый байт нового счетчика при загрузке в счетный регистр останавливает предыдущий счет.

Режим 1 (001): программируемый однократный выстрел

В этом режиме 8253 может использоваться как моностабильный мультивибратор. Вход GATE используется как вход триггера.

OUT изначально будет высоким. OUT перейдет на низкий уровень тактового импульса после запуска однократного импульса и останется на низком уровне, пока счетчик не достигнет нуля. После этого OUT станет высоким и останется высоким до импульса CLK после следующего запуска.

После записи контрольного слова и начального счета счетчик активируется. Триггер приводит к загрузке счетчика и установке низкого уровня OUT для следующего импульса CLK, таким образом, запускается одноразовый импульс. Начальный счет N приведет к одноразовому импульсу длительностью N CLK циклов.

Одноразовый запуск можно перезапустить, поэтому OUT будет оставаться на низком уровне для N импульсов CLK после любого запуска. Одноразовый импульс можно повторить, не перезаписывая тот же счетчик в счетчике. GATE не влияет на OUT. Если новый счетчик записывается в счетчик во время однократного импульса, текущий однократный импульс не изменяется, если счетчик не запускается повторно. В этом случае в счетчик загружается новый счетчик, и импульс единичного импульса продолжается, пока не истечет новый счет.

Режим 2 (X10): генератор скорости

В этом режиме устройство действует как счетчик деления на n, который обычно используется для генерации прерывания часов реального времени.

Как и в других режимах, процесс подсчета запускает следующий тактовый цикл после отправки COUNT. OUT будет оставаться на высоком уровне до тех пор, пока счетчик не достигнет 1, и станет низким на один тактовый импульс. В следующем цикле счетчик перезагружается, OUT снова становится высоким, и весь процесс повторяется.

Время между высокими импульсами зависит от предварительно установленного счетчика в регистре счетчика и рассчитывается по следующей формуле:

Значение для загрузки в счетчик = finputfoutput {\ displaystyle f _ {\ rm {input}} \ over f _ {\ rm {output}}}{\ displaystyle f _ {\ rm {input}} \ over f _ {\ rm {output}}}

Обратите внимание, что значения в регистре COUNT варьируются от n {\ displaystyle n}nдо 1; регистр никогда не достигает нуля.

Режим 3 (X11): генератор прямоугольных импульсов

Этот режим аналогичен режиму 2. Однако длительность высоких и низких тактовых импульсов на выходе будет отличаться от режима 2.

Предположим, что n {\ displaystyle n}n- это число, загруженное в счетчик (сообщение COUNT), выход будет высоким для ⌈ n 2 ⌉ {\ displaystyle \ left \ lceil {n \ over 2} \ right \ rceil}{\ displaystyle \ left \ lceil {n \ over 2} \ right \ rceil} counts, а low для ⌊ n 2 ⌋ {\ displaystyle \ left \ lfloor {n \ over 2} \ right \ rfloor}{\ displaystyle \ left \ lfloor {n \ over 2} \ right \ rfloor} считает. Таким образом, период будет равен n {\ displaystyle n}ncounts, и если n {\ displaystyle n}nнечетный, дополнительный полупериод будет потрачен с ВЫСОКИМ ВЫСОКИМ.

Режим 4 (100): запускаемый программным способом строб

После загрузки управляющего слова и COUNT выходной сигнал будет оставаться высоким до тех пор, пока счетчик не достигнет нуля. Затем счетчик будет генерировать низкий импульс для 1 тактового цикла (строб) - после этого выход снова станет высоким.

GATE low приостанавливает счет, который возобновляется, когда GATE снова становится высоким.

Режим 5 (101): Строб с аппаратным запуском

Этот режим аналогичен режиму 4. Однако процесс подсчета запускается входом GATE.

После получения контрольного слова и COUNT на выходе будет установлен высокий уровень. Как только устройство обнаружит нарастающий фронт на входе GATE, оно начнет отсчет. Когда счетчик достигнет 0, на выходе будет низкий уровень на один такт - после этого он снова станет высоким, чтобы повторить цикл на следующем нарастающем фронте GATE.

Советы и подсказки по программированию IBM PC

8253 использовался в совместимых с IBM PC с момента их появления в 1981 году. В наше время этот PIT не включается в качестве отдельного чипа в ПК x86. Скорее, его функциональные возможности включены как часть южного моста набора микросхем материнской платы. В современном наборе микросхем это изменение может проявляться в виде заметно более быстрого доступа к регистрам PIT в пространстве x86 адреса ввода-вывода.

Все совместимые с ПК работают с PIT с тактовой частотой 105/88 = 1,19318 МГц, ⁄ 3 частотой NTSC цветовой синхронизации. Эта частота, разделенная на 2 (самый большой делитель, на который способен 8253), дает прерывание таймера ≈18,2 Гц, используемое в MS-DOS и связанных операционных системах.

В исходных компьютерах IBM PC счетчик 0 используется для генерации прерывания хронометража. Счетчик 1 (A1 = 0, A0 = 1) используется для запуска обновления памяти DRAM. Последний счетчик (A1 = 1, A0 = 0) используется для генерации тонов через динамик ПК.

Более новые материнские платы включают дополнительные счетчики через Advanced Configuration and Power Interface (ACPI), a счетчик на расширенном локальном программируемом контроллере прерываний (Local APIC ) и таймер событий высокой точности. Сам ЦП также обеспечивает функцию счетчика отметок времени (TSC).

На ПК адрес timer0 (чип) находится на порте 40h..43h, а второй timer1 (чип) находится на 50h..53h.

На компьютерах x86 BIOS многих видеокарт и системный BIOS перепрограммируют второй счетчик для собственного использования. Перепрограммирование обычно происходит во время изменений видеорежима, когда может быть запущена видео BIOS, и во время изменения режима управления системой и состояния энергосбережения, когда может быть запущена системная BIOS. Это предотвращает любые серьезные альтернативные варианты использования второго счетчика таймера во многих системах x86.

Таймер, который используется системой на ПК x86, - это канал 0, и его часы отсчитывают теоретическое значение 1193181,8181... Гц, то есть одну треть от NTSC цвет частота поднесущей, которая получается из деления системных часов (14,31818 МГц) на 12. Это пережиток самых первых ПК CGA - они получили все необходимые частоты от единственного кварцевого кристалла , и чтобы сделать ТВ-вывод возможным, этот генератор должен был работать на частоте, кратной частоте цветовой поднесущей NTSC.

Как указано выше, канал 0 реализован как счетчик. Как правило, начальное значение счетчика устанавливается путем отправки байтов в Control, затем регистры порта ввода-вывода данных (значение 36h отправляется на порт 43h, затем младший байт на порт 40h и снова порт 40h для старшего байта). Счетчик ведет обратный отсчет до нуля, затем отправляет аппаратное прерывание (IRQ 0, INT 8) на CPU. Затем счетчик сбрасывается до исходного значения и снова начинает обратный отсчет. Максимально возможная частота прерывания составляет чуть более половины мегагерца. Наименьшая возможная частота, которая также обычно используется компьютерами под управлением MS-DOS или совместимых операционных систем, составляет около 18,2 Гц. В этих операционных системах реального режима BIOS накапливает количество вызовов INT 8, которые он получает по адресу 0040: 006c реального режима, который может быть прочитан программой.

По мере обратного отсчета таймера его значение также можно прочитать напрямую, дважды прочитав его порт ввода-вывода, сначала для младшего байта, а затем для старшего байта. Однако в автономных счетных приложениях, таких как ПК x86, необходимо сначала записать команду latch для желаемого канала в регистр управления, чтобы оба считанных байта принадлежали одному, а такое же значение.

Согласно документу Microsoft 2002 года, «поскольку для чтения и записи на это оборудование [8254] требуется связь через порт ввода-вывода, программирование занимает несколько циклов, что непомерно дорого для ОС. Из-за этого, на практике апериодические функции не используются. "

См. также
  • LAPIC предоставляет программируемый таймер
  • HPET
Ссылки
Дополнительная литература
Внешние ссылки
Последняя правка сделана 2021-05-24 03:56:38
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте