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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> MSP430F449: сброс при помощи WTD не одно и тоже что сброс при включении питания ?!
pt200
сообщение Jun 3 2009, 12:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 19-05-09
Пользователь №: 49 263



Пытаюсь сбросить проц кодом ниже( два разных):
Код
  ENTER_CRITICAL_SECTION();
  WDTCTL = 0x5A03; // WDT: FAST RESET
  for(;;){}
//................................................................................
......
  ENTER_CRITICAL_SECTION();
  WDTCTL = 0x1203; // WDT BAD PSW - RESET:
  for(;;){}

Сброс происходит( вкрайнем случае на main() прыгает), регистры периферии не обнуляются( проверил в отладке)

Поведение проги абсолютно разное при POR и PUC!

В чем может быть проблема?
Или как еще программно перезапустить проц "по полной"( вся переферия в нулях должна стать)?

Сообщение отредактировал pt200 - Jun 3 2009, 12:49
Go to the top of the page
 
+Quote Post
pt200
сообщение Jun 4 2009, 07:17
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 19-05-09
Пользователь №: 49 263



Проблемка тут возникла. после такого сброса я могу получить прерывание до его включения blink.gif
Может книбудь всетаки такую задачку как то решал?

P.S. Этот форум какойто караул. Не могу отредактировать своеже сообщение( на другом компе, на рабочем еще не пробовал еще) blink.gif
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 4 2009, 07:24
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(pt200 @ Jun 4 2009, 11:17) *
P.S. Этот форум какойто караул. Не могу отредактировать своеже сообщение( на другом компе, на рабочем еще не пробовал еще) blink.gif

Можете, но недолго. Пару часов, по-моему.

Может, у вас вочдог вместо ресета вектор NMI вызывает?
Кстати, интересная тема. У меня однажды тоже возникло ощущение, что внутренний WDT сбрасывает как-то не так, как внешний


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
pt200
сообщение Jun 4 2009, 09:18
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 19-05-09
Пользователь №: 49 263



Цитата(MrYuran @ Jun 4 2009, 11:24) *
Можете, но недолго. Пару часов, по-моему.

Может, у вас вочдог вместо ресета вектор NMI вызывает?
Кстати, интересная тема. У меня однажды тоже возникло ощущение, что внутренний WDT сбрасывает как-то не так, как внешний

Насчет таймаута не знал

Попробовал по даташиту запрограммироввать WTD:
Код
                 ENTER_CRITICAL_SECTION();
                 WDTCTL = WDTPW | WDTHOLD;
                 WDTCTL = 0x1234; //WDT BAD PSW -> RESET
                 for(;;){}
//............................................................................
                 ENTER_CRITICAL_SECTION();
                 WDTCTL = WDTPW | WDTHOLD;
                 WDTCTL = WDTPW | WDTIS1 | WDTIS0; //WDT MAX FAST RESET
                 for(;;){}

тоже самое( в маин попадаю, а вот регисты у переферии все заполнены уже) help.gif wacko.gif smile3046.gif

P.S. Схему дорабатывать нельзя.
P.S.2 Поковырялся я тут в даташитах( как всегда после долгих мучений smile.gif ) и пришел к выводу что сбросить переферию программно нельзя. Для чего они такой корявый WDT сделали???

Сообщение отредактировал pt200 - Jun 4 2009, 09:39
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 4 2009, 09:36
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(pt200 @ Jun 4 2009, 12:18) *
тоже самое( в маин попадаю, а вот регисты у переферии все заполнены уже)
А может быть используется какая-то функция инициализации периферии до main(), как __low_level_init() в IAR?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
pt200
сообщение Jun 4 2009, 09:56
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 19-05-09
Пользователь №: 49 263



Цитата(Сергей Борщ @ Jun 4 2009, 13:36) *
А может быть используется какая-то функция инициализации периферии до main(), как __low_level_init() в IAR?

Используется, но переферия там не трогается.
И при первом запуске то все нормально, а вот после чудо ресета, начинается....

P.S. Хотя вот тут пишут что вроде как все чистится при таком ресете Посетить мою домашнюю страницу.
Люди у кого под рукой есть отладка с макеткой и если не тяжело попробуйте.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 4 2009, 10:55
Сообщение #7


Гуру
******

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



