Чтение текущего содержимого CE.

Инициализация ПИТ.

1. Запись управляющих слов в регистр управляющего байта (CBR).

2. Запись константы пересчета во входные регистры счетчиков.

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

Порядок загрузки строго определен. Управляющие слова должны загружаться первым делом, а затем загружается константа пересчета. Возможны два варианта программирования.

1 вариант:

1. Загрузка управляющих слов в CBR в любой последовательности (всех каналов);

2. Загрузка констант пересчета во входные регистры счетчиков.

2 вариант:

1. Загрузка в CBR выбранного канала;

2. Загрузка константы пересчета в тот же канал.

Сразу после инициализации канала таймер начинает выполнение своих функций.

Существует 4 варианта чтения текущего содержимого CE.

1. Чтение выходного регистра счетчика.

(Не считается корректным, так как при таком чтении считывается либо младший байт счетчика, либо старший, либо оба последовательно, то есть считывание происходит в разное время и данные могут быть рассогласованы.)

2. Приостановка работы канала.

Устанавливаем GATE=0.

3. Чтение по команде “защелка” .

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

SC 0 0 X X X X
Канал CLO защелка        

После выполнения команды операция чтения выполняется, как и в первом случае. Команда “защелка” защелкивает выходной регистр счетчика. Выходной регистр счетчика остается в таком состоянии в таком состоянии до тех пор, пока его не прочитают или не перепрограммируют. Информация из OL может быть считана в любое время. После чтения выходной регистр счетчика “расщелкивается”, то есть возвращается в состояние сопровождения счетного элемента. Если после “защелки” чтение не выполнено, то следующая “защелка” будет недоступна.

4. Чтение состояния таймера. (Только Intel 8254)

Позволяет прочитать содержимое выходного регистра счетчика и выходного регистра состояния для одного или нескольких каналов. Можем прочитать и содержимое выходного регистра состояния.

Команда: RBC. При выполнении команды чтения состояния, содержимое внутреннего регистра состояния SR заносится в выходной регистр состояния SL, а значение счетного элемента защелкивается в выходном регистре счетчика OL. Команда чтения может быть выполнена для нескольких каналов одновременно.

Формат команды чтения состояния таймера RBC:

1 1 CNT2 CNT1 CNT0
RBC

Биты:

- 1/0 – не защелкивать/защелкивать выходной регистр счетчика.

- 1/0 – не защелкивать/защелкивать выходной регистр состояния.

CNTi – номер канала, для которого выполняется операция. CNTi = 1/0 – выполнять/не выполнять операцию.

Пример: CEh-все выходные регистры счетчика будут защелкнуты (11001110).

 

Выходные регистры каналов остаются в таком состоянии до тех пор, пока они не будут считаны или пока соответствующий канал не будет перепрограммирован.

Считывание выполняется из адреса регистра канала. Сначала считывается значение из выходного регистра состояния (если было запрошено чтение состояния), а затем из выходного регистра счетчика (если было запрошено защелкивание этого регистра).

Формат байта состояния канала (только Intel 8254):

OUT Count RW MODE BCD

Биты:

OUT – определяет состояние выхода канала таймера: 1/0 – высокий/низкий уровень.

Count – описывает состояние счетчика: 0/1 – выходной регистр счетчика отражает текущее значение счетного элемента канала /неопределенное состояние (например, когда счет в канале не выполняется).

Остальные биты – аналогичны соответствующим битам, задаваемым в управляющем байте при инициализации канала.

7.5 Синхронизация операций реального времени. Системный таймер ЭВМ семейства IBM PC Intel 8254.

Рис. 7.3 Схема включения ПИТ Intel 8254 в ЭВМ семейства IBM PC.

Базовый адрес ПИТ в пространстве адресов ввода-вывода ЭВМ равен 40h. Адреса регистров каналов ПИТ принимают значения: 40h – канал 0 , 41h – канал 1, 42h – канал 2, 43hCBR.

