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

 
 
> Проблема с прерываниями AT91SAM7S256
subver
сообщение Oct 8 2008, 03:41
Сообщение #1


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

Группа: Свой
Сообщений: 185
Регистрация: 4-06-05
Из: Омск
Пользователь №: 5 726



День добрый. Вот столкнулся с такой проблемой:
при непонятных условиях перестают срабатывать прерывания (все).
Хотя в регистре AIC Interrupt Pending register взведены соответствующие биты
AIC Interrupt Mask Register также содержит правильное значение, т.е. прерывания от соотвтетсвующих периферийных устройств разрешены, однако процессор не переходит на вектор обработки прерывания.
Вообще. Т.е. не выполняется даже IRQ Handler, который прописан в стартапе. Чего делать совсем не пойму.

Работоспособность восстанавливается только после аппаратного сброса.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_dem
сообщение Oct 8 2008, 07:43
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



Или зависли в прерывании более высокого приоритета...
Go to the top of the page
 
+Quote Post
subver
сообщение Oct 8 2008, 08:16
Сообщение #3


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

Группа: Свой
Сообщений: 185
Регистрация: 4-06-05
Из: Омск
Пользователь №: 5 726



Цитата(_dem @ Oct 8 2008, 14:43) *
Или зависли в прерывании более высокого приоритета...


Не. программа крутится вне прерываний. Вроде наблюдается только под отладчиком такое поведение.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 8 2008, 08:25
Сообщение #4


Гуру
******

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



Цитата(subver @ Oct 8 2008, 12:16) *
Не. программа крутится вне прерываний. Вроде наблюдается только под отладчиком такое поведение.

Чтобы завесить AIC, достаточно не записать AIC_EOICR в обработчике или прочитать AIC_IVR не процессором, что по сути одно и то же.
Закройте в отладчике любые watch'и и окошки, отображающие содержимое AIC.
Go to the top of the page
 
+Quote Post
zhz
сообщение Oct 8 2008, 09:00
Сообщение #5


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

Группа: Свой
Сообщений: 80
Регистрация: 21-03-05
Пользователь №: 3 559



Цитата(aaarrr @ Oct 8 2008, 11:25) *
Чтобы завесить AIC, достаточно не записать AIC_EOICR в обработчике или прочитать AIC_IVR не процессором, что по сути одно и то же.
Закройте в отладчике любые watch'и и окошки, отображающие содержимое AIC.


под отладчиком перевести AIC в protected mode:
Код
#ifdef   AIC_PROTECT_MODE
   bAIC->AIC_DCR = AT91C_AIC_DCR_PROT;    // set protected mode
#else
   bAIC->AIC_DCR = 0;
#endif


в начале обработчика прерывания делать запись в IVR:
Код
#ifdef   AIC_PROTECT_MODE
   bAIC->AIC_IVR = 0;               // for protected mode of AIC
#endif
Go to the top of the page
 
+Quote Post



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

 


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


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