Что такое ворота в системном таймере
Перейти к содержимому

Что такое ворота в системном таймере

  • автор:

17. Сторожевой таймер (wdt)

Сторожевой таймер (Watchdog Timer) предназначен для предотвращения блокировки системы при сбоях и зацикливаниях программного обеспечения, т.е. так называемых «зависаниях программы». Особенностью сторожевого таймера является 12-битный счетчик с обратным счетом, что позволяет устанавливать период срабатывания сторожевого таймера до 16 секунд (при частоте низкочастотного тактового генератора, равной 32768 Гц). Сторожевой таймер может быть настроен для формирования общего сигнала сброса или сброса только ядра процессора. Кроме того, существует такая возможность, как включение автоматического запрета работы сторожевого таймера при переходе процессора в режиме отладки или перехода системы в холостой режим.

17.2 Структурная схема

Рисунок 17-1. Структурная схема сторожевого таймера

17.3 Функциональное описание

Сторожевой таймер (Watchdog Timer) предназначен для предотвращения блокировки системы при сбоях и зацикливаниях программного обеспечения, т.е. так называемых зависаниях программы. Питание таймера осуществляется от напряжения VDDCORE. Сброс процессора также вызывает сброс сторожевого таймера.

Основу сторожевого таймера составляет 12-битный счетчик, начальное содержимое которого загружается из поля WV регистра режима WDT_MR. Для тактирования счетчика используется сигнал низкочастотного тактового генератора (Slow Clock), деленный на 128, что позволяет задавать период срабатывания сторожевого таймера до 16 секунд (при типовой частоте Slow Clock, равной 32768 Гц).

Сразу после окончания сброса в поле WV регистра WDT_MR храниться значение 0xFFF, что соответствует максимальному периоду срабатывания сторожевого таймера и при этом от него разрешено формирование внешнего сброса (установлен флаг WDRSTEN). Это означает, что сразу после сброса сторожевой таймер включен: например, после включения питания. Программно возможен либо запрет работы сторожевого таймера (установка флага WDDIS в регистре WDT_MR), либо перенастройка периода его срабатывания в соответствии с требованиями программного обеспечения.

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

В штатном режиме работы программного обеспечения должен производиться сброс сторожевого таймера (установка флага WDRSTT в регистре управления WDT_CR) периодически примерно через примерно равные интервалы времени для предотвращения его срабатывания. При этом сразу же произойдет перезагрузка содержимого счетчика сторожевого таймера новым значением из регистра WDT_MR и его перезапуск (также сбрасывается предделитель 1:128 низкочастотного генератора). Регистр WDT_CR защищен от записи без установки соответствующего защитного ключа. Если установлен флаг WDRSTEN в регистре режима WDT_MR, то при срабатывании сторожевого таймера (исчерпание его 12-битного счетчика) будет сформирован сигнал wdt_fault, поступающий на контроллер сброса. Помимо этого будет также установлен флаг WDUNF в регистре статуса WDT_SR.

Для исключения зацикливания программы (зависания) в том месте, в котором производится сброс сторожевого таймера, в нем реализованы так называемые временные ворота: при попытке сброса сторожевого таймер вне этих временных ворот произойдет сброс процессора. Настройка временных ворот производится помощью поля WDD регистра режима WDT_MR. Сброс сторожевого таймера разрешен только при текущем содержимом его счетчика, лежащем в диапазоне от 0 до WDD (включительно). При установке флага WDRSTT происходит сброс сторожевого таймера.

Попытка сброса сторожевого таймера при содержимом его счетчика в диапазоне WDV…WDD вызывает установку соответствующего флага ошибки (WDERR) даже, если работа сторожевого таймера запрещена. В результате чего на контроллер сброса поступает сигнал wdt_fault.

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

Флаги статуса WDUNF (переполнение сторожевого таймера) и WDERR (ошибка сторожевого таймера) вызывают прерывание, если установлен флаг WDFIEN в регистре WDT_MR (разрешение прерываний от сторожевого таймера). Если установлен флаг WDRSTEN и контроллер сброса настроен на возможность сброса от сторожевого таймера, то при формировании сигнала wdt_fault возникнет сброс процессора и самого сторожевого таймера. В этом случае сразу после сброса происходит снятие флагов WDERR и WDUNF. Если возник сигнал сброса, или было выполнено чтение регистра статуса WDT_SR, то сразу производится очистка флагов состояния сторожевого таймера, флага прерывания и снятие сигнала wdt_fault.

