Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

TSAiU_Lektsia_9

.pdf
Скачиваний:
1
Добавлен:
26.01.2024
Размер:
572.02 Кб
Скачать

Лекция № 9. Синхронизация операций реального времени

9.1. Методика программирования таймера

При программировании таймера могут выполняться следующие действия:

1.Инициализация одного или нескольких каналов.

2.Чтение текущего значения счетного элемента CE.

3.Чтение состояния таймера (Intel 8254).

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

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

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

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

1вариант:

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

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

2вариант:

1.Загрузка управляющего слова в CBR выбранного канала.

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

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

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

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

В процессе работы ПИТ внутренний счетный элемент CE любого канала отображается в выходной регистр счетчика OL.

Это означает, что содержимое выходного регистра счетчика идентично содержимому внутреннего счетного элемента.

1. Выходной регистр счетчика можно читать в любой момент времени (на лету).

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

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

корректным, т.к. значения младшего и старшего байта счетчика, считываются в разные моменты времени и могут быть рассогласованы между собой.

2.Приостановка работы канала с помощью сигнала GATE=0 и считывание значения выходного регистра счетчика OL.

1

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

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

7

 

6

5

 

4

3

2

1

0

 

 

 

 

 

 

 

 

 

 

 

SC

 

0

0

X

X

X

X

 

 

 

 

 

 

 

Канал

Код команды

защелка CLO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

Данная команда позволяет прочитать следующие параметры любого канала или нескольких каналов:

текущее значение выходного регистра состояния SR,

текущее значение счетного элемента CE (4 вариант чтения счетного элемента).

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

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

7

6

 

5

 

4

 

3

2

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

 

 

 

 

 

 

CNT2

CNT1

CNT0

0

 

Count

 

Status

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Код команды RBC Биты:

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

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

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

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

2

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

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

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

Биты:

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

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

3

9.2 Программируемый интервальный таймер в ЭВМ семейства IBM PC

 

 

 

 

"1'

 

 

 

 

 

40h

 

 

 

 

 

 

 

 

 

 

GATE0

 

 

 

 

 

 

 

 

 

Генератор

 

 

 

 

 

 

 

 

 

 

CNT0

 

OUT0

1.193182 Мгц

 

 

 

CLK0

 

 

 

CLK0

 

 

 

 

 

 

 

 

 

 

GATE1

 

41h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CNT1

 

OUT1

 

 

 

 

 

 

 

CLK1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

GATE2

 

42h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CNT2

 

OUT2

 

 

 

 

 

 

 

CLK2

 

 

 

 

 

 

 

 

 

 

61h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

6

 

5

 

4

 

3

2

 

1

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

Входы CLK всех каналов подсоединены к выходу генератора импульсов fCLK 1,193182 МГц . Канал 0 таймера используется для отсчета текущего времени в системных часах времени

суток, а также для синхронизации некоторых дисковых операций. При инициализации канала он программируется BIOS для работы в режиме 3 (или 2) с двухбайтовым начальным значением счетчика равным N=0, на выходе он вырабатывает импульсы с частотой fOUT 1193182/ 65536 18,2 Ãö . При

таком режиме период таймера составляет Т0 ~55мс. Выход OUT нулевого канала соединен с входом IR0 программируемого контроллера прерываний и вырабатывает прерывание таймера (номер типа прерывания 8 – IntNo=8). Это прерывание вырабатывается всегда, если разрешены аппаратные прерывания (т.е. если IF=1).

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

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

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

оставшееся до выключения мотора накопителя на гибких магнитных дисках. Уменьшает на 1 содержимое байта счетчика ожидания времени выключения мотора НГМД (адрес 40h:40h). Если после последнего обращения к НГМД прошло более 2 секунд, обработчик прерывания выключает двигатель.

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

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

4

Возможно использование 0 канала для управления компонентами АС с интервалом кратным 55 мс (равным или большим).

