Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Отладочные платы » SK-iMX53-XC6SLX
Прерывание от таймера(надо сделать)
und6819
Добавлено 17.06.2016 15:23 Редактировалось 17.06.2016 15:25
0
Сообщение: 1
und6819
1

Пункты: 975
Регистрация: 09.02.2012
Нужно прерывание(програмное) каждые 25 микросекунд. По поисковикам полазил - ничего быстро не нашел.
Коллеги может подскажете в какую сторону смотреть чтобы побыстрее проект запустить
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 17.06.2016 16:11 Редактировалось 17.06.2016 16:18 Сообщение: 2
sasamy
4.70

Пункты: 76899
Регистрация: 14.08.2009
Цитата

Нужно прерывание(програмное) каждые 25 микросекунд.


на Linux это нереально - вам нужна RTOS или специализированное решение типа Xenomai хотя даже он например на at91 имеет большую латентность чем 25 микросекунд

http://www.at91.com/linux4sam/bin/view/Linux4SAM/RealTime#Xenomai

Для чего вам такие частые прерывания ?
Спуститься к концу Подняться к началу
Персональная информация
und6819
Добавлено 17.06.2016 16:47 Сообщение: 3
und6819
1

Пункты: 975
Регистрация: 09.02.2012
Цитата


Для чего вам такие частые прерывания ?

В проекте надо читать данные из FPGA(там свой проект их нужным методом обрабатывает) и их еще раз обрабатывать.
С частотой хорошо промахнулся - надо 25 миллисекунд.
Возможно некоторая латентность - данные в FPGA копятся в 2 буферах и обработка одного занимает меньше времени чем наполнение другого.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 17.06.2016 22:02 Редактировалось 17.06.2016 22:07 Сообщение: 4
sasamy
4.70

Пункты: 76899
Регистрация: 14.08.2009
Цитата

В проекте надо читать данные из FPGA(там свой проект их нужным методом обрабатывает) и их еще раз обрабатывать.


зачем вам тогда прерывания таймера ? обычная практика - устройство (FPGA в данном случае) генерирует прерывание когда данные готовы и продолжает писать в свободный буфер, хост-прцессор в обработчике считывает готовый буфер и так по кругу. Ели буферы достаточного разера то латентность прерываний ОС хост-процессора практически не имеет значения. Для прерываний от FPGA можно использовать любой свободный GPIO.
Спуститься к концу Подняться к началу
Персональная информация
und6819
Добавлено 17.06.2016 23:31 Редактировалось 17.06.2016 23:34 Сообщение: 5
und6819
1

Пункты: 975
Регистрация: 09.02.2012
Все уже работало на другой плате AT91SAM9260. Надо преползти на эту плату с минимум переделок. Есть надежда что эта плата потянет(по ресурсам процессора) нужный объем вычислений.
Структура была такая:
- FPGA забирал данные и пихал их по очереди в два буфера и выставлял флаг готовности нужного буфера
- драйвер (файл *.ko) по таймеру смотрел на флаг готовности буфера в FPGA и переносли их в свое адресное пространство в кольцевой буфер.
- программа на С читала их(по read) и обрабатывала
Изменения должны быть минимальны. Не весь исходный код доступен.
Проект на FPGA поправят но по минимуму(только адаптируют к новой плате). Поэтому прерывания по таймеру нужны в драйвере чтобы забирать данные из FPGA.
Да это немного не хорошо, но нет времени переделывать все по уму и самое главное - возможно что и эта плата не вытянет обработку и придется подбирать что-то другое.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 20.06.2016 10:39 Редактировалось 20.06.2016 10:48 Сообщение: 6
sasamy
4.70

Пункты: 76899
Регистрация: 14.08.2009
По сути вы прерывания от устройства заменили поллингом бита состояния со стороны хост-процессора - используйте задержки перед чтением

https://www.kernel.org/doc/Documentation/timers/timers-howto.txt

из семейства *sleep. Можно сделать отдельный поток в ядре который будет планировщик с заданной частотой запускать. Только тут надо учитывать что минимальная единицей измерения будет 10 миллисекунд (CONFIG_HZ=100 по умолчанию на арм) если нет поддержки

http://elinux.org/High_Resolution_Timers
Спуститься к концу Подняться к началу
Персональная информация
und6819
Добавлено 20.06.2016 12:01 Сообщение: 7
und6819
1

Пункты: 975
Регистрация: 09.02.2012
Спасибо за ссылки
Если я все правильно понял то прерываний от таймера на этой плате я получить не смогу?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 20.06.2016 12:05 Сообщение: 8
sasamy
4.70

Пункты: 76899
Регистрация: 14.08.2009
Цитата

прерываний от таймера на этой плате я получить не смогу?


Какого таймера ? посмотрите даташит на процессор - если найдете свободный - почему нет ? Потом на новом процессоре опять будете переписывать.
Спуститься к концу Подняться к началу
Персональная информация
und6819
Добавлено 20.06.2016 12:12 Сообщение: 9
und6819
1

Пункты: 975
Регистрация: 09.02.2012
Я не до конца понял идею. Теперь все в голове более или менее утряслось, заодно и намек на переносимость появится
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-iMX53-XC6SLX