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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Не генерируются прерывания в STR912
artur_off
сообщение Jan 5 2010, 13:25
Сообщение #16


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



Цитата(aaarrr @ Jan 5 2010, 14:46) *
Нет. У вас вообще получается, что последняя команда MSR не выполнена. Честно говоря, не знаю, как такое может быть sad.gif
А что происходит с CPSR в реальном железе, без отладчика?


Вот то и получается, что в CPSR оказывается 0xD3

Вопрос. Что надо сделать, чтобы после загрузки в контроллер, можно было начать отладку не с main, а с стартапа.

Убирание галочки с Run to main() не помогает.



А не может H-JTAG при отладке как то прерывания отключать?


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 5 2010, 13:32
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(artur_off @ Jan 5 2010, 16:25) *
А не может H-JTAG при отладке как то прерывания отключать?

А без отладчика не пробовали тот же CPSR прочитать? Под отладчиком, да еще при открытых окошках VIC'а/периферии может быть что угодно.
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 14:43
Сообщение #18


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



Цитата(aaarrr @ Jan 5 2010, 15:32) *
А без отладчика не пробовали тот же CPSR прочитать? Под отладчиком, да еще при открытых окошках VIC'а/периферии может быть что угодно.


Пробовал и без отладчика. НО все равно не срабатывает.

Вот например поставил, чтобы нога меняла свое состояние по прерыванию. Отключил отладчик, но ничего не происходит.

Судя по отладке, он остается в режиме Supervisor, но разрешение прерываний в этом режим ничего не меняет.


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Jan 5 2010, 15:20
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Нужно внимательно просмотреть инициализацию переферии (контроллера VIC, Timer) и разрешение их работы (снять Reset), а также тактирование выбранной переферии. В библиотеках ST, действительно, трудно разбираться, потому в отладчике нужно просмотреть инициализацию и тактирование.
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 15:52
Сообщение #20


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



 Прерывания завелись, но прерывание происходит только один раз. Методом проб и ошибок выяснилось, что при выходе из прерывания он то ли виснет, то ли не может вернуться в main();

Сообщение отредактировал artur_off - Jan 5 2010, 16:21


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Jan 5 2010, 18:32
Сообщение #21


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



h-jtag тут не причем.

функция обработчик прерывания должна быть специально оформлена с помощью ключевого слова (в IAR "__irq __arm void interrupt_function(void)") или обвертку написать на асме.
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 18:35
Сообщение #22


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



Цитата(MALLOY2 @ Jan 5 2010, 20:32) *
h-jtag тут не причем.

функция обработчик прерывания должна быть специально оформлена с помощью ключевого слова (в IAR "__irq __arm void interrupt_function(void)") или обвертку написать на асме.


Дело в том, что в прерывание он уже заходит, но прерывание происходит один раз, хотя должно быть каждую секунду(прерывание таймера по совпадению), а потом то ли зависает, то ли чтото не то с стеком, так как дальше абсолютно никаких действий не происходит.
По поводу H-JTAG. При отладке прерывания не работают вобще, то есть надо проверять без отладчика.

Заливаю свежую прошивку, выхожу из отладки, ресет процу, одно прерывание и тишина.



Компилятор у меня KEIL. C ИАРом не дружу.

Сообщение отредактировал artur_off - Jan 5 2010, 18:49


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 20:31
Сообщение #23


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



Методом тыка выяснил причину проблемы(спасибо MALLOY2)
в файлах 91x_it.c и 91x_it.h функции для обработки прерываний объявлены так void TIM3_IRQHandler(void),
а надо вот так __irq void TIM3_IRQHandler(void).
Но в таком случае возникает вполне закономерный вопрос, неужели ребята из KEIL и ST могли так лопухнуться?
Или все же я чтото натворил?

Сообщение отредактировал artur_off - Jan 5 2010, 20:32


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 5 2010, 20:51
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(artur_off @ Jan 5 2010, 23:31) *
Но в таком случае возникает вполне закономерный вопрос, неужели ребята из KEIL и ST могли так лопухнуться?
Или все же я чтото натворил?

Ну так поделитесь с общественностью сначала, что вы натворили, и в результате чего прерывания заработали?

В кейловских примерах для STR910 модификатора для процедур прерываний нет, а вектор из стартапа уводит в ST'шную "бибилиотеку", что наводит на мысль, что в ней уже все предусмотрено. Не думаю, что могли лопухнуться.
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 21:13
Сообщение #25


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



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

Сообщение отредактировал artur_off - Jan 5 2010, 21:17


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 13 2010, 13:49
Сообщение #26


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



C остальными прерываниями точно такая же ситуация. Приходится в объявлении обработчика писать __irq void ......().


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
prussta
сообщение Sep 18 2012, 10:45
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 1-02-12
Из: Екатеринбург
Пользователь №: 70 003



Здравствуйте! У меня возникла подобная проблема с STR912. Есть рабочий проект (был создан в старой версии keil v.3.53) Там прерывания работают. А если собрать новый проект в новом кейле (пробовала в keil v.4.13 и v.4.53) с этими же файлами проекта, файлами библиотеки, и с тем же стартапом, то прерывания не отрабатываются. Выполняется один раз и все. Прерывания глобально разрешены, настроены, но программа в прерывания больше не заходит. Хитрость с __irq не работает. Не могу понять в чем причина. У кого-нибудь было подобное? Помогите разобраться. Спасибо.
Go to the top of the page
 
+Quote Post

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

 


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


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