На входы GATE каналов 0 и 1 подан разрешающий потенциал – разрешен счет: GATE0=1, GATE1=1. Сигнал GATE2 управляется битом 0 управляющего регистра 61h.

Входы CLK всех каналов подсоединены к выходу генератора импульсов .

Канал 0 таймера используется для отсчета текущего времени в системных часах времени суток, а также для синхронизации некоторых дисковых операций. При инициализации канала он программируется BIOS для работы в режиме 3 (или 2) с двухбайтовым начальным значением счетчика равным N=0, на выходе он вырабатывает импульсы с частотой . При таком режиме период таймера составляет Т0 ~55мс. Выход OUT нулевого канала посылает ЗП на IR0 программируемого контроллера прерываний и вырабатывает прерывание таймера (номер типа прерывания 8 – IntNo=8). Это прерывание вырабатывается всегда, если разрешены аппаратные прерывания (если IF=1).

BIOS выполняет следующие действия:

1. Увеличивает значение четырехбайтовой переменной на 1, расположенной по адресу [40h..60h]. Когда выполняется переход с 12 часов ночи, происходит обновление переменной и ее установка в адрес [40h..70h].

2. Уменьшает значение переменной на 1 по адресу [0000:440h]. Переменная содержит время, которое осталось до выключения мотора накопителя на гибких магнитных дисках.

3. Вызывает прерывание с номером типа IntNo=1Ch.

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

Канал 0 может программироваться на более конкретные интервалы времени.

Канал 1 используется для регенерации памяти. BIOS программирует его в режиме 2 с однобайтным значением счетчика (только младший байт), начальное значение N = 18. Такой счетчик обеспечивает интервал чуть больший: T1=18/1.193182~15мкс.

Не рекомендуется перепрограммировать канал, так как может нарушиться цикл регенерации памяти. Можно его использовать для отсчета коротких интервалов времени. Бит 4 управляющего регистра 61h изменяется каждые 15 мс.

Канал 2 таймера используется для генерации звука – соединен с динамиком. Программируется в режиме 3. Сигнал GATE управляется битом 0 управляющего регистра 61h. Выход OUT2 соединен с динамиком. Соединение/разъединение с динамиком управляется битом 1 порта 61h. Канал 2 может использоваться для целей отсчета времени в автоматизированной системе. Его можно программировать в любом режиме. Для контроля выхода OUT можно проверять бит 5 управляющего регистра 61h .

7.6 Реализация методики программирования таймера в среде Borland Pascal.

1. Инициализация 2 канала таймера для генерации импульсов с частотой F2~100 Гц в режиме 3 (генератор меандра):

N2:= 1193182 div 100; - вычисление константы пересчета (должна быть объявлена как тип byte).

Port [$61]:= Port [$61] and not 3;Сброс в 0 сигнала на входе GATE2, выход OUT2 отключаем от динамика через управляющий регистр с адресом 61h.

Port [$43] := $B6; {10 11 011 0} - Установка режима работы 2 канала.

Port [$42] := Lo(N2); - Запись младшего байта константы пересчета.

Port [$42] := Hi(N2); - Запись старшего байта константы пересчета.

Port [$61] := Port [$61] or 1; - Установка разрешающего потенциала на входе GATE2=1: канал начинает генерацию импульсов типа меандр на выходе OUT2.

2. Чтение содержимого счетного элемента CE (2 канал):

1) Чтение без остановки счета.

Считываются последовательно младший, затем старший байты счетного элемента в переменную Count:

Count2:= Port [$42]; - Запись младшего байта выходного регистра счетчика.

Count2:= (Port [$42] shl 8) + Count2- Запись старшего байта выходного регистра счетчика, сдвиг на 8 разрядов байта.

2) Чтение с приостановкой работы канала.

Port [$61] := Port [$61] and not 1; - Сброс в 0 сигнала GATE 2-го канала.

Чтение младшего, затем старшего байтов регистра счетчика (см. п. 1). Разрешение работы канала – установка на входе GATE второго канала разрешающего потенциала:

