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

 
 
> Частота прерываний под Linux'ом, реально достижимая
Alexashka
сообщение Jul 27 2012, 11:01
Сообщение #1


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Господа-товарищи программисты, если у кого опыт, поделитесь пожалуйста sm.gif с какой максимальной частотой реально можно обрабатывать прерывания под Линухом? Скажем частота 100кГц. Это много? Процессор AT91SAM9G45, тактовая 400МГц, память DDR2 (платка SK-AT91SAM9G45SK-AT91SAM9G45 от Starterkita)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
TigerSHARC
сообщение Aug 11 2012, 12:43
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Господа, я надеюсь действующая полемика не относится к kernel space. Мне нужно писать драйвер АЦП и обрабатывать аппаратные прерывания с частотой в 100кГц. Но всё это на уровне ядра (в модуле ядра).
Думаю такое возможно, а иначе как работают действующие драйверы АЦП?
Тогда возникает вопрос для ТС: почему бы обработку прерываний не вынести в модуль ядра?

P.S. Возможно я чего-то не понимаю.
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Aug 11 2012, 23:13
Сообщение #3


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Цитата(TigerSHARC @ Aug 11 2012, 16:43) *
Господа, я надеюсь действующая полемика не относится к kernel space. Мне нужно писать драйвер АЦП и обрабатывать аппаратные прерывания с частотой в 100кГц. Но всё это на уровне ядра (в модуле ядра).
Думаю такое возможно, а иначе как работают действующие драйверы АЦП?
Тогда возникает вопрос для ТС: почему бы обработку прерываний не вынести в модуль ядра?

P.S. Возможно я чего-то не понимаю.

Если Вы про платы сбора данных типа NI то скорей всего там с АЦП работает ПЛИСина, которая является также буфером, тогда требования для процессора и ОС в основном касаются пропускной способности шины, задержки на реакцию уже не так важны.
То что касается Вашего вопроса ко мне, то тут все проще -никаких ядер у меня нет и ничего встраивать не нужно. Все обрабатывается обычным прерыванием, даже не стал заморачиваться с FIQ. Быстродействия хватает с лихвой. Я не понимаю почему нельзя сделать простой обработчик прерываний в ОС, который бы работал так как и задумано для прерывания- прерывал текущую задачу, отрабатывал и потом возвращался к прерванной задаче с минимальными издержками.
Я думаю Вам однозначно надо предусмотреть буфер на PLD или какомто малоногом контроллере, который будет заниматься лишь сбором данных с АЦП. Обмен между процами можно сделать по SDIO через DMA. Это у меня был как один из запасных вариантов.
Либо еще вариант -настроить проц на считывание АЦП через ДМА, используя 2 канала ДМА в режиме качелей. Но тут надо досконально знать железо и его особенности.
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Aug 12 2012, 07:03
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(Alexashka @ Aug 12 2012, 03:13) *
Если Вы про платы сбора данных типа NI то скорей всего там с АЦП работает ПЛИСина, которая является также буфером, тогда требования для процессора и ОС в основном касаются пропускной способности шины, задержки на реакцию уже не так важны.
То что касается Вашего вопроса ко мне, то тут все проще -никаких ядер у меня нет и ничего встраивать не нужно. Все обрабатывается обычным прерыванием, даже не стал заморачиваться с FIQ. Быстродействия хватает с лихвой. Я не понимаю почему нельзя сделать простой обработчик прерываний в ОС, который бы работал так как и задумано для прерывания- прерывал текущую задачу, отрабатывал и потом возвращался к прерванной задаче с минимальными издержками.
Я думаю Вам однозначно надо предусмотреть буфер на PLD или какомто малоногом контроллере, который будет заниматься лишь сбором данных с АЦП. Обмен между процами можно сделать по SDIO через DMA. Это у меня был как один из запасных вариантов.
Либо еще вариант -настроить проц на считывание АЦП через ДМА, используя 2 канала ДМА в режиме качелей. Но тут надо досконально знать железо и его особенности.

