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

 
 
> SignalISR() в Blackfin, флаг устанавливается медленно
sevstels
сообщение Feb 22 2010, 04:19
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910



Собственно трудность заключается в медленном поднятии флага при вызове функции SignalISR().
Разместил флаги в секции "l2_var", функцию SignalISR() в секции "drivers_L1_code"
Но это не помогло решить проблему.

Принимаются блок данных по SPI, после корректного приёма заголовка должен устанвливаться флаг события. Если в коде обработчика прерывания от SPI по совпадению условий вызывается SignalISR() - то такое прерывание затягивается дольше чем принимается байт данных, в итоге весь блок портится, т к следующий байт повреждён. На фотографии красный луч показывает длительность нахождения в прерывании. Самый широкий импульс как раз и есть вызов функции SignalISR().
Если закомментировать строчку с вызовом - всё приходит в норму. Но только процесс ничего не знает о событии.




На фотографии ниже показана длительнось обработки SPI прерывания без подьёма флагов, примерно 400ns.
Вопрос - как победить неувязку? Пока не удаётся разогнать SPI даже до приемлимого уровня...



--------------------
Herz - дятел.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sevstels
сообщение Feb 22 2010, 05:32
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910



Цитата
весь блок данных уже принят и уже сохранен в памяти

Всё бы хорошо... если блок данных всегда одинаковой длины.
Но используются изменяемые длины блоков, в зависимости от ситуации. Ведь нет смысла гнать 2048 байт если надо передать всего 2.
Проще ловить заголовок, где сидит команда к дальнейшим действиям, а потом уже что то делать. Верно?
Например поднять пин или в этом же пакете выгрузить данные из sdram или flash.
Про стратегию - там всё давно продумано.
Очень актуален вопрос: "как ускорить поднятие флага события". Ведь за это время можно поднять пару сотен обычных bool флагов...

-----------
пс: Вопрос к модераторам.
Почему уведомления не отсылаются о новых сообщениях?
За последние 2 года ни одного не приходило. sad.gif

-


--------------------
Herz - дятел.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Feb 22 2010, 05:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(sevstels @ Feb 22 2010, 08:32) *
Очень актуален вопрос: "как ускорить поднятие флага события".

Речь идет о макросе VDK_ISR_SET_EVENTBIT_(..) или о чем-то другом?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sevstels   SignalISR() в Blackfin   Feb 22 2010, 04:19
- - blackfin   Вы или неверно изложили суть проблемы, или выбрали...   Feb 22 2010, 05:09
- - sevstels   Речь о scmRTOS функции: void OS::TEventFlag::Signa...   Feb 22 2010, 05:45
|- - blackfin   Цитата(sevstels @ Feb 22 2010, 08:45) Реч...   Feb 22 2010, 05:48
- - sevstels   Видимо вопрос к разработчикам scmRTOS, т к в такие...   Feb 22 2010, 05:52
- - dxp   Цитата(sevstels @ Feb 22 2010, 10:19) Соб...   Feb 22 2010, 08:15
- - sevstels   ЦитатаКакая у вас тактовая частота? На какой скоро...   Feb 22 2010, 08:38
- - sevstels   Перенёс флаги в L1. Измерил. Непосредственно сама ...   Feb 22 2010, 11:00
- - blackfin   Тоже сделал замеры при вызове макросов VDK на дост...   Feb 22 2010, 12:54
- - sevstels   Всё равно - нет в жизни счастья. Звенит тактовый с...   Feb 22 2010, 13:29
|- - blackfin   Цитата(sevstels @ Feb 22 2010, 16:29) Бло...   Feb 22 2010, 13:58
- - sevstels   Нет необходимости вообще что либо делать, кроме ка...   Feb 22 2010, 14:45
- - sevstels   дел   Feb 22 2010, 14:52
- - sevstels   В общем - победил, всё идеально "летает...   Feb 23 2010, 03:40


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

 


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


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