Port [$61] := Port [$61] or 1;

3) Чтение по команде "Защелка".

Port [$43] := $80; - Защелкивание содержимого 2 канала ПИТ.

Чтение младшего, затем старшего байтов регистра счетчика (см. п. 1).

4) Чтение состояния 2 канала таймера:

Запись в регистр управляющего байта кода команды – защелкнуть содержимое статусного регистра в выходном регистре состояния и содержимое счетного элемента в выходном регистре счетчика 2 канала:

Port [$43]:= $C8;

Status2 := Port [$42]; - Чтение содержимое выходного регистра состояния 2 канала.

Чтение младшего, затем старшего байт регистра счетчика в переменную Count (см. п. 1).

3. Чтение статусного регистра:

Port[$43]:=$EE; {11 1 0 1 1 1 0}.

Status0:=port[$40];

Status1:=port[$41];

Status2:=port[$42];

4. Чтение счетного элемента и статусного регистра 2 канала:

Port[$43]:=$C8; {11 0 0 1 0 0 0}.

Status:=port[$42];

CE2:=port[$42] + (port[$42] shl 8); {Чтение младшего байта и старшего байта}

5. Определение начала очередного периода 2 канала таймера:

Procedure waitTimerPC

Begin while (port[$61] and $20)<>0 do;

While ((port[$61] and $20)=0 do;

7.7 ПИТ Intel 8253 на интерфейсной плате L-154.

Рис. 7.4 Схема включения ПИТ Intel 8253 на интерфейсной плате L-154.

На управляющие входы всех каналов GATE подан разрешающий потенциал GATE0=GATE1=GATE2=1. На вход CLK 0-го канала подсоединен генератор FCLK0=1 МГц. Выход OUT 0-го канала соединен с входом CLK 1-го канала, что позволяет работать с временными интервалами: TOUT=4 мкс÷65536 мкс. Выход OUT 1-го канала соединен с IRi ПКП через схему формирования ЗП.

У схемы Intel 8253 нет выходного регистра состояния; выходы OUT всех каналов подсоединены к регистру состояния. Можем прочитать из адреса 302h состояния входа:

OUT2 OUT1 OUT0

308h – канал 0, 309h – канал 1, 30Ah – канал 2, 30BhCBR.

Пример: режимы 0,1 каналов 3(меандр).

TOUT0=100 мкс, TOUT1=5000 мкс = 5 мс.

TOUT0=N0*TCLK; N0=100;

TOUT1=N1*TCLK1= TOUT0*N1; N1=50;

 

Program PIT_imt;

Const N0=100; N1=50;

Begin

Port [$30B]:=$16; {00 01 011 0 – 00: 0-й канал, 01: RW – младший байт, 011: MODE – меандр, 0: BCD - двоичный формат счета}

Port [$30B]$56; {01 01 011 0 – 01: 1-й канал, 01: RW – младший байт, 011: MODE – меандр, 0: BCD - двоичный формат счета}

{Запись констант пересчета:}

Port [$308]:=N0; Port [$309]:=N1;

End.

7.8 Многоканальное измерение сигналов.

Временные диаграммы будут иметь следующий вид:

(Считывается информация не с одного канала, а с нескольких)

Выборке из каждого канала присваивается индекс. Время считывания данных в канале будет одним и тем же. TСК(N-1) – время изменения в одном канале.

Реальное время всех выборок для каждого следующего канала сдвинуто на интервал TКАН по сравнению с выборками предыдущего канала.

1. Реализация обмена по готовности.

При такой реализации канал 0 можно использовать для установки канального интерфейса, а канал 1 для установки ТСК: TOUT0 использовать для установки канального интервала, TOUT1 для установки TСК.

2. Многоканальное измерение с прерыванием.

Момент начала каждого ТСК определяется ЗП канала 1. TOUT0 используется для установки канального интервала, TOUT1 для установки TСК.