Запись в регистр WDT_MR вызывает перезагрузку и перезапуск 12-битного декрементного счетчика сторожевого таймера.

В зависимости от состояния флагов WDIDLEHLT и WDDBGHLT в регистре WDT_MR работа сторожевого таймера может быть приостановлена, пока процессор находится соответственно в холостом режиме или в режиме отладки.

Рисунок 17-2. Механизм работы сторожевого таймера

5 Системный таймер

Кроме часов реального времени, любой компьютер (даже простейший IBM PC) содержит устройство, называемое системным таймером. Это устройство подключено к линии запроса на прерывание IRQ0 и вырабатывает прерывание INT 8h приблизительно 18,2 раза в секунду (точное значение — 1193180/65536 раз в секунду).

Обработка прерываний таймера

При инициализации BIOS устанавливает свой обработчик для прерывания таймера. Этот обработчик каждый раз увеличивает на единицу текущее значение 4-байтовой переменной, располагающейся в области данных BIOS по адресу 0000:046Ch — счетчик таймера. Если этот счетчик переполнится из-за того что прошло более 24 часов с момента запуска таймера, в ячейку 0000:0470h заносится значение 1.

Другое действие, выполняемое стандартным обработчиком прерывания таймера — контроль за работой двигателей НГМД. Если после последнего обращения к НГМД прошло более 2 секунд, обработчик прерывания выключает двигатель. Ячейка с адресом 0000:0440h содержит время, оставшееся до выключения двигателя. Это время постоянно уменьшается обработчиком прерывания таймера. Когда оно становится равно 0, двигатель НГМД отключается.

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

Необходимо отметить, что прерывание INT 1Ch вызывается обработчиком прерывания INT 8h до сброса контроллера прерывания, поэтому во время выполнения прерывания INT 1Ch все аппаратные прерывания запрещены. В частности, запрещены прерывания от клавиатуры.

Обработчик прерывания INT 1Ch должен заканчиваться командой IRET. Если же вы подготавливаете собственный обработчик для прерывания INT 8h, перед завершением его работы необходимо сбросить контроллер прерываний. Это можно сделать, например, так:

mov al, 20h out 20h, al

Таймер обычно реализуется на микросхеме Intel 8253 (для компьютеров IBM PC и IBM PC/XT) или 8254 (для компьютеров IBMPC/AT и IBM PS/2), а также на аналогах этих микросхем. Следующий раздел книги посвящен описанию микросхемы 8254.

Мы не будем подробно рассказывать о всех возможностях микросхем 8253 и 8254, так как обычно используются только несколько режимов работы (а чаще всего один). Полное описание вы сможете найти в справочной литературе по микросхемам 8253/8254, а также по их отечественным аналогам КР1810ВИ53 и КР1810ВИ54.

Микросхемы таймера 8253 и 8254

Таймеры 8253 и 8254 состоят из трех независимых каналов, или счетчиков. Каждый канал содержит регистры:

  • состояния канала RS (8 разрядов);
  • управляющего слова RSW (8 разрядов);
  • буферный регистр OL (16 разрядов);
  • регистр счетчика CE (16 разрядов);
  • регистр констант пересчета CR (16 разрядов)
  • GATE — управляющий вход;
  • CLOCK — вход тактовой частоты;
  • OUT — выход таймера

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

Другим аппаратным устройством, имеющим важнейшее значение для организации вычислительного процесса, является таймер. Его использование позволяет программно-аппаратным способом задавать программные события, наступающие по истечении заданного промежутка времени, считая от момента задания этих событий. Эти события реализуются путем выработки сигнала прерывания от таймера и включения соответствующего обработчика прерывания. Рассмотрим более подробно работу таймера на примере его устройства в ЭВМ типа IBM PC с МП типа 80х86.

