Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сторожевой таймер
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
d7d1cd
Привет всем! Хочу использовать сторожевой таймер в режиме интервального. Подскажите, как мне сконфигурировать регистр сторожевого таймера, чтобы прерывания по его инициативе шли как можно реже.
E.V.G.
В заголовочных файла для каждого контроллера (типа MSP430x14x.h) есть заготовки. В них для WDT выбрана частота тактирования от DCO по умолчанию (около 1МГц).
rezident
Раздел 10.2.3 Interval Timer Mode на стр. 195 и 10.2.6 Software Examples на стр. 197 в MSP430x1xx Family User's Guide (Rev. F) - slau049f.pdf.
d7d1cd
Цитата(rezident @ Dec 6 2012, 19:02) *
Раздел 10.2.3 Interval Timer Mode на стр. 195 и 10.2.6 Software Examples на стр. 197 в MSP430x1xx Family User's Guide (Rev. F) - slau049f.pdf.

Уважаемый rezident, очень ценю ваши подсказки. Я внял вашим указаниям из прошлых постов. Указанные здесь параграфы мною уже прочитаны. В примере переключения WDT в интервальный режим используются символические константы. Где можно узнать их значение?
Если я настроил тактирование WDT от ACLK (частота которого 8 МГц) и выбрал интервал сторожевого таймера ACLK/32768 (биты WDTISx - 00), то WDT будет вызывать прерывание через:

8000000/32768 = 244 Гц - частота тактирования WDT;
1/244 = 0,004 с - время одного такта;
0,004 * 65536 = 262 с = 4,37 мин - время, через которое будет вызываться прерывание.

Правилен ли мой расчет?
rezident
Цитата(d7d1cd @ Dec 6 2012, 22:20) *
В примере переключения WDT в интервальный режим используются символические константы. Где можно узнать их значение?
В хедере msp430x14x.h или в описании регистров того же User's Manual. Для "родных" хедеров TI наименования отдельных бит и регистров являются их собственным "стандартом".
Цитата(d7d1cd @ Dec 6 2012, 22:20) *
Правилен ли мой расчет?
Правилен только до половины. Период вызова прерываний от WDT будет 32768/8000000=4,096мс (или по другому - с частотой 244,14Гц). Про какие еще дополнительные такты вы рассуждаете, мне непонятно.
d7d1cd
Цитата(rezident @ Dec 6 2012, 21:44) *
Правилен только до половины. Период вызова прерываний от WDT будет 32768/8000000=4,096мс (или по другому - с частотой 244,14Гц). Про какие еще дополнительные такты вы рассуждаете, мне непонятно.
А как же внутренний 16-ти разрядный счетчик сторожевого таймера... Он не используется? Я думал, что через каждые 4,096 мс его значение будет увеличиваться на 1, а при достижении значения 65535 и последующего обнуления будет вызвано прерывание.

rezident
Цитата(d7d1cd @ Dec 6 2012, 23:20) *
А как же внутренний 16-ти разрядный счетчик сторожевого таймера... Он не используется?
Как не используется? Именно он и используется для счета.
Цитата(d7d1cd @ Dec 6 2012, 23:20) *
Я думал, что через каждые 4,096 мс его значение будет увеличиваться на 1, а при достижении значения 65535 и последующего обнуления будет вызвано прерывание.
Посмотрите внимательно блок-схему WDTimer на Figure 10−1. Watchdog Timer Block Diagram на стр.194 в User's Guide. Где вы там увидели какие-либо предделители или дополнительные счетчики, кроме основного 16-и разрядного счетчика WDT? Снизу под счетчиком на блок-схеме изображен мультиплексор который подключает либо SMCLK, либо ACLK к счетному входу. А слева от счетчика изображен мультиплексор, который коммутирует выходы счетчика (Q6/Q9/Q13/Q15) для формирования флага прерывания и сигнала сброса счетчика WDT.
d7d1cd
Вроде немного прояснилось. Но все равно не понятно в результате чего происходит увеличение значения счетчика WDT... Оно же происходит по тактированию, правильно? Тактирование берется от ACLK частотой 8МГц поделенное на 32768, то есть 244 Гц. То есть, в секунду значение счетчика должно увеличиться на 244.

Где я тут опять не прав? sm.gif
E.V.G.
Счётчик WDT тактируется частотой, которая идёт от входного мультиплексора без всякого предварительного деления. Далее счётчик считает до выбранного через выходной мультиплексор числа, после чего формируется флаг прерывания и счётчик сбрасывается в ноль. А вообще лучше используйте WDT по прямому назначению, а для формирования заданного интервала используйте Timer_A или Timer_B. Обычно это легко реализуется через захват значения таймера и добавления к захваченному значению требуемого интервала времени.
rezident
Цитата(d7d1cd @ Dec 7 2012, 07:51) *
Где я тут опять не прав? sm.gif

