Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вылет по адресу 4
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
SasaVitebsk
Доброго времени суток.
Начал работать с MSP430 впервые. Похоже что-то недогоняю. Возможно много. Сильно не пинайте. На реализацию проекта - месяц.
Проект не сложный. Написал пока с большего.
MSP430f6736. Кварц 32768. Пробовал запустить на 25 и на 12 МГц.
Использую IAR + FreeRTOS. Похоже с FreeRTOS сильно погорячился. Но переписывать уже не хочется.
У меня на ARM эта же FreeRTOS работает как часы. Поэтому как-то не глядя.
А здесь похоже мало кто работает на ней. Возможно в этом и проблема. Пока грешу на систему.
---
Суть проблемы.
1. Запускается нормально и чётко доходит по- крайней мере до запуска задачи. При этом претензий никаких нет. Всё адекватно.
2. Если дальше ходить по шагам (MSP-FET), то работает. Что-то выполняет. Если делать остановки, то работает некоторое время.
3. Если запустить на выполнение то происходит вылет.
Когда останавливаешь процессор, то он находится по адресу 4
Вижу что это какая-то заглушка

bis.w #f0,SR
jmp $

В документации и исходниках её не нашёл. Поскольку это адреса периферии, то предчувствую что это заглушка самого TI.
Вопрос. Что это за ловушка и почему я туда попадаю?
Заранее благодарю за ответ.
rezident
Ничего не знаю про FreeRTOS, но как там у вас обстоят дела с остановом WDT при начальной инициализации? WDT нужно останавливать в функции __low_level_init(), иначе до запуска OS может вообще не дойти.
SM
Скорее всего происходит прерывание, для которого не задана ISR - в таблице прерываний будет 0xFFFF, что приведет к переходу на 0xFFFE и далее оно, перекрутившись через 0, застрянет на этом 4-ом адресе.

А вот какое прерывание возникает - понаставьте заглушек по всем векторам, да определите.
SasaVitebsk
Спасибо за ответы. Буду пробовать. WDT остановлен. Примеры смотрел.
SasaVitebsk
Цитата(SM @ Jan 14 2014, 22:31) *
Скорее всего происходит прерывание, для которого не задана ISR

Всё правильно. Ещё раз спасибо.
Ну и, как обычно, сам дурак. ))
Для ОС используется таймер типа SysTick. На MSP (равно как и на AVR, к примеру), для этих целей используется обычный штатный таймер, так как другого нет.
Для инициализации таймера используется vApplicationSetupTimerInterrupt, а для обработки используется определение вектора в файле FreeRTOSConfig, типа:
#define configTICK_VECTOR TIMER3_A0_VECTOR

Наверное кто-то меня отвлёк и я умудрился инициализировать таймер 3, а обработчик systick сделать на таймер 2. ))
Сейчас поставил заглушки на все прерывания, от греха подальше. )))

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.