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

 
 
 
Reply to this topicStart new topic
> Проблема с выходом из цикла ожидания прерываний.
Alechin
сообщение Oct 10 2005, 10:43
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Есть такой фрагмент программы (IAR C):

Start_Timer(100); // Пауза 100 мсек.
while(is_Timer_Running()) __low_power_mode(3);

Если этот фрагмент находится внутри main - все четко работает.
Стоит только его перенести в процедуру, вызываемую из main, как программа рушится (переход на адрес 0xffff)?????? Как это понимать?
Прошел по шагам в симуляторе - все четко, ничего не портиться, но вместо попадания в обработчик прерывания от таймера (в котором я просто выставляю флаг "Таймер отработал" и сбрасываю биты low_power при выходе) в симуляторе выскакивает окно "неверное выполнение" (или "неверная последовательность команд") и хотя PC нормальный (указывает на следующую команду), я попадаю на адрес 0xffff. Аналогично при эмуляции через FET Debugger, только никаких сообщений не выскакивает, а просто оказываюсь черти где (при том, что PC правильный).
Где глюк?
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 10 2005, 11:06
Сообщение #2


Гуру
******

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



Гляньте раздел 2.3.1 Вход и выход из режимов пониженного энергопотребления
Go to the top of the page
 
+Quote Post
Alechin
сообщение Oct 10 2005, 12:03
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Сейчас еще поторкался немного: вывод такой - если выбросить из программы все (исходная программа уже довольно большая), оставив только таймер - все работает в независимости от места засыпания.
Методом исключения пришел к следующему: если в программе проключаю мультиплексором порты на входы аналогового компаратора - перестает генерить часовой кварц, который стробирует таймер, только не пойму в какой момент. Не засыпать не помогает, т.е. дело скорее всего не в режиме пониженного потребления. Если вместо таймера использовать программную задержку - все работает.
Go to the top of the page
 
+Quote Post
Alechin
сообщение Oct 10 2005, 12:54
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



А не может это быть связано со стеком (ERRATA)?
Если убрать оптимизацию - все работает, хотя код этого участка программы АБСОЛЮТНО ИДЕНТИЧЕН тому, что получается при оптимизации. Но без оптимизации все, что вокруг "наворочено" здорово.
А как перенести (скопировать) вектора прерываний в другую область памяти (errata)? В принципе поведение похожее на errata - вместо вызова обработчика вылетаю неизвестно куда, при том, что все значения регистров правильные.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 10 2005, 15:34
Сообщение #5


Гуру
******

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



Прежде чем ссылаться на errata, неплохо бы тип кристалла указывать или сам документ
Go to the top of the page
 
+Quote Post
Alechin
сообщение Oct 10 2005, 17:50
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Извиняюсь - F2131.

В общем из оптимизации оставил только "function inline" - так работает, правда только самостоятельно (не из FET) - это то-же не понятно, кстати.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 11 2005, 08:42
Сообщение #7


Гуру
******

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



Поскольку у MSP430F2131 выводы подключения внешнего кварца, в отличие от кристаллов других серий, расшарены с GPIO и Comparator_A+, то думаю что проблема именно в тактировании. Где-то вы неаккуратно обращаетесь с регистрами, которые управляют назначением пинов и внешний кварц выключается.
Go to the top of the page
 
+Quote Post

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

 


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


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