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

 
 
 
Reply to this topicStart new topic
> Spurious Interrupt, sam7x
xelax
сообщение Apr 3 2008, 07:50
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Народ, кто как в своём софте реагирует на эти вектора? 07.gif

Как их корректно обрабатывать? И можно ли их избежать или их необходимо принимать как данность?

К стати в даташите написанно:
Код
The programmer must store the address of a spurious
interrupt handler in AIC_SPU as part of the application, to enable an as fast as possible return to
the normal execution flow. This handler writes in AIC_EOICR and performs a return from
interrupt.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 3 2008, 08:06
Сообщение #2


Гуру
******

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



Цитата(xelax @ Apr 3 2008, 11:50) *
Как их корректно обрабатывать?

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

Цитата(xelax @ Apr 3 2008, 11:50) *
И можно ли их избежать или их необходимо принимать как данность?

Принимать необходимо всегда - иначе можно просто завесить процессор. В обычной жизни встречаются, как правило, только при использовании внешних прерываний.
Go to the top of the page
 
+Quote Post
xelax
сообщение Apr 3 2008, 08:42
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Как раз на внешнем прерывании висит радиочип. smile.gif И программа периодически залетает в spurioos вектор.

внешнее прерывание настраиваю на срабатывание по фронту, то есть из трёх причин описанных в даташите две первых отметаются сразу.
Остаётся одна:
Код
• An interrupt occurs just a few cycles before the software begins to mask it, thus resulting in a
pulse on the interrupt source.


А внутренние источники прерывания (исключая Watchdog) могут такую подлянку подложить?
Есть у кого-нибудь такая инфа?

З.Ы. К стати настраиваю прерывания от всей внутренней перефирии по уровню (где-то такую рекоммендацию читал).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 3 2008, 09:11
Сообщение #4


Гуру
******

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



Стоит посмотреть, откуда именно программа вылетает в Spurious IRQ - нет ли там какого-нибудь криминала (ситуации, когда из-за действий основной программы возможен сброс разрешенного прерывания).
Go to the top of the page
 
+Quote Post
xelax
сообщение Apr 3 2008, 09:39
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(aaarrr @ Apr 3 2008, 13:11) *
Стоит посмотреть, откуда именно программа вылетает в Spurious IRQ - нет ли там какого-нибудь криминала (ситуации, когда из-за действий основной программы возможен сброс разрешенного прерывания).


Как посмотреть из какого куска кода я попал в прерывание?
Как это сдеалть? Что-то пока не могу сообразить... laughing.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 3 2008, 09:50
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(xelax @ Apr 3 2008, 12:39) *
Как это сдеалть? Что-то пока не могу сообразить... laughing.gif
Посмотреть, куда указывает LR_irq -4 в точке входа.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
xelax
сообщение Apr 3 2008, 10:21
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



К стати, каким образом происходит сохранение контекста? Ведь spurious могут быть как irq так и fiq. Или для этой функции необходимо писать обёртку для сохранения и восстановления контекста?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 3 2008, 10:33
Сообщение #8


Гуру
******

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



Какое сохранение контекста? Достаточно оформить функцию как IRQ, и она будет прекрасно выполняться как в IRQ, так и в FIQ режимах.

UPD: Spurious FIQ быть не может.
Go to the top of the page
 
+Quote Post
xelax
сообщение Apr 3 2008, 10:42
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Согласен, но у меня проект на gcc реализован, а тем есть известная бага при формировании пролога и эпилога функций, объявленных как IRQ.

Так вот и получается, что надо для этой функции рукописное сохранение и восстановление контекста делать.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 3 2008, 10:55
Сообщение #10


Гуру
******

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



Для этой функции надо делать точно такое же оформление, как и для других IRQ. Это обычное прерывание.
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 3 2008, 11:33
Сообщение #11


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(aaarrr @ Apr 3 2008, 12:55) *
Для этой функции надо делать точно такое же оформление, как и для других IRQ. Это обычное прерывание.

Зачем?
Обычное да не совсем. Отличие от остальных в том, что оно ложное, значит обрабатывать его не надо.
Просто выход с мимимумом сохранения контекста.
Если в AIC_EOICR можно писать любое число (сигнал о завершении прерывания), то и сохранять нечего.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 3 2008, 11:41
Сообщение #12


Гуру
******

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



Цитата(defunct @ Apr 3 2008, 15:33) *
Обычное да не совсем.

Для процессора - самое обычное.
Go to the top of the page
 
+Quote Post

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

 


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


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