Зачем буфер на PLD? если можно кольцевой буфер сделать в самом драйвере. В драйвере же считывать через DMA по SPI данные с АЦП.
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Aug 12 2012, 18:44
Сообщение #5


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Цитата(TigerSHARC @ Aug 12 2012, 11:03) *
Зачем буфер на PLD? если можно кольцевой буфер сделать в самом драйвере. В драйвере же считывать через DMA по SPI данные с АЦП.

а что за проц? и сколько Msample/s нужно захватывать?
Я всетаки считаю лучше уж иметь аппаратный буфер, а там пусть какая угодно операционка и стандартные драйвера...но очень интересно что у Вас с этим получится.
Go to the top of the page
 
+Quote Post
Dubov
сообщение Aug 13 2012, 04:59
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052



По-моему тоже можно непарится насчёт буфера и делать его в драйвере, если только частота невокая, порядка сотен килогерц

Сообщение отредактировал Dubov - Aug 13 2012, 06:51
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 13 2012, 07:27
Сообщение #7


Гуру
******

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



Цитата(Dubov @ Aug 13 2012, 08:59) *
По-моему тоже можно непарится насчёт буфера и делать его в драйвере, если только частота невокая, порядка сотен килогерц

Сотни кГц? Я бы очень сильно напрягся, если бы приходилось дергать систему с частотой 10кГц, а уж о сотнях не стал бы и думать - это просто похоронить производительность на оверхеде от прерываний.
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Aug 13 2012, 19:36
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(aaarrr @ Aug 13 2012, 10:27) *
Сотни кГц? Я бы очень сильно напрягся, если бы приходилось дергать систему с частотой 10кГц, а уж о сотнях не стал бы и думать - это просто похоронить производительность на оверхеде от прерываний.

можно по-подробнее?
Просто в исходниках ядра полно драйверов различных АЦП. И разработчики из технической поддержки AD охотно давали советы, когда я спрашивал про тактирование и приём данных от АЦП.
А вы говорите что такое невозможно...

P.S. Платформа AT91SAM9G20

Сообщение отредактировал TigerSHARC - Aug 13 2012, 19:42
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Aug 13 2012, 22:46
Сообщение #9


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Цитата(TigerSHARC @ Aug 13 2012, 23:36) *
Просто в исходниках ядра полно драйверов различных АЦП.

А можно поинтересоваться что за ядро такое? Его можно где скачать-посмотреть?
Кстати, может там и не программно прерывание обрабатывается, а скажем запускает ДМА передачу. Хотя ДМА тоже надо перенастраивать и тут выходит опять-таки надо обрабатывать прерывание уже от ДМА. 05.gif
Go to the top of the page
 
+Quote Post
sasamy
сообщение Aug 16 2012, 18:31
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(Alexashka @ Aug 14 2012, 02:46) *
А можно поинтересоваться что за ядро такое? Его можно где скачать-посмотреть?
Кстати, может там и не программно прерывание обрабатывается, а скажем запускает ДМА передачу. Хотя ДМА тоже надо перенастраивать и тут выходит опять-таки надо обрабатывать прерывание уже от ДМА. 05.gif


делаете пару буферов для 1000 сэмплов и прерываний нужно уже не 100к а 100, при этом можно уже не думать ни о какой латентности - пока DMA следующий буфер заполняет времени хватит выше крыши.
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Aug 17 2012, 05:52
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(sasamy @ Aug 16 2012, 21:31) *
делаете пару буферов для 1000 сэмплов и прерываний нужно уже не 100к а 100, при этом можно уже не думать ни о какой латентности - пока DMA следующий буфер заполняет времени хватит выше крыши.

прерывание, на уровне ядра, всё равно же отробатывается, когда данные готовы от АЦП, что зависит от частоты дискретизации АЦП, например для 100кГц, нужно 100к прерываний в секунду (а иначе как забирать данные?). В прерывании на уровне ядра: заполняем буфер по указателю через DMA и инкрементируем указатель.

А уже медленное пользовательское приложение забирает данные из БОЛЬШОГО буфера ядра.

