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

 
 
> FIQ/IRQ, Некоторые неувязки ... в голове :)
SasaVitebsk
сообщение May 22 2009, 08:15
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Явного описания нигде не нашёл. Видимо считается "само-сабой разумеющимся". Тем не менее для меня это не "само-сабой".

Исходя из архитектуры, а также из того, что я вижу под J-LINKом в прерывании IRQ разрешено прерывание FIQ - я делаю вывод о том, что прерывание FIQ должны коректно вызываться/обрабатываться как из main так и из IRQ прерываний. Тем не менее у меня какие-то неувязки. Почему-то время обработки прерывания IRQ значительно завышено. Короче что-то я не так понимаю.

Работаю под IAR.
В IAR прерывание FIQ объявляется:
__fiq __arm void FIQ_Handler()

IRQ прерывание объявляется
__arm __irq static void ShowActive(void)

Прерывание FIQ таймерное. Вызывается и завершается коректно. Никаких хомутов не вижу.
Прерывание IRQ совтовое. Вызывается из FIQ корректно - это я чётко вижу по осциллографу.
Вызывается типа так:
if(Flag.EnShow) VICSoftInt = (1<<SHOW_INT);
Сбрасывается так:
VICSoftIntClear = (1<<SHOW_INT);
VICVectAddr = 0;

Продолжительность его слишком велика. Я сейчас с него выкинул почти всё. Оно должно обрабатываться 1-2 прерывания FIQ, но на самом деле обрабатывается значительно больше и завершение связано каким-то образом с прерыванием FIQ.

Буду сам копаться, но может кто подскажет что?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение May 22 2009, 13:51
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



А листинг FIQ?

Может там что-то не так?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение May 22 2009, 14:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Rst7 @ May 22 2009, 16:51) *
А листинг FIQ?
Может там что-то не так?

Он довольно приличный по объёму.
Пока кину начало и конец.
Если с Вашей помощью ничего не найду, то урежу до немогу и выложу проект