Этот таймер состоит из трех почти одинаковых каналов – каналов «0», «1» и «2». При работе программ главным образом используется канал «0», поэтому он и будет рассмотрен; на рис.1 приведена его схема. Генератор импульсов (ГИ) вырабатывает с частотой f=1193180 Гц непрерывную последовательность импульсов, поступающих на импульсные входы всех трех каналов. При каждом поступлении импульса на вход 16-разрядного счетчика из содержимого последнего вычитается «1» и при переходе этого счетчика из состояния 000. 01 в состояние 000. 00 вырабатывается сигнал прерывания, поступающий в СПП для включения последним программы-обработчика прерывания от таймера. Если исходное состояние счетчика таймера равно 00. 0, то при поступлении очередного импульса из ГИ состояние счетчика становится равным 11. 1 и далее уменьшается на «1» при каждом поступлении импульса из ГИ. В этом случае сигнал прерывания будет выработан таймером после поступления на его вход 65536 импульсов, т.е. по прошествии интервала времени, примерно равного 55 мсек, что соответствует частоте срабатывания таймера, примерно равной 18,2 Гц. В случае, если интервал времени срабатывания таймера должен иметь меньшее значение, чем 55 мсек, то в счетчик таймера необходимо занести код, соответствующий числу импульсов N, вычисляемому по формуле где F — требуемое значение частоты срабатывания таймера, причем должно выполняться неравенство F > 18,2 Гц. Например, для F = 72,8 Гц получим, что N = 16389,8; округляя, получим, что в счетчик таймера должен быть занесен двоичный код 0 100 000 000 000 110.

Занесение требуемого кода в счетчик таймера производится следующим образом. Сначала МП х86 должен выполнить команду программы, которая производит передачу в порт таймера с шестнадцатеричным номером 40h требуемый двоичный код. Затем МП х86 должен выполнить команду программы, которая производит передачу в порт таймера с шестнадцатеричным номером 43h байта, в котором указывается номер программируемого канала таймера, режим работы этого канала и количество передаваемых в счетчик таймера байтов — 1 или 2. После этого в запрограммированном канале таймера немедленно начинает функционировать сначала схема управления занесением кода в счетчик таймера и затем сам счетчик таймера в соответствии с полученным заданием.

Рассмотрим теперь работу программы, которую обычно называют интервальным таймером. Необходимость использования этой программы определяется тем обстоятельством, что в большинстве типов ЭВМ, в том числе и в ЭВМ типа IBM PC, используется только один таймер, хотя во многих случаях при функционировании достаточно сложных программ возникает необходимость организации нескольких параллельно существующих программ, которые должны быть включены в различные заранее определенные моменты времени. Один из возможных способов организации интервального таймера состоит в следующем. Этой программой, для управления процессом параллельного выполнения нескольких программ, в оперативной памяти составляется таблица, в которой для каждой из этих программ выделяется несколько строк, содержащих следующие параметры:

значение Т(i) интервала времени, по истечении которого должна быть включена эта программа, причем отсчет этого интервала начинается с момента организации интервальным таймером этой программы;

текущее значение интервала времени t(i), по истечении которого должна быть включена эта программа;

признак c(i) режима включения этой программы — циклический или разовый (пусть, например, с(i)=0 для разового режима).

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

Тогда при каждом включении программы-обработчика прерывания от таймера в этой таблице корректируются все интервалы времени, величина которых больше нуля, путем уменьшения их значений на величину Т. Если после корректировки окажется, что для каких-то программ величина t(i)=0 или t(i)

Таймеры предназначены для формирования временных интервалов, позволяя микропроцессорной системе работать в режиме реального времени.

Таймеры представляют собой обычные цифровые счётчики, которые подсчитывают импульсы от высокостабильного генератора частоты. К системной шине микропроцессора таймеры подключаются при помощи параллельных портов.

Генератор частоты, входящий в состав таймера, определяет минимальный интервал времени, который может определять таймер. Интервалы времени, задаваемые таймером, могут устанавливаться только из дискретного набора допустимых времён. Дискретность установки этих интервалов времени тоже определяется частотой задающего генератора. Разрядность цифрового счётчика, входящего в состав таймера, определяет максимальный интервал времени, который может определять таймер.

Обычно используются 16-ти разрядные таймеры, поэтому, для подключения такого таймера к 8-ми разрядному процессору требуется два параллельных порта. Кроме того, таймером нужно управлять. Таймер нужно включать и выключать, часто требуется определять не возникало ли переполнение таймера (факт переполнения легко запомнить в дополнительном триггере, подключенном к выходу переноса счетчика таймера). Этот триггер называется флагом переполнения таймера. Триггер (флаг) включения и выключения таймера и флаг переполнения таймера подключают к системной шине микропроцессора через дополнительный порт ввода вывода.

Структурная схема таймера, построенного по описанным выше принципам, приведена на рисунке 1.

Рисунок 1. Структурная схема таймера.

В зависимости от типа использованного цифрового счетчика таймеры бывают суммирующие или вычитающие. Если в таймере используется суммирующий счётчик, то таймер называется суммирующим. Если в таймере используется вычитающий счётчик, то таймер называется вычитающим.

