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

 
 
> AT91SAM9G45, IRQ и FIQ
Sergey1212
сообщение Apr 26 2013, 07:54
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 23-04-13
Пользователь №: 76 596



Вобщем задача такая
хочу реализовать параллельную шину данных и 8 ног внешнего прерывания по которым будет опрашиваться шина.
данные с шины должны опрашиваться как можно быстрее т.е. прерываться выполнения IRQ и не допускать вложенности.
Для этих целей хочу использовать FIQ. Использовать EBI для общения как с статической памятью не получится, буду использовать ногодрыг, да и устройство на другой стороне имеет относительно низкую скорость шины.
IRQ будут висеть на таймерах и т.д. а FIQ на физических пинах.

Отсюда вопросы насколько хорошо выполненна реализация IRQ в стандартных примерах атмеля?
из архив at91sam9m10-ekes-softpack-1.9.zip
Если там все по кривому, было бы не плохо увидеть ссылку на правильный код.
Получится ли вообще повесить на 8 ног FIQ прерывания?
Не владею асемблером, где можно посмотреть пример кода с FIQ на этот проц?
сохранение стека, возврат и т.д.
И еще стоит ли вообще использовать FIQ или достаточно использовать на эти 8 ног IRQ с одинаковым самым высоким приоритетом?
будут ли выполняющиеся в этот момент IRQ с более низким приоритетом прерываться для выполнения IRQ с более высоким приоритером?
и как я понимаю вложенности тоже не будет т.к. IRQ будут с одинаковым высоким приоритетом?

Сообщение отредактировал Sergey1212 - Apr 26 2013, 08:08
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sergey1212
сообщение May 2 2013, 11:50
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 23-04-13
Пользователь №: 76 596



Всем спасибо, хоть что-то разъяснилось)
Код сократился до такого варианта:
Код
stmfd   sp!, {r0, lr}            
ldr     lr, =AT91C_BASE_AIC
ldr     r0, [lr, #AIC_FVR]
mov  lr, pc
bx     r0
ldmia       sp!, {r0, lr}
subs        pc,lr,#4

Чего тут еще не нужно делать?
вот r0 нужно сохранять-возвращать?
может и вместо bx что-то посоветуете чтобы lr не приходилось менять перед bx чтобы и его не сохранять?
а может чего-то нехватает?

Сообщение отредактировал Sergey1212 - May 2 2013, 13:39
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 2 2013, 16:08
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Я же уже писал... smile3046.gif
В моём ARM9-ядре (ARM926EJ-S из состава OMAP-L137) достаточно в контроллере прерываний посадить только одно прерывание на линию FIQ (остальные - на IRQ).
Тогда достаточно будет оставить:
Код
SUB  LR, LR, #4
STMFD  SP!, {..., LR}
...
LDMFD  SP!, {..., PC}^
Вместо многоточия можно писать свой код, учитывая, что регистры R8-R12 можно не сохранять.
Вместо многоточия можно также поставить вызов си-функции. Тогда в команды STMFD/LDMFD нужно добавить все регистры из диапазона R0-R7, которые нужно сохранять
(список таких регистров ищется в разделе "Calling Conventions" на ваш компилятор).

Для CodeComposer (и ARM926EJ-S из состава OMAP-L137) это будет:
Код
FIQ_handler:    
SUBS  LR, LR, #4
STMFD SP!, {R0-R3, R12, LR}    ;Store registers on FIQ stack
BL  c_func                                 ;Go to ISR (still in FIQ mode), will return to following line
LDMFD SP!, {R0-R3, R12, PC}^  ;Restore registers from FIQ stack. Return to program current status


Так что выгоднее FIQ-обработчик писать на асм - если уложитесь в регистры R8-R12 то вообще ничего на стек сохранять не нужно и можно избавиться от STMFD/LDMFD, и может даже от команд загрузки рабочих регистров статическими переменными и константами.
Я так на ARM7 с частотой 72МГц получал частоты прерываний порядка нескольких мегагерц при 50% загрузке CPU. И даже без JTAG... sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sergey1212   AT91SAM9G45   Apr 26 2013, 07:54
- - aaarrr   Цитата(Sergey1212 @ Apr 26 2013, 11:54) О...   Apr 26 2013, 08:13
- - Sergey1212   Не подскажите пример хорошей реализации IRQ и FIQ?   Apr 26 2013, 08:30
- - jcxz   Цитата(Sergey1212 @ Apr 26 2013, 13:54) П...   Apr 26 2013, 08:41
- - aaarrr   ИМХО, хорошая реализация может выглядеть примерно ...   Apr 26 2013, 08:50
- - Sergey1212   а всетаки пример может кто скинет? с вложенными IR...   Apr 26 2013, 11:01
- - Sergey1212   Есть вот такой код фика CODE FIQ_Handler_Entry: ...   May 2 2013, 05:44
|- - jcxz   Цитата(Sergey1212 @ May 2 2013, 11:44) Ес...   May 2 2013, 07:52
|- - aaarrr   Цитата(jcxz @ May 2 2013, 11:52) По-моему...   May 2 2013, 08:00
||- - jcxz   Цитата(aaarrr @ May 2 2013, 14:00) Нет, т...   May 2 2013, 09:09
|- - Sergey1212   ЦитатаПо-моему - Вы обманываете. Такой код работат...   May 2 2013, 08:32
|- - aaarrr   Цитата(Sergey1212 @ May 2 2013, 12:32) Де...   May 2 2013, 08:40
|- - jcxz   Цитата(Sergey1212 @ May 2 2013, 14:32) Я ...   May 2 2013, 08:59
|- - Sergey1212   Цитата(jcxz @ May 2 2013, 12:59) Вы-то ка...   May 2 2013, 09:11
|- - jcxz   Цитата(Sergey1212 @ May 2 2013, 15:11) В ...   May 2 2013, 09:54
- - aaarrr   Прочитайте внимательно раздел "27.8.4.5 Fast ...   May 2 2013, 06:41
- - Sergey1212   Да спасибо, это видимо потому что прерывание не сб...   May 2 2013, 09:02
|- - aaarrr   Цитата(Sergey1212 @ May 2 2013, 13:02) ст...   May 2 2013, 09:45
- - Sergey1212   ЦитатаНе надо делать: впустую переключать контекст...   May 2 2013, 11:12
|- - aaarrr   Цитата(Sergey1212 @ May 2 2013, 15:12) Их...   May 2 2013, 11:47
- - aaarrr   Цитата(Sergey1212 @ May 2 2013, 15:50) Че...   May 2 2013, 18:02


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

 


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


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