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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Драйвер, написать самому
alx2
сообщение Nov 14 2012, 04:50
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(Idle @ Nov 13 2012, 21:14) *
ему надо опрашивать ацп со скоростью 100KS/s т.е. каждые 10 мкс
программно через таймеры или delayed work это не получится т.к. слишком часто

Опросы с нужной скоростью может обеспечить контроллер SPI. Если размер сэмпла, допустим, 16 бит, то установив скорость шины SPI 1600 кбит/с, автоматически получим скорость опроса 100 kS/s.
Насколько я понял, проблема в том, что не допускается появление джиттера. А это IMHO скорее железо-специфичная чем linux-специфичная проблема. vshemm об этом уже все сказал. Если требуется за 10 мкс "вручную" по прерыванию перезаряжать DMA, то напрашивается мысль о реализации своего SPI-контроллера со встроенной буферизацией на ПЛИС...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
Dubov
сообщение Nov 14 2012, 05:37
Сообщение #17


Местный
***

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



Цитата(vshemm @ Nov 14 2012, 00:00) *
Простейший способ "в лоб" - это char device, внутри которого 2 буфера, в один пишем, другой готов к чтению
из приложения через read(). При заполнении одного буфера DMA перезапускается на другой буфер. Либо "дмашить"
в кольцевой буфер.

так я и хотел делать! как работать с DMA на OMAP?! Ищу примеры, а пока курю даташит, но это путь через пустыню...

Цитата(alx2 @ Nov 14 2012, 08:50) *
Опросы с нужной скоростью может обеспечить контроллер SPI. Если размер сэмпла, допустим, 16 бит, то установив скорость шины SPI 1600 кбит/с, автоматически получим скорость опроса 100 kS/s.
Насколько я понял, проблема в том, что не допускается появление джиттера. А это IMHO скорее железо-специфичная чем linux-специфичная проблема. vshemm об этом уже все сказал. Если требуется за 10 мкс "вручную" по прерыванию перезаряжать DMA, то напрашивается мысль о реализации своего SPI-контроллера со встроенной буферизацией на ПЛИС...

А вот и нет. Без Linux в standalone всё делается просто и быстро. Из изерспейс просто нельзя так быстро дёргать SPI. Из юерспейс можно, например, неспешно опрашивать датчик температуры.


ГОСПОДА!
Прошу посмотреть намётаным глазом статью: http://habrahabr.ru/post/123266/
там в разделе "4.Разработка протокольного SPI драйвера уровня ядра" упоминается DMA. Никак не могу понять. Они применяют какой-то DMA API?
неужели то что мне надо...

Сообщение отредактировал Dubov - Nov 14 2012, 05:49
Go to the top of the page
 
+Quote Post
Idle
сообщение Nov 14 2012, 06:31
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(Dubov @ Nov 14 2012, 09:37) *
А вот и нет. Без Linux в standalone всё делается просто и быстро. Из изерспейс просто нельзя так быстро дёргать SPI. Из юерспейс можно, например, неспешно опрашивать датчик температуры.

Тут дело не в юзерспейс, из ядра (kernel space) тоже нельзя так быстро дёргать программно. Просто в ядре можно настроить dma на приём.


Цитата(Dubov @ Nov 14 2012, 09:37) *
Прошу посмотреть намётаным глазом статью: http://habrahabr.ru/post/123266/
там в разделе "4.Разработка протокольного SPI драйвера уровня ядра" упоминается DMA. Никак не могу понять. Они применяют какой-то DMA API?
неужели то что мне надо...

нет, там описана разравботка драйвера устройства, подключённого к spi слейвом
этот драйвер использует драйвер мастера через стандартный набор функций

я не думаю, что вы найдёте похожий пример т.к. то, что вам надо к линуксовой подсистеме spi отношения не имеет
посмотрите в вашем драйвере spi omap работу с регистрами и dma (если используется) - а дальше сами
Go to the top of the page
 
