реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Сторожевой таймер
d7d1cd
сообщение Dec 5 2012, 17:10
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Привет всем! Хочу использовать сторожевой таймер в режиме интервального. Подскажите, как мне сконфигурировать регистр сторожевого таймера, чтобы прерывания по его инициативе шли как можно реже.
Go to the top of the page
 
+Quote Post
E.V.G.
сообщение Dec 6 2012, 04:03
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 31-01-10
Из: Арзамас
Пользователь №: 55 175



В заголовочных файла для каждого контроллера (типа MSP430x14x.h) есть заготовки. В них для WDT выбрана частота тактирования от DCO по умолчанию (около 1МГц).
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 6 2012, 15:02
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Раздел 10.2.3 Interval Timer Mode на стр. 195 и 10.2.6 Software Examples на стр. 197 в MSP430x1xx Family User's Guide (Rev. F) - slau049f.pdf.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Dec 6 2012, 17:20
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(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 мин - время, через которое будет вызываться прерывание.

Правилен ли мой расчет?

Сообщение отредактировал d7d1cd - Dec 6 2012, 17:20
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 6 2012, 17:44
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(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Гц). Про какие еще дополнительные такты вы рассуждаете, мне непонятно.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Dec 6 2012, 18:20
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



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

Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 6 2012, 18:27
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(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.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Dec 7 2012, 02:51
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Вроде немного прояснилось. Но все равно не понятно в результате чего происходит увеличение значения счетчика WDT... Оно же происходит по тактированию, правильно? Тактирование берется от ACLK частотой 8МГц поделенное на 32768, то есть 244 Гц. То есть, в секунду значение счетчика должно увеличиться на 244.

Где я тут опять не прав? sm.gif
Go to the top of the page
 
+Quote Post
E.V.G.
сообщение Dec 7 2012, 04:42
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 31-01-10
Из: Арзамас
Пользователь №: 55 175



Счётчик WDT тактируется частотой, которая идёт от входного мультиплексора без всякого предварительного деления. Далее счётчик считает до выбранного через выходной мультиплексор числа, после чего формируется флаг прерывания и счётчик сбрасывается в ноль. А вообще лучше используйте WDT по прямому назначению, а для формирования заданного интервала используйте Timer_A или Timer_B. Обычно это легко реализуется через захват значения таймера и добавления к захваченному значению требуемого интервала времени.
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 7 2012, 11:18
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(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
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Dec 7 2012, 12:25
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Тогда что же значат биты WDTISx? Поясните их назначение на примере.
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 7 2012, 14:15
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(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
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Dec 7 2012, 15:06
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Вот такое объяснение вполне понятно! sm.gif Спасибо большое! Мне сложно разбираться с блок-схемами. Многое не понятно, поэтому столько вопросов. Хорошо, что есть этот форум и знающие люди, которые подскажут.

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

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

Подскажите, если я не прав sm.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 7 2012, 16:39
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(d7d1cd @ Dec 7 2012, 20:06) *
Остальные биты (как я думаю) при данных установках роли играть не будут.
Конечно же нет. Обязательно будут! Будут играть свою роль в соответствии с заданной им функциональностью.
Цитата(d7d1cd @ Dec 7 2012, 20:06) *
Их я сбрасываю.
В данном применении это правильно.
Цитата(d7d1cd @ Dec 7 2012, 20:06) *
То есть, в регистр WDTCTL надо записать число: 0x5A18.
Да, верно.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Dec 7 2012, 17:19
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Хотелось бы разъяснений про неиспользуемые биты. Про бит WDTNMIES все понятно, так как он играет свою роль только при WDTNMI = 1. А вот бит WDTNMI... Как я понимаю, если он 0, то сторожевой таймер работает либо в сторожевом, либо в интервальном режиме (зависит от бита WDTTMSEL).

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

Верно?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 17:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01478 секунд с 7
ELECTRONIX ©2004-2016