Так ведь? прерывания всё равно нужно отработать быстро.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Aug 17 2012, 06:29
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(TigerSHARC @ Aug 17 2012, 09:52) *
прерывание, на уровне ядра, всё равно же отробатывается, когда данные готовы от АЦП, что зависит от частоты дискретизации АЦП, например для 100кГц,


ну это вы так решили что busy нужно как источник прерывания использовать sm.gif

Цитата
нужно 100к прерываний в секунду (а иначе как забирать данные?).


вы же не для ванильного ядра фреймворк делаете как AD для все своей продукции - так что в реализации не стеснены. Например берем процессор atmel и ацп ad7606. Берем вариант Timing Diagrams - Figure 2. CONVST Timing—Reading After a Conversion (Rev. C | Page 9 of 36). У atmel есть 6 таймеров - вам надо всего 2 чтобы сформировать времянки аппаратно - один для CONVST A,CONVST B, второй для клока spi. Переводите spi atmel в slave, busy заводите на CS ad7606 и NSS atmel, его же на внешний триггер таймеров - чтобы засинхронизировать спадающим фронтом busy счетчики таймеров т.к. tCONV "плавает". Нужно вам 128 клоков второго таймера на период первого (если рассматривать 8 канальный вариант ацп, или 64 чтобы по-быстрей считать с 2 выходов параллельно - тогда второй spi у atmel включить) - в итоге процессор нужно дергать только когда PDC буфер заполнит, при этом данные будут продолжать приниматься в следующий буфер - у PDC два указателя
Цитата
If the value of next counter is zero, the channel stops transferring data and sets the
appropriate flag. But if the next counter value is greater then zero, the values of the next
pointer/next counter are copied into the current pointer/current counter and the channel resumes
the transfer whereas next pointer/next counter get zero/zero as values

т.о. вам нужно будет в прерывании по заполнению буфера корректировать Receive Next Pointer Register & Receive Next Counter Register чтобы процесс был циклическим и никогда не прерывался.

PS можно еще четче сделать - на busy вообще забить, а CS управлять каналом B первого таймера - отсчитывать им (t1max + tCONVmax) и выдать CS active, его спадающий фронт использоватьв качестве триггера второго таймера который формирует клок для spi, соответсвенно нужное количество клоков spi уложить во время CS active - тогда количество сэмплов в секунду будет строго фиксированным.

