Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРВ_06_21_01_Время,таймеры.ppt
Скачиваний:
5
Добавлен:
20.06.2023
Размер:
747.52 Кб
Скачать

Интервальный таймер

Однократный запрос на прерывание

Периодические

Значение интервала,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

запросы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

режим работы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

От генератора

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Импульсов

 

 

 

 

 

(1.1931816 МГц)

 

 

 

 

 

Запрос на

Счетчик

 

 

 

РП

 

 

 

 

 

 

 

 

прерывание

 

 

 

 

 

 

 

 

 

 

 

 

Запрос

 

Регистр-защелка

 

 

 

 

 

 

 

 

текущего значения

 

 

 

 

 

6. Время и таймеры v.01

11

 

Интервальный таймер i8254

Периодические запросы на прерывание

Однократные запросы на Прерывание

Генератор сигналов заданной длительности, скважности

Измерение временных интервалов между событиями

Счетчик событий, запрос на прерывание по заданному количеству событий

6. Время и таймеры v.01

12

 

Примеры использования

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

Предоставляется возможность написать функцию, которая будет вызываться с заданным периодом (например, 20 мс) (callback-функция)

void startTimer (<указатель на callback-функцию >, <интервал>)

startTimer(&Clock, 20) // функция Clock() будет вызываться

//каждые 20 мс

Возможность получения текущего значения счетчика времени long getTime(void)

6. Время и таймеры v.01

13

 

Приложение – ISR (Interrupt Service Routine)

 

 

 

«Циклический

Генератор

Приложение

Исполнитель»

 

 

 

 

1.1931816 МГц

Фактически является

flag1

 

Программой обработки

 

 

прерывания от таймера

 

 

 

 

Задача_1

Аппаратный

 

 

 

таймер,

Прерывание

flag1

 

делитель на 11931

 

flagn

 

 

 

Часы

 

 

flagn

 

 

 

Задача_n

 

 

 

 

Возврат

 

 

ti+1= ti+10мс

 

 

 

6. Время и таймеры v.01

 

 

14

 

 

 

 

Сallback функция

 

 

Генератор

Управляющая

Приложение

 

программа

 

 

1.1931816 МГц

сlock()

 

 

 

 

Аппаратный

 

StartTimer(сlock)

 

таймер,

 

 

делитель на 11931

 

 

 

 

 

T==t1

 

 

 

Задача_1

Работа с таймером

 

 

через функции:

 

T==tn

А)

void startTimer (<указатель на функцию >, <интервал>)

 

В)

long getTime(void)

 

Задача_n

 

clock()

 

 

 

6. Время и таймеры v.01

 

15

 

 

 

Сторожевой таймер (Watchdog Timer - WDT)

 

 

# define interval

20

 

 

main () {

 

clock

CPU

while(true){

 

 

restartWDT(interval);

 

 

 

 

measure();

 

restart

RAM

makeControlDecision();

WDT

output();

 

 

 

reset

 

sleep(10);

 

Flash

}

}

 

Цикл работы системы составляет 10 с

Перед началом каждого цикла WDT перезапускается на 20 с.

В случае зависания системы через 20 с WDT выдает аппаратный запрос на ее перезапуск

6. Время и таймеры v.01

16

 

Часы реального времени (Real-Time Clock)

Генератор

 

 

 

Делитель

 

 

 

частоты

 

 

 

 

 

 

 

 

 

Источник

питания

Счетчик

 

Счетчик

времени

 

даты

 

time_of_day

Внешний интерфейс

Управляется низкоуровневой процедурой (BIOS, OS)

Библиотечные процедуры ctime(&time_of_day).

String MMHHDDMMYYYY void loadRTC(String s) String getRTS()

15:34, 24 January, 2013 – 341524012003

6. Время и таймеры v.01

17