Цитата(pt200 @ Jun 4 2009, 15:18) *
и пришел к выводу что сбросить переферию программно нельзя.
Довольно странное заключение после чтения документации-то. В low_level_init инициализируйте все регистры периферии явными значениями и будет вам счастье, невзирая на PUC и POR.
Go to the top of the page
 
+Quote Post
pt200
сообщение Jun 4 2009, 11:17
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 19-05-09
Пользователь №: 49 263



Цитата(rezident @ Jun 4 2009, 14:55) *
Довольно странное заключение после чтения документации-то. В low_level_init инициализируйте все регистры периферии явными значениями и будет вам счастье, невзирая на PUC и POR.

это называется конфигурирование, а не сброс.
Я о "высоком" говорю smile.gif, а Вы про всякие мелочи( кстати обнулять переферию надо будет до сброса, а не в low_level_init ).

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

Я если честно вообще плохо понимаю тогда алгоритм использования WDT( программа начинает сначала, а периферия долбит по старому пока программа до нее не доберется)??? wacko.gif

P.S. Кстати раз регистры не сбрасываются, возможно ли возникновение прерывания до low_level_init ( тогда вообще караул)?

Сообщение отредактировал pt200 - Jun 4 2009, 11:19
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 4 2009, 11:50
Сообщение #9


Гуру
******

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



Цитата(pt200 @ Jun 4 2009, 17:17) *
Я если честно вообще плохо понимаю тогда алгоритм использования WDT( программа начинает сначала, а периферия долбит по старому пока программа до нее не доберется)??? wacko.gif
Дык а я везде и рекомендую использовать WDT в MSP430 как интервальный таймер smile.gif
Цитата(pt200 @ Jun 4 2009, 17:17) *
P.S. Кстати раз регистры не сбрасываются, возможно ли возникновение прерывания до low_level_init ( тогда вообще караул)?
Прерываний от периферии? Нет, не возможно. PUC вызывает сброс SR, в котором находится бит GIE. Соответственно после PUC (и POR) все маскируемые прерывания запрещены.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 4 2009, 14:00
Сообщение #10


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Вообще-то, внешний сброс тоже никак на периферии не отражается.
Только что убедился.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 4 2009, 14:18
Сообщение #11


Гуру
******

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



Цитата(MrYuran @ Jun 4 2009, 20:00) *
Вообще-то, внешний сброс тоже никак на периферии не отражается.
Только что убедился.
Вообще-то следует уточнять, про какую именно периферию идет речь? И как именно это проверяется? Могу ошибаться, но по-моему для формирования PUC требуется MCLK.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 5 2009, 04:48
Сообщение #12


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(rezident @ Jun 4 2009, 18:18) *
Вообще-то следует уточнять, про какую именно периферию идет речь? И как именно это проверяется?

Записал в P2OUT какое-то значение, потом подал внешний сброс, потом прочитал - а там то, что я записал.
Это всё в процессе исследования форт-ядра.
Подозреваю, что другая периферия тоже ведёт себя подобным образом.
Видимо, решили сэкономить на ресетах


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
pt200
сообщение Jun 5 2009, 06:49
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 19-05-09
Пользователь №: 49 263



Как говорится самое время обратиться к документации smile.gif
Открыв описание ужаснулся: часть регистров сбрасывается при POR, часть при PUC, а некоторые вообще не изменяются wacko.gif blink.gif
Короче без книжки и неподходи.

Сообщение отредактировал pt200 - Jun 5 2009, 06:49
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 5 2009, 12:17
Сообщение #14


Гуру
******

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



Цитата(MrYuran @ Jun 5 2009, 10:48) *
Записал в P2OUT какое-то значение, потом подал внешний сброс, потом прочитал - а там то, что я записал.
Вот потому я и просил указать, что именно не сбрасывается? Как и предполагалось причина в невнимательном чтении документации wink.gif Читаем "тщательнЕе" раздел Digital I/O Registers в User's Manual.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 5 2009, 12:33
Сообщение #15


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(rezident @ Jun 5 2009, 16:17) *
wink.gif Читаем "тщательнЕе" раздел Digital I/O Registers в User's Manual.

Ну дык, это уж последнее дело.
Когда совсем ничего не получается Ж)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

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

 


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


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