CODE
799 __fiq __arm void FIQ_Handler() // ╬ЄюсЁрцхэшх ърЁЄшэъш Master, Slave
800 {
\ FIQ_Handler:
\ 00000000 04E04EE2 SUB LR,LR,#+4
\ 00000004 FF402DE9 PUSH {R0-R7,LR}
\ 00000008 04D04DE2 SUB SP,SP,#+4
\ 0000000C 68039FE5 LDR R0,??FIQ_Handler_0 ;; MinX + 20
\ 00000010 000090E5 LDR R0,[R0, #+0]
\ 00000014 010010E3 TST R0,#0x1
\ 00000018 0C00001A BNE ??FIQ_Handler_1
\ 0000001C E014A0E3 MOV R1,#-536870912
\ 00000020 A01B81E3 ORR R1,R1,#0x28000
\ 00000024 001091E5 LDR R1,[R1, #+0]
\ 00000028 400B11E3 TST R1,#0x10000
\ 0000002C 0700001A BNE ??FIQ_Handler_1
801

.....
897 if(Flag.RMaster)
\ 0000035C 010010E3 TST R0,#0x1
898 {
899 T0IR = (unsigned)-1; // сбросить флаги прерываний таймера
\ 00000360 900B4912 SUBNE R0,R9,#+147456
\ 00000364 0010E013 MVNNE R1,#+0
900 }
901 else
902 {
903 EXTINT=0x1; // Разрешить прерывание по INT0 (от мастера)
\ 00000368 ........ LDREQ R0,??DataTable5 ;; 0xe01fc140
\ 0000036C 0110A003 MOVEQ R1,#+1
\ 00000370 001080E5 STR R1,[R0, #+0]
904 }
905 // VICVectAddr = 0;
906 }
\ 00000374 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning
\ 00000378 FF80FDE8 LDM SP!,{R0-R7,PC}^ ;; return
\ ??FIQ_Handler_0:
\ 0000037C ........ DC32 MinX + 20
\ 00000380 ........ DC32 Status + 98
\ 00000384 ........ DC32 EkrToPort
\ 00000388 REQUIRE _A_VICSoftInt
\ 00000388 REQUIRE _A_IOPIN
\ 00000388 REQUIRE _A_IOSET
\ 00000388 REQUIRE _A_IOCLR
\ 00000388 REQUIRE _A_S0SPSR
\ 00000388 REQUIRE _A_S0SPDR
\ 00000388 REQUIRE _A_T0IR
\ 00000388 REQUIRE T0MR0
\ 00000388 REQUIRE _A_EXTINT


Цитата(zltigo @ May 22 2009, 16:58) *
Листиг не читал, с проблемой не разбирался, но не по делу - случайно зацепился взглядом за обилие неестесвенных 8 и 16 бит переменных. Надо изживать в себе восьмибитовики и использовать в большинстве случаев портируемые типы (хоть свои, хоть С99 ) переменных со смыслом "не менее 8bit", не "менее 16bit"

Прога переносилась с 8-ми битника. И там всё это было естественно. Тем не менее написано было так, чтобы одна операция обслуживала несколько точек. В связи с этим ожидаемый перенос ядра на 32 бита должен дать увеличение производительности именно за счёт увеличения разрядности. В голове я сделал необходимые изменения в переменных. Уже выровнял всё.

В прерывании по "картинке", пока не начинал, так как придётся вместе с изменениями разрядности менять также базовые процедуры работы с точками. Всё это будет сделано.

Тем не менее принципиально работать должно со всеми типами. Всё сделано в рамках стандарта.
Причина редактирования: Уменьшение видимого размера цитаты исходника.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SasaVitebsk   FIQ/IRQ   May 22 2009, 08:15
- - Andy Mozzhevilov   Крайне мутное описание и куча "инженерных...   May 22 2009, 11:18
- - SasaVitebsk   У меня идут быстрые FIQ прерывания. С каждым 24 (в...   May 22 2009, 11:30
- - Andy Mozzhevilov   И что конкретно не работает? Какое время у вас вып...   May 22 2009, 11:59
- - GetSmart   Цитата(SasaVitebsk @ May 22 2009, 13:15) ...   May 22 2009, 12:14
|- - SasaVitebsk   Цитата(GetSmart @ May 22 2009, 15:14) В п...   May 22 2009, 12:29
- - GetSmart   Может долго сидит в совтовом прерывании потому, чт...   May 22 2009, 12:38
- - SasaVitebsk   Оставил в прерывании следующее: Код__arm __irq st...   May 22 2009, 12:40
- - GetSmart   Цитата(SasaVitebsk @ May 22 2009, 13:15) ...   May 22 2009, 12:52
- - SasaVitebsk   __nested я не ставил. Других IRQ нет. Они все равн...   May 22 2009, 12:54
- - GetSmart   Ну вот кусок для инициализации стеков. CODE MODUL...   May 22 2009, 13:10
- - SasaVitebsk   CODE 1373 //__arm __nested __irq static void ...   May 22 2009, 13:50
|- - zltigo   Цитата(SasaVitebsk @ May 22 2009, 16:50) ...   May 22 2009, 13:58
|- - GetSmart   Цитата(SasaVitebsk @ May 22 2009, 18:50) ...   May 22 2009, 14:46
|- - zltigo   Цитата(SasaVitebsk @ May 22 2009, 17:16) ...   May 22 2009, 14:29
- - SasaVitebsk   Вот cstartup подключённый к проекту   May 22 2009, 13:53
- - SasaVitebsk   1) Совтовый флаг нормально устанавливается и сбрас...   May 22 2009, 16:34
- - GetSmart   Что за сигналы жёлтый и синий? Почему у жёлтого р...   May 22 2009, 16:54
- - Rst7   Если я правильно понял осциллограмы, запрос FIQ не...   May 22 2009, 17:11
|- - SasaVitebsk   Цитата(Rst7 @ May 22 2009, 20:11) Если я ...   May 22 2009, 17:29
|- - SasaVitebsk   Цитата(Rst7 @ May 22 2009, 20:11) Если я ...   May 22 2009, 17:42
- - SasaVitebsk   Жёлтый это FIQ. Только сигнал не тестовый а реальн...   May 22 2009, 17:12
|- - GetSmart   Цитата(SasaVitebsk @ May 22 2009, 22:12) ...   May 22 2009, 17:25
- - Rst7   С трудом понимаю Вас. Давайте, наверное, сделайте ...   May 22 2009, 17:38
- - Rst7   ЦитатаНо почему????? Ответ на этот вопрос можно д...   May 22 2009, 17:56
|- - SasaVitebsk   Цитата(Rst7 @ May 22 2009, 20:56) Я знал ...   May 22 2009, 18:30
- - Rst7   Понятно что ничего не понятно. По отдельностям вро...   May 22 2009, 19:20
- - SasaVitebsk   Собрал минимальный проект, готовый к отправке. Пра...   May 22 2009, 19:51
- - SasaVitebsk   Видимо уже совсем мозги не соображают. Глаз замыли...   May 22 2009, 22:02
- - SasaVitebsk   PS: Всё разобрался. Действительно ночью переклинил...   May 23 2009, 05:55
- - GetSmart   А чего было то?   May 23 2009, 10:18
- - zltigo   Moderator: Темы разделил. http://electronix.ru/for...   May 26 2009, 09:16


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

 


RSS Текстовая версия Сейчас: 1st August 2025 - 20:45
Рейтинг@Mail.ru


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