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

3.4 Сторожевой таймер

Сторожевой таймер (WatchDog Timer) предназначен для сброса CPU, в том случае если программа, в результате каких-либо сбоев, начинает исполнять несанкционированные команды. Сторожевой таймер, как правило, организуется в виде свободно бегущего таймера-счетчика, который при его переполнении вызывает аппаратный сброс всего микроконтроллера. Для исключения непредусмотренного сброса, программа должна сама периодически сбрасывать этот таймер.

В MSP микроконтроллерах 16-ти битный сторожевой таймер может работать собственно в режиме WatchDog или в режиме интервального таймера. В режиме интервального таймера аппаратный сброс при переполнении не производится. Вместо этого генерируется прерывание с адресом вектора FFF4h.

Период переполнения зависит, во-первых, от частоты тактирования таймера, и, во-вторых, от коэффициента делителя входной частоты.

Регистры управления модуля сторожевого таймера приведены в таблице 8.

Таблица 8

Наименование

Назначение

Адрес

Началь. Значение

WDTCTL

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

120h

6900h

IE1

Регистр разрешения прерывания

0

0

IFG1

Регистр флагов прерывания

2

0

Регистр управления WDTCTL содержит также биты управления режимом внешнего вывода RESET/NMI. К этому регистру необходимо обращаться только с помощью словных форм инструкций. Регистры IE1 и IFG1, содержащие биты разрешения и флаги прерываний соответственно были рассмотрены в разделе 3.2

    • WDTCTL (WatchDog Timer Control) – регистр управления сторожевым таймером.

15 8

WDTPW

7 6 5 4 3 2 1 0

WDTHOLD

WDTNMIES

WDTNMI

WDTMSEL

WDTCNTCL

WDTSSEL

WDTIS 1,0

  • Биты 15 – 8 – WDTPW ( WDT Password) – пароль для обращения к регистру WDTCTL. При чтении это поле всегда содержит значение 69h. При записи в это поле необходимо записывать значение 5Ah, в противном случае будет генерироваться системный сброс.

  • Бит 7 – WDTHOLD – остановка сторожевого таймера.

0 – таймер активен;

1 – таймер остановлен.

  • Бит 6 – WDTNMIES (NMI Edge Select) – выбор активного фронта вывода NMI.

0 – активен растущий фронт;

1 – активен падающий фронт.

  • Бит 5 – WDTNMI – определяет функцию вывода RESET/NMI

0 – вывод функционирует как RESET;

1 – вывод функционирует как NMI.

  • Бит 4 – WDTMSEL (WDT Mode Select) – выбор режима сторожевого таймера

0 – сторожевой таймер;

1 – интервальный таймер.

  • Бит 3 – WDTCNTCL (WDT Counter Clear) – сброс сторожевого таймера. Запись логической 1 в этот бит приводит к сбросу сторожевого таймера. В том случае, если сторожевой таймер разрешен (WDTHOLD=0) программа должна периодически устанавливать этот бит во избежание системного сброса. Этот бит сбрасывается в 0 автоматически, поэтому при чтении содержимое этого бита всегда 0.

  • Бит 2 – WDTSSEL (WDT Source Select) – выбор источника тактирования.

0 – тактирование осуществляется частотой SMCLK;

1 – тактирование осуществляется частотой ACLK.

  • Бит 1,0 – WDTIS (WDT Interval Select) – выбор интервала переполнения сторожевого таймера. Комбинация состояния этих бит дает возможность установить период переполнения счетчика. Если F – частота тактирования счетчика в Герцах, то период переполнения в секундах определиться следующим образом:

WDTIS1

WDTIS0

Интервал

0

0

32768 / F

0

1

8192 / F

1

0

512 / F

1

1

64 / F

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

mov #5A80h, &WDTCTL

или

mov #WDTPW+WDTHOLD, &WDTCTL

ПРИМЕР. Сбросить сторожевой таймер и установить его режим работы для интервала переполнения в диапазоне 0.1 – 0.5 секунды. Тактирование осуществлять от ACLK = 32768 Hz.

Если выбрать комбинацию WDTIS = 01b, то период переполнения определиться как

T = 8196/32768 = 0.25 s.

Для установки режима и сброса таймера необходимо выполнить команду

mov #WDTPW+WDTCNTCL+WDTSSEL+WDTIS0, &WDTCTL

или более короткий эквивалент этой команды

mov #5A0Dh, &WDTCTL

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