+Quote Post
Dubov
сообщение Nov 14 2012, 06:53
Сообщение #19


Местный
***

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



Цитата(Idle @ Nov 14 2012, 10:31) *
посмотрите в вашем драйвере spi omap работу с регистрами и dma (если используется)

гдеж эти примеры взять crying.gif
яж толкьо с SAM9 работал

Сообщение отредактировал Dubov - Nov 14 2012, 06:53
Go to the top of the page
 
+Quote Post
Dubov
сообщение Nov 14 2012, 11:01
Сообщение #20


Местный
***

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



Господа! Вопрос на засыпку:
если 100кГц частота дискретизации АЦП для Linux - слишком быстро, то как понять такое:
http://wiki.analog.com/resources/tools-sof.../iio-adc/ad7998
как они собираются успевать данные забирать?
Go to the top of the page
 
+Quote Post
Idle
сообщение Nov 14 2012, 12:42
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(Dubov @ Nov 14 2012, 10:53) *
гдеж эти примеры взять crying.gif

а вы дайте ссылку на исходники драйвера вашего spi мастера, я думаю народ подскажет какие макросы там используются для чтения-записи регистров и где лежат определения регистров

Цитата(Dubov @ Nov 14 2012, 15:01) *
Господа! Вопрос на засыпку:
если 100кГц частота дискретизации АЦП для Linux - слишком быстро, то как понять такое:
http://wiki.analog.com/resources/tools-sof.../iio-adc/ad7998
как они собираются успевать данные забирать?

я так понят тут вот чего - есть т.н. software triggers и hardware triggers
последние(timer counter или внешний источник) вызывают прерывания с нужной частотой и успеть можно
частота софтовых триггеров ограничена
Go to the top of the page
 
+Quote Post
vshemm
сообщение Nov 14 2012, 20:53
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 15-08-07
Пользователь №: 29 803



Цитата(Dubov @ Nov 14 2012, 09:37) *
так я и хотел делать! как работать с DMA на OMAP?! Ищу примеры, а пока курю даташит, но это путь через пустыню...

Совершенно нормальный путь sm.gif

Цитата(Dubov @ Nov 14 2012, 09:37) *
А вот и нет. Без Linux в standalone всё делается просто и быстро. Из изерспейс просто нельзя так быстро дёргать SPI. Из юерспейс можно, например, неспешно опрашивать датчик температуры.

Дергать SPI не надо, нужно запускать DMA как уже сказал Idle.

Цитата(Dubov @ Nov 14 2012, 15:01) *
Господа! Вопрос на засыпку:
если 100кГц частота дискретизации АЦП для Linux - слишком быстро, то как понять такое:
...

100КГц быстро не для линукса, а для железа, если данные читать процессором ("дергать SPI"). Если же есть нормальный DMA,
то тот же linux держит десятки и сотни МГц через iio или comedi.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 15 2012, 11:27
Сообщение #23


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(vshemm @ Nov 15 2012, 00:53) *
100КГц быстро не для линукса, а для железа, если данные читать процессором ("дергать SPI"). Если же есть нормальный DMA,
то тот же linux держит десятки и сотни МГц через iio или comedi.

как он может тянуть сотни мегагерц, если через IIO я запускал родной драйвер от AnalogDevices и при частоте 100кГц загрузка процессора была более 50%.
А ещё они зачем-то software trigger придумали (дураки чтоли?), который, например, при обновлении экрана файлового менеджера MC просто переставал генерить меандр. Ну и нафиг тако тригер нужен спрашивается?
Железный другое дело, но всё равно прерывания 100 000 раз в секунду - слишком много для Linux.
Для AT91 был вариант без прерываний (на двух таймерах) на DMA - другое дело.


Сообщение отредактировал Zelepuk - Nov 15 2012, 11:51
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Nov 16 2012, 13:53
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Неужели сложно сделать grep dma -R ./drivers/spi/ ?
Посмотрите, как другие драйвера SPI используют стандартный API DMA и сделайте так же.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post

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

 


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


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