Сообщение отредактировал sasamy - Aug 17 2012, 09:39
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alexashka   Частота прерываний под Linux'ом   Jul 27 2012, 11:01
- - Lyubimov   Зависит от времени переключения контекста. Можете ...   Jul 31 2012, 12:49
|- - Alexashka   Цитата(Lyubimov @ Jul 31 2012, 16:49) А в...   Jul 31 2012, 13:48
|- - skyv   Цитата(Alexashka @ Jul 31 2012, 16:48) Во...   Aug 1 2012, 10:24
||- - Alexashka   Цитата(skyv @ Aug 1 2012, 14:24) Интересн...   Aug 1 2012, 14:12
||- - aaarrr   Цитата(Alexashka @ Aug 1 2012, 18:12) Вот...   Aug 1 2012, 14:33
|||- - Alexashka   Цитата(aaarrr @ Aug 1 2012, 18:33) Тактов...   Aug 1 2012, 23:05
||- - rudy_b   Цитата(Ruslan1 @ Aug 1 2012, 15:55) Укажи...   Aug 2 2012, 01:23
||- - demiurg_spb   2ТС: А вы RT-path накладывали при сборке Linux...   Aug 2 2012, 06:14
|- - rudy_b   Цитата(Alexashka @ Jul 31 2012, 16:48) .....   Aug 1 2012, 12:38
|- - Ruslan1   Цитата(rudy_b @ Aug 1 2012, 15:38) Ага, и...   Aug 1 2012, 12:55
|- - _Артём_   Цитата(rudy_b @ Aug 1 2012, 15:38) Если п...   Aug 1 2012, 13:03
- - Alexashka   Померял: 10 NOP'ов из внутренней SRAM выполняю...   Aug 3 2012, 12:14
|- - aaarrr   Цитата(Alexashka @ Aug 3 2012, 16:14) Пом...   Aug 3 2012, 12:40
||- - Alexashka   Цитата(aaarrr @ Aug 3 2012, 16:40) Естест...   Aug 6 2012, 19:29
||- - aaarrr   Цитата(Alexashka @ Aug 6 2012, 23:29) Мне...   Aug 6 2012, 20:52
|- - _Pasha   Цитата(Alexashka @ Aug 3 2012, 15:14) 10 ...   Aug 3 2012, 14:16
|- - aaarrr   Цитата(_Pasha @ Aug 3 2012, 18:16) Надо б...   Aug 3 2012, 14:42
- - Alexashka   Нашел интересную ссылочку, может кому пригодится.....   Aug 8 2012, 18:32
|- - rudy_b   Ага, это весьма похоже на правду. Т.е. задержка от...   Aug 9 2012, 12:58
|- - demiurg_spb   Ну почему-же? Вполне себе реалтайм, просто кому-то...   Aug 9 2012, 13:37
|- - Ruslan1   Извиняюсь, но мне кажется, что иногда (по моим наб...   Aug 9 2012, 19:04
|- - rudy_b   С одной стороны - так, с другой - не так. Ежели уж...   Aug 10 2012, 19:08
|- - R.A.K.   Цитата(rudy_b @ Aug 10 2012, 23:08) С одн...   Aug 10 2012, 19:46
|- - rudy_b   Цитата(R.A.K. @ Aug 10 2012, 22:46) ...Ре...   Aug 10 2012, 20:58
|- - R.A.K.   Цитата(rudy_b @ Aug 11 2012, 00:58) Да и ...   Aug 10 2012, 21:23
|- - rudy_b   Цитата(R.A.K. @ Aug 11 2012, 00:23) Так о...   Aug 11 2012, 14:25
- - jks   Разница между мягким и жестким реалтаймом не в джи...   Aug 11 2012, 12:33
|- - aaarrr   Цитата(TigerSHARC @ Aug 13 2012, 23:36) м...   Aug 13 2012, 19:45
- - TigerSHARC   Скачайте ванильное ядро Linux. Папка /drivers/stag...   Aug 14 2012, 05:50
|- - Alexashka   Цитата(TigerSHARC @ Aug 14 2012, 09:50) С...   Aug 15 2012, 19:35
- - TigerSHARC   Ничем не отличаются, те же самые прерывания. А гд...   Aug 16 2012, 07:29
|- - Alexashka   Цитата(TigerSHARC @ Aug 16 2012, 11:29) В...   Aug 16 2012, 15:45
- - TigerSHARC   Посмотрите вот этот аппарат: uake.ru Работает по L...   Aug 16 2012, 17:35
- - TigerSHARC   to sasamy: Интересный подход. Но если инженеры AD ...   Aug 17 2012, 13:03
|- - sasamy   Цитата(TigerSHARC @ Aug 17 2012, 17:03) 1...   Aug 17 2012, 13:34
|- - Alexashka   Цитата(sasamy @ Aug 17 2012, 17:34) 2) да...   Aug 17 2012, 14:16
|- - sasamy   Цитата(Alexashka @ Aug 17 2012, 18:16) Ту...   Aug 17 2012, 15:27
|- - Alexashka   Цитата(sasamy @ Aug 17 2012, 19:27) Делае...   Aug 17 2012, 19:20
|- - sasamy   Цитата(Alexashka @ Aug 17 2012, 23:20) Т....   Aug 17 2012, 21:01
- - TigerSHARC   sasamy предложил красивое решение, но если взять п...   Aug 17 2012, 20:18
- - TigerSHARC   Получается PDC настраивается один раз во время ини...   Aug 18 2012, 06:06
- - sasamy   Цитата(TigerSHARC @ Aug 18 2012, 10:06) B...   Aug 19 2012, 21:34


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

 


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


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