Канал 1 используется как генератор для схемы регенерации памяти.

BIOS программирует его в режиме 2 (генератор импульсов) с однобайтным счетчиком (мл. байт), начальное значение N1 = 18.

Такой счетчик обеспечивает интервал чуть больший

TOUT1 = N1 / FCLK; TOUT1=18/1.193182~15мкс;

Не рекомендуется перепрограммировать канал 1, т.к. это нарушит цикл регенерации памяти и приведет к разрушению ее содержимого.

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

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

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

N2:= 1193182 div 100; {вычисление константы пересчета}

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).

Port [$61] := Port [$61] or 1; {Разрешение работы канала – установка на входе GATE второго канала разрешающего потенциала.}

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

Port [$43] := $80; { Защелкивание содержимого 2 канала ПИТ.} Чтение младшего, затем старшего байтов регистра счетчика (как в п. 1).

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

Port [$43]:= $C8; {Запись в регистр управляющего байта кода команды – защелкнуть содержимое статусного регистра в выходном регистре состояния и содержимое счетного элемента в выходном регистре счетчика 2 канала}

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

5

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

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

Port[$43]:=$EE; {11 1 0 1 1 1 0}.{Защелкнуть содержимое статусных регистров всех каналов} Status0:=port[$40]; {Чтение статусного регистра 0 канала.}

Status1:=port[$41]; {Чтение статусного регистра 1 канала.} Status2:=port[$42]; {Чтение статусного регистра 20 канала.}

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;

9.4Программируемый интервальный таймер Intel 8253

"1"

 

 

 

1Mhz

CLK0

308h

 

 

OUT0

 

 

 

 

 

 

 

 

GATE0

 

 

 

 

 

 

 

CNT0

 

 

 

 

 

 

 

 

 

 

 

 

 

CLK1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

309h

 

 

 

 

 

OUT1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

GATE1

 

 

 

 

CNT1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

30Ah

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

GATE2

 

 

 

 

 

 

 

OUT2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CNT2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CLK2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

На внешний разъем

7

 

 

6

 

 

5

 

4

3

 

2

 

1

 

0

 

 

Адрес 302h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

 

 

1

 

1

ADC

Cn2

Cn1

Cn0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

На вход

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IRi ПКП

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Адрес 30Fh

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ФРП

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Регистр управления прерываниями

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

На управляющие входы GATE всех каналов подан разрешающий потенциал GATE0=GATE1=GATE2=1. На вход CLK 0-го канала подсоединен генератор FCLK0=1 МГц. Выход OUT 0-го канала соединен с входом CLK 1-го канала, что позволяет работать с временными интервалами: от Тмин =4 мкс, до Тмакс=(65536 * 65536) Tclk;

Выход OUT 1-го канала соединен с IRi ПКП через схему формирования ЗП.

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

6

 

3

 

2

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OUT2

OUT1

OUT0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

308h – канал 0, 309h – канал 1, 30Ah – канал 2, 30Bh CBR (на рис. не показан)

ПРИМЕР программирования:

Канал 0 генерация импульсов типа меандр с интервалом Т0 = 100 мкс, F0=10 000Гц. Канал1 генерации импульсов типа меандр с интервалом Т1 = 5 000мкс, F1=200Гц.

Константы пересчета : ТOUT0 = ТCLK0 * N0, =100 мкс TOUT1=N1*TCLK1= TOUT0*N1; N0=100; 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.

9.5 Многоканальное измерение сигналов датчиков объекта автоматизации

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

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

T сканированния

T ск MIN

T канальное

Стрелками указаны интервалы времени выполнения измерений в отдельных каналах.

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

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

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

Втакой схеме канал 0 можно использовать для установки канального интервала T КАН= TOUT0, а канал 1 для установки периода сканирования ТСК=TOUT1.

При реализации многоканальных измерений по прерыванию, момент начала каждого цикла сканирования определяется запросом прерывания от «1» канала ПИТ.

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

7

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