Использование вычитающего счётчика позволяет проще задавать интервалы времени. В этом случае записываемый в таймер код будет соответствовать интервалу времени:

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

В этой формуле код, который заносится в таймер, представляет собой дополнение кода интервала времени до максимального кода, который можно записать в таймер. Максимальный код таймера определяется по разрядности таймера. В рассмотренном примере разрядность таймера равна 16. Это означает, что максимальный код равен 65535.

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

Рисунок 2. Структурная схема свободнобегущего таймера с модулем сравнения.

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

Часто с одним свободно бегущим таймером работает несколько модулей сравнения. В этом случае они образуют набор модулей сравнения (PCA). Практически все современные микроконтроллеры и сигнальные процессоры оснащены таймерами с такими наборами модулей.

Кроме модулей сравнения с свободнобегущим таймером работают модули захвата, которые позволяют аппаратно запоминать время какого-либо внешнего события без участия центрального процессора. Структурная схема свободнобегущего таймера с модулем захвата приведена на рисунке 3.

Рисунок 3. Структурная схема свободнобегущего таймера с модулем захвата.

Классификация и структура микроконтроллеров

В настоящее время выпускается целый ряд типов МК. Все эти приборы можно условно разделить на три основных класса:

  • 8-разрядные МК для встраиваемых приложений;
  • 16- и 32-разрядные МК;
  • цифровые сигнальные процессоры (DSP).

Наиболее распространенным представителем семейства МК являются 8-разрядные приборы, широко используемые в промышленности, бытовой и компьютерной технике. Они прошли в своем развитии путь от простейших приборов с относительно слаборазвитой периферией до современных многофункциональных контроллеров, обеспечивающих реализацию сложных алгоритмов управления в реальном масштабе времени. Причиной жизнеспособности 8-разрядных МК является использование их для управления реальными объектами, где применяются, в основном, алгоритмы с преобладанием логических операций, скорость обработки которых практически не зависит от разрядности процессора.

Росту популярности 8-разрядных МК способствует постоянное расширение номенклатуры изделий, выпускаемых такими известными фирмами, как Motorola, Microchip, Intel, Zilog, Atmel и многими другими. Современные 8-разрядные МК обладают, как правило, рядом отличительных признаков. Перечислим основные из них:

  • модульная организация, при которой на базе одного процессорного ядра (центрального процессора) проектируется ряд (линейка) МК, различающихся объемом и типом памяти программ, объемом памяти данных, набором периферийных модулей, частотой синхронизации;
  • использование закрытой архитектуры МК, которая характеризуется отсутствием линий магистралей адреса и данных на выводах корпуса МК. Таким образом, МК представляет собой законченную систему обработки данных, наращивание возможностей которой с использованием параллельных магистралей адреса и данных не предполагается;
  • использование типовых функциональных периферийных модулей (таймеры, процессоры событий, контроллеры последовательных интерфейсов, аналого-цифровые преобразователи и др.), имеющих незначительные отличия в алгоритмах работы в МК различных производителей;
  • расширение числа режимов работы периферийных модулей, которые задаются в процессе инициализации регистров специальных функций МК.

При модульном принципе построения все МК одного семейства содержат процессорное ядро, одинаковое для всех МК данного семейства, и изменяемый функциональный блок, который отличает МК разных моделей. Структура модульного МК приведена на рис. 4.1.

Процессорное ядро включает в себя:

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

Изменяемый функциональный блок включает в себя модули памяти различного типа и объема, порты ввода/вывода, модули тактовых генераторов (Г), таймеры. В относительно простых МК модуль обработки прерываний входит в состав процессорного ядра. В более сложных МК он представляет собой отдельный модуль с развитыми возможностями. В состав изменяемого функционального блока могут входить и такие дополнительные модули как компараторы напряжения, аналого-цифровые преобразователи (АЦП) и другие. Каждый модуль проектируется для работы в составе МК с учетом протокола ВКМ. Данный подход позволяет создавать разнообразные по структуре МК в пределах одного семейства.

Рис. 4.1. Модульная организация МК.

Параметры настройки таймеров в режиме 0

Таймеры 0 и 1 доступны и управляются через регистры SFR. Каждый таймер-счетчик представляет собой шестнадцатибит­ный регистр, доступный как два отдельных байта: младший байт (TL0 или ТL1) и старший байт (ТН0 или ТН1). В регис­тре управления TCON можно разрешить/запретить работу тай­меров и задать их статус. Оба они могут работать в одном из четырех режимов, установленных в битах Ml—М0 регистра TMOD. Естественно, что каждый таймер может быть настроен индивидуально.

