Перейти к содержанию
    

ему надо опрашивать ацп со скоростью 100KS/s т.е. каждые 10 мкс

программно через таймеры или delayed work это не получится т.к. слишком часто

Опросы с нужной скоростью может обеспечить контроллер SPI. Если размер сэмпла, допустим, 16 бит, то установив скорость шины SPI 1600 кбит/с, автоматически получим скорость опроса 100 kS/s.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простейший способ "в лоб" - это char device, внутри которого 2 буфера, в один пишем, другой готов к чтению

из приложения через read(). При заполнении одного буфера DMA перезапускается на другой буфер. Либо "дмашить"

в кольцевой буфер.

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

 

Опросы с нужной скоростью может обеспечить контроллер 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

 

Прошу посмотреть намётаным глазом статью: http://habrahabr.ru/post/123266/

там в разделе "4.Разработка протокольного SPI драйвера уровня ядра" упоминается DMA. Никак не могу понять. Они применяют какой-то DMA API?

неужели то что мне надо...

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

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

 

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

посмотрите в вашем драйвере spi omap работу с регистрами и dma (если используется) - а дальше сами

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

посмотрите в вашем драйвере spi omap работу с регистрами и dma (если используется)

гдеж эти примеры взять :crying:

яж толкьо с SAM9 работал

Изменено пользователем Dubov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа! Вопрос на засыпку:

если 100кГц частота дискретизации АЦП для Linux - слишком быстро, то как понять такое:

http://wiki.analog.com/resources/tools-sof.../iio-adc/ad7998

как они собираются успевать данные забирать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

гдеж эти примеры взять :crying:

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

 

Господа! Вопрос на засыпку:

если 100кГц частота дискретизации АЦП для Linux - слишком быстро, то как понять такое:

http://wiki.analog.com/resources/tools-sof.../iio-adc/ad7998

как они собираются успевать данные забирать?

я так понят тут вот чего - есть т.н. software triggers и hardware triggers

последние(timer counter или внешний источник) вызывают прерывания с нужной частотой и успеть можно

частота софтовых триггеров ограничена

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Совершенно нормальный путь :)

 

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

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

 

Господа! Вопрос на засыпку:

если 100кГц частота дискретизации АЦП для Linux - слишком быстро, то как понять такое:

...

100КГц быстро не для линукса, а для железа, если данные читать процессором ("дергать SPI"). Если же есть нормальный DMA,

то тот же linux держит десятки и сотни МГц через iio или comedi.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

100КГц быстро не для линукса, а для железа, если данные читать процессором ("дергать SPI"). Если же есть нормальный DMA,

то тот же linux держит десятки и сотни МГц через iio или comedi.

как он может тянуть сотни мегагерц, если через IIO я запускал родной драйвер от AnalogDevices и при частоте 100кГц загрузка процессора была более 50%.

А ещё они зачем-то software trigger придумали (дураки чтоли?), который, например, при обновлении экрана файлового менеджера MC просто переставал генерить меандр. Ну и нафиг тако тригер нужен спрашивается?

Железный другое дело, но всё равно прерывания 100 000 раз в секунду - слишком много для Linux.

Для AT91 был вариант без прерываний (на двух таймерах) на DMA - другое дело.

 

Изменено пользователем Zelepuk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неужели сложно сделать grep dma -R ./drivers/spi/ ?

Посмотрите, как другие драйвера SPI используют стандартный API DMA и сделайте так же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...