Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 проблема с прерываниями
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Exeland
Проблема в следующем:
Писал я прошивку на микроконтроллер STM32F103CB. Пока писал прошивку проверял ее в стимуляторе, стандартном Keil`а. Все работало отлично. Потом собрал девайс. Подключился к нему через Seger, начал эмулить. Почему-то не работают прерывания, хотя в симуляторе они работают. В чем дело? Где подвох?
KRS
А что в регистрах (если посомтреть в отладчике)
BASEPRI
SETENAx
приотритеты?

в прерываниях брейкпоинты стоят? а то при single step у кортекса есть возможность обходить прерывания.
Exeland
В прерываниях брейкпоинты не стоят. Эмулирую в пошаговом режиме. Но в прерывания не входит, т. к. у меня стоит цикл из которого можно выйти набрав определенное количество прерываний.

А где эти регистры BASEPRI и SETENAx. В окне настройки отладчика не нашел. Если что у меня Seger J-Link.
KRS
Цитата(Exeland @ May 4 2009, 17:29) *
В прерываниях брейкпоинты не стоят. Эмулирую в пошаговом режиме. Но в прерывания не входит, т. к. у меня стоит цикл из которого можно выйти набрав определенное количество прерываний.

А где эти регистры BASEPRI и SETENAx. В окне настройки отладчика не нашел. Если что у меня Seger J-Link.

BASEPRI - это системный регистр процессора

SETENA - разрешение прерываний, прироитеты... это часть NVIC ( контроллера прерываний)
с Keil не работаю, где там находятся не знаю. Но точно должны быть!

вы попробуйте для начала брейкпоинты в обработчиках прерывания поставить!
Exeland
Да действительно. Выставил брейкпоинты и вижу что прерывания выполняютс. Наверно, действительно в пошаговом режиме Cortex обходит прерывания.
KRS
Цитата(Exeland @ May 6 2009, 13:19) *
Да действительно. Выставил брейкпоинты и вижу что прерывания выполняютс. Наверно, действительно в пошаговом режиме Cortex обходит прерывания.

Т.к. я сам делал отладчик (на FT232R) - могу сказать, что single step происходит аппаратно и настраивается пропускать прерывания или нет. Тут уже была тема, как раз жаловались, что невозможно отлаживать потому что в прерывания все время попадает.
Exeland
Не могу понять как микроконтроллер в режиме эмуляции работает. Я настроил 4 таймера каждый на определенное время. Первым должен заканчивать подсчет 1-ый и запускаться заново на подсчет , вторым второй, затем третий и четвертый. В симуляторе Keil`a все проходит нормально. А при эмуляции через JTAG все флаги переполнения таймеров поднимаются одновременно, как будто они настроены на один интервал времени.
KRS
Цитата(Exeland @ May 6 2009, 17:41) *
В симуляторе Keil`a все проходит нормально. А при эмуляции через JTAG все флаги переполнения таймеров поднимаются одновременно, как будто они настроены на один интервал времени.

Просто в симуляторе вы делаете single step... команда выполняется за несколько тактов симулятор останавливается, счетчики таймеров увеличиваются на несколько тиков (в зависимости от времени выполнения команды 1, 2 такта обычно)
А в реальном процессоре ядро то останавливается, а периферия продолжает работать, пока вы сделаете шаг... уже все таймеры и истекли! Риал тайм так не отладить нужны другие подходы!
lehacheb
У меня на STM32 не работали прерывания, когда я саму программу записывал во FLASH,
а вектор прерывания располагался в RAM, потому что был задан при компиляции define VECT_TAB_RAM,
а в программе такой кусок
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
Exeland
To KRS А я думал, что отладчик умножитель PLL притормаживает и при этом вся периферия тормозит вместе с ядром.

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