Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

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

User Info


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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
драйвер, чтение оп внешнему прерыванию.
Dub
Добавлено 03.07.2012 14:26
0
Сообщение: 1
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
К SAM9XE512 подключен внешний измеритель по SPI. От измерителя, так же идёт сигнал аппаратного прерывания. Нужно в драйвере забирать данные, записывая их в буфер , причём измеритль является мастером на шине.
Когда прерывание сработает, нужно выдавать данные наружу в userspace. А userspace application уже будет писать данные в файл.
Как написать такое с нуля? возможно, где-то есть примеры?

Я смотрел в сторону IIO-драйвера на примере ADE7758(из коробки), там для заполнения буфера используется триггер. Как это понять? Что есть триггер в контексте IIO?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 03.07.2012 16:15 Сообщение: 2
sasamy
4.70

Пункты: 76990
Регистрация: 14.08.2009
Цитата

SPI ... причём измеритль является мастером на шине.


Тут все с "нуля" писать придется - включая работу с spi - Linux только мастером из коробки работает.
Спуститься к концу Подняться к началу
Персональная информация
Dub
Добавлено 03.07.2012 16:58 Редактировалось 03.07.2012 17:29 Сообщение: 3
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
Да, SPI slave под Linux нигде не описан((

более подробно опишу задачу:
Измеритель соединём с хостом через I2C, SPI, и линию прерывания.
каждые 0.2 секунды нужно считывать по I2C регистры из внешнего устройства(измеритель), и записывать в файл, как только приходит сигнал прерывания нужно через драйвер считать данные из буфера драйвера SPI, куда данные записываются непрерывно каждые 125 микросекунд.

Так вот обработку прерывания и запросы по I2C я хочу сделать в userspace (разумеется обращаясь к I2C через драйвер, а вот прерывание обрабатывать как простой сигнал GPIO(кнопка)).
А вот буфер, принимаемых данных по SPI сделать в драйвере (125мкс - слишком быстро для userspace).
Такое сработает?
и как реализовать такой буфер, запись в который осуществляестя на уровне ядра, а чтение из userspace? буфер должен быть циклический
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 03.07.2012 17:36 Редактировалось 03.07.2012 18:16 Сообщение: 4
sasamy
4.70

Пункты: 76990
Регистрация: 14.08.2009
Цитата

Нашёл статейку занятную именно по реализации "ведомого":


там про обычные средства Linux статья, еше раз повторю - нет в Linux из коробки slave-режима, все с нуля придется писать, либо вы просто неподумавши написали про мастера у измерителя и он на самом деле обычный slave.
Спуститься к концу Подняться к началу
Персональная информация
Franky
Добавлено 03.07.2012 18:47 Сообщение: 5
Franky
5

Пункты: 5030
Регистрация: 29.06.2010
Цитата
Цитата

Нашёл статейку занятную именно по реализации "ведомого":


там про обычные средства Linux статья, еше раз повторю - нет в Linux из коробки slave-режима, все с нуля придется писать, либо вы просто неподумавши написали про мастера у измерителя и он на самом деле обычный slave.


спасибо, но там действительно мастер в устройтсве. Ладно, на счёт SPI вопросы закрыт.
А как реализуется буфер? Чтобы читать его из пространства ядра в пространство пользователя? не поможете советом или ссылкой на полезную статью.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 03.07.2012 19:21 Редактировалось 03.07.2012 19:24 Сообщение: 6
sasamy
4.70

Пункты: 76990
Регистрация: 14.08.2009
Цитата

А как реализуется буфер? Чтобы читать его из пространства ядра в пространство пользователя?


помоему про copy_to_user/copy_from_user в любой статье про драйверы Linux написано...
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux