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

 
 
 
Reply to this topicStart new topic
> STM32 проблема с прерываниями, помогите начинающему
Exeland
сообщение May 4 2009, 12:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 9-04-09
Из: Чебоксары
Пользователь №: 47 411



Проблема в следующем:
Писал я прошивку на микроконтроллер STM32F103CB. Пока писал прошивку проверял ее в стимуляторе, стандартном Keil`а. Все работало отлично. Потом собрал девайс. Подключился к нему через Seger, начал эмулить. Почему-то не работают прерывания, хотя в симуляторе они работают. В чем дело? Где подвох?
Go to the top of the page
 
+Quote Post
KRS
сообщение May 4 2009, 13:13
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



А что в регистрах (если посомтреть в отладчике)
BASEPRI
SETENAx
приотритеты?

в прерываниях брейкпоинты стоят? а то при single step у кортекса есть возможность обходить прерывания.
Go to the top of the page
 
+Quote Post
Exeland
сообщение May 4 2009, 13:29
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 9-04-09
Из: Чебоксары
Пользователь №: 47 411



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

А где эти регистры BASEPRI и SETENAx. В окне настройки отладчика не нашел. Если что у меня Seger J-Link.
Go to the top of the page
 
+Quote Post
KRS
сообщение May 4 2009, 13:36
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

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

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

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

вы попробуйте для начала брейкпоинты в обработчиках прерывания поставить!
Go to the top of the page
 
+Quote Post
Exeland
сообщение May 6 2009, 09:19
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 9-04-09
Из: Чебоксары
Пользователь №: 47 411



Да действительно. Выставил брейкпоинты и вижу что прерывания выполняютс. Наверно, действительно в пошаговом режиме Cortex обходит прерывания.
Go to the top of the page
 
+Quote Post
KRS
сообщение May 6 2009, 13:35
Сообщение #6


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

Т.к. я сам делал отладчик (на FT232R) - могу сказать, что single step происходит аппаратно и настраивается пропускать прерывания или нет. Тут уже была тема, как раз жаловались, что невозможно отлаживать потому что в прерывания все время попадает.
Go to the top of the page
 
+Quote Post
Exeland
сообщение May 6 2009, 13:41
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 9-04-09
Из: Чебоксары
Пользователь №: 47 411



Не могу понять как микроконтроллер в режиме эмуляции работает. Я настроил 4 таймера каждый на определенное время. Первым должен заканчивать подсчет 1-ый и запускаться заново на подсчет , вторым второй, затем третий и четвертый. В симуляторе Keil`a все проходит нормально. А при эмуляции через JTAG все флаги переполнения таймеров поднимаются одновременно, как будто они настроены на один интервал времени.
Go to the top of the page
 
+Quote Post
KRS
сообщение May 6 2009, 15:52
Сообщение #8


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

Просто в симуляторе вы делаете single step... команда выполняется за несколько тактов симулятор останавливается, счетчики таймеров увеличиваются на несколько тиков (в зависимости от времени выполнения команды 1, 2 такта обычно)
А в реальном процессоре ядро то останавливается, а периферия продолжает работать, пока вы сделаете шаг... уже все таймеры и истекли! Риал тайм так не отладить нужны другие подходы!
Go to the top of the page
 
+Quote Post
lehacheb
сообщение May 7 2009, 09:37
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 11-04-09
Пользователь №: 47 508



У меня на 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
Go to the top of the page
 
+Quote Post
Exeland
сообщение May 7 2009, 10:15
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 9-04-09
Из: Чебоксары
Пользователь №: 47 411



To KRS А я думал, что отладчик умножитель PLL притормаживает и при этом вся периферия тормозит вместе с ядром.

То lehacheb У меня вектора прерываний во флеше.
Go to the top of the page
 
+Quote Post

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

 


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


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