Вот тут (выделено)
Цитата(d7d1cd @ Dec 7 2012, 07:51) *
Тактирование берется от ACLK частотой 8МГц поделенное на 32768, то есть 244 Гц. То есть, в секунду значение счетчика должно увеличиться на 244.

Нет никакого дополнительного делителя ACLK. Считает/делит сам счетчик WDT. При входной частоте 8МГц за секунду значение счетчика WDT увеличивается на 8000000 sm.gif
d7d1cd
Тогда что же значат биты WDTISx? Поясните их назначение на примере.
rezident
Цитата(d7d1cd @ Dec 7 2012, 17:25) *
Тогда что же значат биты WDTISx?

Вы на блок-схему WDT в руководстве пользователя смотрели? Из нее разве не очевидно назначение битов WDTISx? С помощью WDTIS0 и WDTIS1 выбирается выход счетчика WDT с которого транслируется сигнал для установки флага прерывания и сброса самого счетчика. WDTIS0 и WDTIS1 являются адресными входами мультиплексора, который коммутирует выходы счетчика WDT.
При WDTIS0=0, WDTIS1=0 выбирается выход Q15, который изменяет свое состояние на каждый 2^15=32768 такт счетного входа. Следовательно период сброса счетчика WDT (и установки флага прерывания WDTIFG) при тактовой 8МГц будет 32768/8000000=4,096мс.
При WDTIS0=1, WDTIS1=1 выбирается выход Q6, который изменяет свое состояние на каждый 2^6=64 такт счетного входа. Период сброса счетчика WDT при этом будет 64/8000000=8мкс.
Если и такое объяснение вам непонятно, то я уже не знаю, как объяснить еще проще? laughing.gif Скачайте тогда переводное руководство пользователя, коль есть проблемы с переводом оригинала. http://padabum.com/d.php?id=2903
d7d1cd
Вот такое объяснение вполне понятно! sm.gif Спасибо большое! Мне сложно разбираться с блок-схемами. Многое не понятно, поэтому столько вопросов. Хорошо, что есть этот форум и знающие люди, которые подскажут.

Если я хочу настроить сторожевой таймер на режим интервального, тактирование осуществить от SMCLK, и установить максимальный интервал, то биты регистра WDTCTL устанавливаю следующим образом:
WDTHOLD = 0
WDTTMSEL = 1
WDTCNTCL = 1 (не уверен, что требуется)
WDTSSEL = 0
WDTISx = 00

Остальные биты (как я думаю) при данных установках роли играть не будут. Их я сбрасываю. То есть, в регистр WDTCTL надо записать число: 0x5A18.

Подскажите, если я не прав sm.gif
rezident
Цитата(d7d1cd @ Dec 7 2012, 20:06) *
Остальные биты (как я думаю) при данных установках роли играть не будут.
Конечно же нет. Обязательно будут! Будут играть свою роль в соответствии с заданной им функциональностью.
Цитата(d7d1cd @ Dec 7 2012, 20:06) *
Их я сбрасываю.
В данном применении это правильно.
Цитата(d7d1cd @ Dec 7 2012, 20:06) *
То есть, в регистр WDTCTL надо записать число: 0x5A18.
Да, верно.
d7d1cd
Хотелось бы разъяснений про неиспользуемые биты. Про бит WDTNMIES все понятно, так как он играет свою роль только при WDTNMI = 1. А вот бит WDTNMI... Как я понимаю, если он 0, то сторожевой таймер работает либо в сторожевом, либо в интервальном режиме (зависит от бита WDTTMSEL).

А если он равен 1? Тогда (опять же, по моему) сторожевой таймер ничего не считает. Он "сидит и ждет" на выводе RST\NMI микроконтроллера фронта или спада сигнала (зависит от бита WDTNMIES). "Дождавшись", он генерирует PUC.

Верно?
rezident
Цитата(d7d1cd @ Dec 7 2012, 22:19) *
А вот бит WDTNMI... Как я понимаю, если он 0, то сторожевой таймер работает либо в сторожевом, либо в интервальном режиме (зависит от бита WDTTMSEL).
WDTNMI к счетчику WDT не имеет прямого отношения. Просто нужно было куда-то поместить управление пином RST/NMI, вот и запихнули управляющий бит в регистр WDTCTL.
Мнится мне, вы недостаточное количество раз прочитали User's Guide. Вернитесь к главе 2 и перечитайте ее, обратив внимание на блок-схему на странице 19 Figure 2−1. Power-On Reset and Power-Up Clear Schematic. В этой же главе на стр. 24 описана функциональность NMI и управляющего бита WDTNMI.
d7d1cd
Спасибо за ссылку на главу 2. Теперь все понятно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.