Режим 0: 13-битный таймер/счетчик (таймеры 0 и 1)

Таймеры 0 и 1 могут функционировать в режиме 13-битного таймера/счетчика в режиме 0. Оба таймера функционируют оди­наково, т. е. приводимое описание для таймера 0 может также относитья и к таймеру 1.

Регистр ТН0 содержит восемь старших битов, а регистр TL0 — пять младших битов (TL0.4+TL0.0) 13-битного тайме­ра/счетчика. Три старших бита регистра TL0 не определены и могут быть либо маскированы, либо игнорироваться при чте­нии. В режиме 13-битного таймера значение регистров увели­чивается при переходе от значения 0xlFFF к значению 0x0000 (overflows), устанавливается флаг TF0 (TCON.5), а также мо­жет вырабатываться соответствующее прерывание, если оно разрешено. Бит С/Т0 (TMOD.2) — источник счетных импуль­сов. Обнуление этого флага выбирает для счета тактовые им­пульсы, а установка разрешает срабатывание по заднему фронту внешних импульсов. Установка бита TR0 (TCON.4) разрешает таймер, когда GATE0 (TMOD.3) равен нулю или входной сиг­нал INT0/ находится в состоянии лог. 1. Если GATE0 (TMOD.3) равен единице, таймер управляется внешним сигналом INT0/ произвольной формы. Параметры настройки режима 0 приве­дены в табл. 8.2.

Установка бита TR0 не сбрасывает регистры таймера. Регис­тры таймера должны быть инициализированы до разрешения таймера.

Таймер 1 функционирует аналогично таймеру 0. На рис. 8.1 показана функциональная схема таймеров 0 и 1 в режиме 0.

Бит TR0 Бит GATEO Вход INTO/ Таймер / Счетчик
X X Запрещен
X Разрешен
Запрещен
Разрешен

Примечание: символ X означает произвольное состояние

Рис. 8.1. Функциональная схема режима 0 (для таймеров 0 и 1)

Режим 1: 16-битный таймер счетчик (таймеры 0 и 1)

Режим 1 аналогичен режиму 0, за исключением того, что регистры шестнадцатиразрядные.

Режим 2: 8-битный таймер/счетчик с автозагрузкой (таймеры 0 и 1)

Режим 2 таймеров 0 и 1 рассчитан на их работу в качестве 8-битных таймеров/счетчиков с автозагрузкой начальной величи­ны. В этом режиме регистр TL0 выполняет роль счетчика, а ре­гистр ТН0 содержит загружаемую величину. Когда регистр TL0 переполняется, устанавливается флаг TF0 (TCON.5) и началь­ная величина загружается из регистра ТН0 в регистр TL0.

Естественно, может генерироваться прерывание TF0, если оно раз­решено. Перезагружаемая величина, содержащаяся в регистре TH0, изменяется. Следует помнить, что перед тем, как разрешить работу таймера/счетчика, необходимо инициализировать регистр TL0. Таймер 1 функционирует аналогично таймеру 0. Рис. 8.2 иллюстрирует работу таймеров 0 и 1 в режиме 2.

Рис.8.2. Функциональная схема режима 2 (для таймеров 0 и 1)

Режим 3: Два 8-битных таймера/счетчика (только для таймера 0)

В режиме 3 таймеры 0 и 1 работают по-разному. Таймер 0 рабо­тает как два 8-битных таймера/счетчика. Таймером/счетчиком на регистре TL0 управляют биты TR0, С/Т0, GATE0 и TF0 регист­ров TCON и TMOD. Он может использовать для работы систем­ную тактовую частоту или внешний вход. Таймер на регистре ТН0 управляется битом TR1. Он может использовать для счета только системную тактовую частоту. Переполнение регистра ТН0 вызы­вает установку флага TF1 и может генерировать прерывание. Тай­мер 1 в режиме 3 не работает, и когда таймер 0 работает в режиме 3, таймер 1 может работать в режимах 0, 1 или 2, но не может использовать внешний сигнал, устанавливать флаг TF1 и генери­ровать прерывание. Однако переполнение таймера 1 может ис­пользоваться для генерации последовательной скорости передачи. На рис. 8.3 показана функциональная схема режима 3 таймера 0.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *