Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

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

User Info


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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Embedded Linux
handler для gpio1_io11
sergzaytsev
Добавлено 06.09.2016 00:11
0
Сообщение: 1
sergzaytsev
0

Пункты: 3694
Регистрация: 19.07.2016
Доброго времени суток, уважаемые коллеги.
Изделие SK-iMX6S-SODIMM, настроил в dts модуль ecspi2 следующим образом:
&ecspi2 {
fsl,spi-num-chipselects = <1>;
cs-gpios = <&gpio2 26 0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi2_sodimm>;
status = "okay";
spidev: spidev@0 {
compatible = "linux,spidev";
reg = <0>;
interrupt-parent = <&gpio1>;
interrupts = <11 0x2>;
spi-max-frequency = <1000000>;
};
};
После пересборки ядра (3.14) и загрузки его в контроллер появилось устройство /dev/spidev1.0. LOOP тест (когда MOSI соединен с MISO) выполняется нормально - spi_transfer работает отлично.
Запись "interrupts = <11 0x2>;" говорит о том, что настроено прерывание по каналу GPIO1_IO11, работающее по спаду сигнала. Я буду подключать к ecspi2 АЦП AD7730, который выдает сигнал готовности данных аналого-цифрового преобразования. Как только этот сигнал падает - значит новые данные в АЦП готовы и их нужно забрать по SPI. Уважаемые коллеги, подскажите плз, как мне определить, что прерывание пришло и я могу забирать из АЦП данные? Мне просто нужно забрать данные из АЦП и положить их в буфер для последующей обработки. Поллингом заниматься очень не хотелось бы - накладно очень. Очень буду благодарен.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 06.09.2016 10:29 Редактировалось 06.09.2016 10:32 Сообщение: 2
sasamy
4.71

Пункты: 83552
Регистрация: 14.08.2009
Посмотрите тут

https://yurovsky.github.io/2014/10/10/linux-uio-gpio-interrupt/

но это не очень хороший подход, лучше тут посмотреть

https://sourceforge.net/p/armadeus/mailman/message/31852958/

там реализовано блокирующее чтение - процесс в юзерспейс просто "уснет" если нет данных и проснется когда данные будут прочитаны. Но это тоже костыль - нестандартный драйвер - лучше если бы сделали драйвер для стандартной подсистемы, например IIO

https://www.kernel.org/doc/htmldocs/iio/index.html
Спуститься к концу Подняться к началу
Персональная информация
sergzaytsev
Добавлено 06.09.2016 13:31 Сообщение: 3
sergzaytsev
0

Пункты: 3694
Регистрация: 19.07.2016
sasamy добрый день. Правильно ли я Вас понял, что нужно писать линуксовый драйвер для AD7730?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 06.09.2016 17:51 Сообщение: 4
sasamy
4.71

Пункты: 83552
Регистрация: 14.08.2009
По первой ссылке ответ на ваш непосредственный вопрос - как использовать прерывания от GPIO в юзерспейс, по второй приаттачен готовый драйвер для ad7730

https://sourceforge.net/p/armadeus/mailman/attachment/52D7D985.3010402%40induct.be/1/

https://sourceforge.net/p/armadeus/mailman/attachment/52D7D985.3010402%40induct.be/2/

Если вас не устраивают эти два примера - напишите свой драйвер, но я думаю вам это не нужно.
Спуститься к концу Подняться к началу
Персональная информация
sergzaytsev
Добавлено 07.09.2016 17:10 Сообщение: 5
sergzaytsev
0

Пункты: 3694
Регистрация: 19.07.2016
sasamy спасибо. Я посмотрю исходники и буду устанавливать этот драйвер. Мне нужно будет корректировать DTS? Как в этом случае будет выглядеть свойство compatible?
compatible = "AnalogDevice, AD7730"; - так?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 07.09.2016 18:09 Сообщение: 6
sasamy
4.71

Пункты: 83552
Регистрация: 14.08.2009
В драйвере без вендора прописано

static const struct of_device_id ad7730_dt_ids[] = {
{ .compatible = "ad7730" },
{},
};

пропишите как в драйвере
Спуститься к концу Подняться к началу
Персональная информация
sergzaytsev
Добавлено 08.09.2016 17:40 Сообщение: 7
sergzaytsev
0

Пункты: 3694
Регистрация: 19.07.2016
sasamy добрый день, подскажите плз где почитать про компиляцию и установку драйверов устройств (речь конечно идет о драйвере AD7730), я совсем новичок в этом вопросе.... спасибо.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 09.09.2016 10:00 Редактировалось 09.09.2016 10:47 Сообщение: 8
sasamy
4.71

Пункты: 83552
Регистрация: 14.08.2009
Интегрируйте прямо в исходники ядра - возьмите любой простой драйвер для примера (например в директори output/build/linux-custom/drivers/misc) и по аналогии допишите Kconfig и Makefile. Если надо почитать - тут посмотрите

https://www.kernel.org/doc/Documentation/kbuild/
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux