alx2 0 14 ноября, 2012 Опубликовано 14 ноября, 2012 · Жалоба ему надо опрашивать ацп со скоростью 100KS/s т.е. каждые 10 мкс программно через таймеры или delayed work это не получится т.к. слишком часто Опросы с нужной скоростью может обеспечить контроллер SPI. Если размер сэмпла, допустим, 16 бит, то установив скорость шины SPI 1600 кбит/с, автоматически получим скорость опроса 100 kS/s. Насколько я понял, проблема в том, что не допускается появление джиттера. А это IMHO скорее железо-специфичная чем linux-специфичная проблема. vshemm об этом уже все сказал. Если требуется за 10 мкс "вручную" по прерыванию перезаряжать DMA, то напрашивается мысль о реализации своего SPI-контроллера со встроенной буферизацией на ПЛИС... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dubov 0 14 ноября, 2012 Опубликовано 14 ноября, 2012 (изменено) · Жалоба Простейший способ "в лоб" - это 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? неужели то что мне надо... Изменено 14 ноября, 2012 пользователем Dubov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 14 ноября, 2012 Опубликовано 14 ноября, 2012 · Жалоба А вот и нет. Без Linux в standalone всё делается просто и быстро. Из изерспейс просто нельзя так быстро дёргать SPI. Из юерспейс можно, например, неспешно опрашивать датчик температуры. Тут дело не в юзерспейс, из ядра (kernel space) тоже нельзя так быстро дёргать программно. Просто в ядре можно настроить dma на приём. Прошу посмотреть намётаным глазом статью: http://habrahabr.ru/post/123266/ там в разделе "4.Разработка протокольного SPI драйвера уровня ядра" упоминается DMA. Никак не могу понять. Они применяют какой-то DMA API? неужели то что мне надо... нет, там описана разравботка драйвера устройства, подключённого к spi слейвом этот драйвер использует драйвер мастера через стандартный набор функций я не думаю, что вы найдёте похожий пример т.к. то, что вам надо к линуксовой подсистеме spi отношения не имеет посмотрите в вашем драйвере spi omap работу с регистрами и dma (если используется) - а дальше сами Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dubov 0 14 ноября, 2012 Опубликовано 14 ноября, 2012 (изменено) · Жалоба посмотрите в вашем драйвере spi omap работу с регистрами и dma (если используется) гдеж эти примеры взять :crying: яж толкьо с SAM9 работал Изменено 14 ноября, 2012 пользователем Dubov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dubov 0 14 ноября, 2012 Опубликовано 14 ноября, 2012 · Жалоба Господа! Вопрос на засыпку: если 100кГц частота дискретизации АЦП для Linux - слишком быстро, то как понять такое: http://wiki.analog.com/resources/tools-sof.../iio-adc/ad7998 как они собираются успевать данные забирать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 14 ноября, 2012 Опубликовано 14 ноября, 2012 · Жалоба гдеж эти примеры взять :crying: а вы дайте ссылку на исходники драйвера вашего spi мастера, я думаю народ подскажет какие макросы там используются для чтения-записи регистров и где лежат определения регистров Господа! Вопрос на засыпку: если 100кГц частота дискретизации АЦП для Linux - слишком быстро, то как понять такое: http://wiki.analog.com/resources/tools-sof.../iio-adc/ad7998 как они собираются успевать данные забирать? я так понят тут вот чего - есть т.н. software triggers и hardware triggers последние(timer counter или внешний источник) вызывают прерывания с нужной частотой и успеть можно частота софтовых триггеров ограничена Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vshemm 0 14 ноября, 2012 Опубликовано 14 ноября, 2012 · Жалоба так я и хотел делать! как работать с DMA на OMAP?! Ищу примеры, а пока курю даташит, но это путь через пустыню... Совершенно нормальный путь :) А вот и нет. Без Linux в standalone всё делается просто и быстро. Из изерспейс просто нельзя так быстро дёргать SPI. Из юерспейс можно, например, неспешно опрашивать датчик температуры. Дергать SPI не надо, нужно запускать DMA как уже сказал Idle. Господа! Вопрос на засыпку: если 100кГц частота дискретизации АЦП для Linux - слишком быстро, то как понять такое: ... 100КГц быстро не для линукса, а для железа, если данные читать процессором ("дергать SPI"). Если же есть нормальный DMA, то тот же linux держит десятки и сотни МГц через iio или comedi. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zelepuk 0 15 ноября, 2012 Опубликовано 15 ноября, 2012 (изменено) · Жалоба 100КГц быстро не для линукса, а для железа, если данные читать процессором ("дергать SPI"). Если же есть нормальный DMA, то тот же linux держит десятки и сотни МГц через iio или comedi. как он может тянуть сотни мегагерц, если через IIO я запускал родной драйвер от AnalogDevices и при частоте 100кГц загрузка процессора была более 50%. А ещё они зачем-то software trigger придумали (дураки чтоли?), который, например, при обновлении экрана файлового менеджера MC просто переставал генерить меандр. Ну и нафиг тако тригер нужен спрашивается? Железный другое дело, но всё равно прерывания 100 000 раз в секунду - слишком много для Linux. Для AT91 был вариант без прерываний (на двух таймерах) на DMA - другое дело. Изменено 15 ноября, 2012 пользователем Zelepuk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 16 ноября, 2012 Опубликовано 16 ноября, 2012 · Жалоба Неужели сложно сделать grep dma -R ./drivers/spi/ ? Посмотрите, как другие драйвера SPI используют стандартный API DMA и сделайте так же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться