Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kurs_lektsy_TS_AiU.doc
Скачиваний:
70
Добавлен:
31.03.2015
Размер:
2.39 Mб
Скачать

7.5 Синхронизация операций реального времени. Системный таймер эвм семейства ibmpcIntel8254.

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

Базовый адрес ПИТ в пространстве адресов ввода-вывода ЭВМ равен 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 Реализация методики программирования таймера в среде BorlandPascal.

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

N2:= 1193182 div100; - вычисление константы пересчета (должна быть объявлена как тип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.

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

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

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

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

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

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

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

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

Port[$61] :=Port[$61]or1;

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

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

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

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

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

Port [$43]:= $C8;

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

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

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

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

Status0:=port[$40];

Status1:=port[$41];

Status2:=port[$42];

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

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

Status:=port[$42];

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

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

Procedure waitTimerPC

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]