|
Сторожевой таймер |
|
|
|
Dec 6 2012, 04:03
|
Участник

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

|
В заголовочных файла для каждого контроллера (типа MSP430x14x.h) есть заготовки. В них для WDT выбрана частота тактирования от DCO по умолчанию (около 1МГц).
|
|
|
|
|
Dec 6 2012, 17:20
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Dec 6 2012, 17:44
|
Гуру
     
Группа: Свой
Сообщений: 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Гц). Про какие еще дополнительные такты вы рассуждаете, мне непонятно.
|
|
|
|
|
Dec 6 2012, 18:20
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

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

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

|
Счётчик WDT тактируется частотой, которая идёт от входного мультиплексора без всякого предварительного деления. Далее счётчик считает до выбранного через выходной мультиплексор числа, после чего формируется флаг прерывания и счётчик сбрасывается в ноль. А вообще лучше используйте WDT по прямому назначению, а для формирования заданного интервала используйте Timer_A или Timer_B. Обычно это легко реализуется через захват значения таймера и добавления к захваченному значению требуемого интервала времени.
|
|
|
|
|
Dec 7 2012, 14:15
|
Гуру
     
Группа: Свой
Сообщений: 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мкс. Если и такое объяснение вам непонятно, то я уже не знаю, как объяснить еще проще?  Скачайте тогда переводное руководство пользователя, коль есть проблемы с переводом оригинала. http://padabum.com/d.php?id=2903
|
|
|
|
|
Dec 7 2012, 15:06
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Вот такое объяснение вполне понятно!  Спасибо большое! Мне сложно разбираться с блок-схемами. Многое не понятно, поэтому столько вопросов. Хорошо, что есть этот форум и знающие люди, которые подскажут. Если я хочу настроить сторожевой таймер на режим интервального, тактирование осуществить от SMCLK, и установить максимальный интервал, то биты регистра WDTCTL устанавливаю следующим образом: WDTHOLD = 0 WDTTMSEL = 1 WDTCNTCL = 1 (не уверен, что требуется) WDTSSEL = 0 WDTISx = 00 Остальные биты (как я думаю) при данных установках роли играть не будут. Их я сбрасываю. То есть, в регистр WDTCTL надо записать число: 0x5A18. Подскажите, если я не прав
|
|
|
|
|
Dec 7 2012, 16:39
|
Гуру
     
Группа: Свой
Сообщений: 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. Да, верно.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|