Все компьютеры IBM содержат 3-х канальное 16-ти разрядное устройство, называемое системным таймером. Таймер реализуется на микросхеме Intel 8253 (для IBM PC и IBM XT) или 8254 (для IBM AT и IBM PS/ 2). Структурная схема системного таймера представлена на рис. 5.1.
Таймеры 8253 и 8254 состоят из трех независимых каналов. Каждый канал содержит регистры:
-состояния канала RS (8 разрядов);
-управляющего слова PSW (6 разрядов);
-буферный регистр OL (16 разрядов);
-регистр счетчика CE (16 разрядов);
-регистр констант пересчета CR (16 разрядов).
Каналы таймера подключаются к внешним устройствам при помощи трех линий:
GATE - управляющий вход;
CLOCK - вход тактовой частоты;
OUT - выход таймера.
Регистр счетчика CE работает в режиме вычитания. Его содержимое уменьшается по заднему фронту сигнала CLOCK при условии, что на входе GATE установлен уровень логической 1. В зависимости от режима работы таймера при достижении счетчиком CE нуля тем или иным способом меняется выходной сигнал OUT. Буферный регистр OL предназначен для запоминания текущего содержимого регистра счетчика CE без остановки процесса счета. После запоминания буферный регистр доступен программе для чтения. Регистр констант пересчета CR предназначен для хранения констант пересчета и может загружаться в регистр счетчика, если это требуется в текущем режиме работы таймера. Содержимое регистра CR изменяется только при перезагрузке счетчика или при перепрограммировании режима (записи управляющего слова). При перепрограммировании содержимое CR устанавливается в нуль. Регистр состояния канала RS хранит текущее состояние канала и может быть прочитан для выбранного канала командой "обратное чтение".Регистр управляющего слова PSW хранит управляющую информацию канала и задает его режим работы до следующего перепрограммирования. Системный генератор импульсов (СГИ) независимо от типа и производительности компьютера IBM вырабатывает импульсы одной и той же частоты - 1 193180 Гц.
В компьютерах IBM PC/XT/AT/PS2 задействованы все три канала таймера.
Канал 0 используется в системных часах времени суток. Этот канал работает в режиме 3 (описание режимов см. в п.5.2.) и используется как генератор импульсов с частотой примерно 18,2 Гц. Канал 1 используется для регенерации содержимого динамической памяти компьютера, поэтому его лучше не трогать. Выходная линия канала OUT связана с микросхемой прямого доступа к памяти (DMA), и ее импульс заставляет DMA регенерировать память. Канал использует режим 2 таймера. Канал 2 связан с громкоговорителем (динамиком) компьютера и может быть использован для генерации различных звуков или музыки либо как генератор случайных чисел. Канал использует режим 3 таймера.
Каждый канал таймера может работать в одном из шести режимов.
Режим 0 - прерывание терминального счета. После загрузки PSW сигнал OUT устанавливается в 0. Запись константы не влияет на OUT. Счет разрешается сигналом GATE=1 и запрещается GATE=0. При GATE=1 и фронту первого CLK константа счета N загружается из CR в CE, а по второму CLK начинается счет. OUT удерживается в нуле до конца счета, т.е. на время (N+1)*T сек. после чего возвращается в 1. Изменение GATE не влияет на OUT, но при GATE=0 счет приостанавливается, а при GATE=1 возобновляется без перезагрузки CE. Загрузка нового управляющего слова при новой константе возобновляет цикл.
Режим 1 - программируемый ждущий мультивибратор. На выходе OUT формируется сигнал низкого уровня длительностью T=Tclk*N (N - константа пересчета; Tclk - период синхроимпульсов). Счет начинается (OUT устанавливается в 0) по положительному фронту GATE, и OUT становится равен 1 по завершению счета. Данный режим является режимом с перезапуском, т.е. по каждому положительному фронту GATE содержимое CR передается в CE и перезапускает его, даже если предыдущий счет не завершен до конца. Загрузка во время счета новой константы не влияет на длительность текущего импульса до новой перезагрузки.
Режим 2 - импульсный генератор частоты. Канал выполняет функцию программируемого делителя входной частоты Fclk . Сразу после загрузки PSW выход OUT становится равным 1 и при удержании GATE=1 сигнал OUT держится в состоянии 1 в течении времени (N-1)*Tclk, после чего переходит в 0 и удерживается в этом состоянии на время Tclk. По окончании указанного цикла выполняется автозагрузка CE из CR и цикл повторяется. При подаче GATE=0 OUT устанавливается в 1, счет прекращается и возобновляется при GATE=1 с начального значения. При загрузке новой константы в CR во время счета текущий цикл не меняется, изменится длительность следующего цикла.
Режим 3 - генератор меандра. Режим аналогичен режиму 2, но на выходе формируются импульсы длительностью полупериода N/2*Tclk при четном N. При нечетном N положительный импульс (OUT=1) имеет длительность (N+1)/2*Tclk, а отрицательный импульс(OUT =0) имеет длительность (N-1)/2*Tclk. Генератор не работает,если N=3.
Режим 4 - программно формируемый строб. Сигнал OUT устанавливается равным 1 после загрузки PSW и удерживается до конца счета, после чего на выходе OUT устанавливается 0 на период Tclk и возвращается в 1, т.о. цикл работы имеет длительность (N+1)*Tclk сек. По действию сигнала GATE и режиму работы (однократное выполнение функции) он аналогичен режиму 0.
Режим 5 - аппаратно формируемый строб. По выходному сигналу режим аналогичен режиму 4 (OUT=1 после загрузки PSW до конца счета и OUT=0 в течении Tclk после окончания счета), а по действию GATE режиму 1, т.е. запуск счета выполняется по переднему фронту сигнала GATE.
Каждый канал таймера программируется отдельно и независимо от других. При программировании канала необходимо послать ему управляющее слово (старшие 2 разряда управляющего слова указывают номер канала, а остальные 6 разрядов защелкиваются в регистре PSW выбранного канала), после чего загружается регистр констант пересчета CR. Так как 16-ти разрядные регистры констант CR отображаются через 8-ми разрядные порты, то загрузка CR выполняется в соответствии с указаниями управляющего слова. Таймеру соответствуют 4 порта ввода/вывода со следующими адресами: 40h - канал 0; 41h - канал 1; 42h - канал 2; 43h - управляющее слово.