LINUX.ORG.RU

OE Linux, драйвер, GPIO - как правильно подождать момента физической смены состояния пина?

 ,


0

2

Всем привет.

Долго рылся в интернете и здесь, но то ли гугл забанил, то ли реально инфа где-то глубоко зарыта - я так ни чего и не нашёл по своей проблеме : \

Есть свой девайс с процом OMAP 3530 (ARM V7), к одному из его GPIO пинов подключен сенсор. Сенсор запускается, почуяв уровень на своём пине.

Задача №1 - включать из драйвера сенсор, устанавливая на GPIO ножке логическую единицу. Эта задача практически выполнена, сенсор включается.

Задача №2 - сделать всё это более детерминированным, то есть после вызова gpio_set_value(...) необходимо _подождать_ когда _реально_ на GPIO пине изменится это значение, ну или точнее когда _реально_ GPIO контроллер попытается его изменить (придёт ему эта команда).

На blackfin процах юзал ssync инструкцию. А вот что в моём нынешнем случае посоветуете? Поидее всё должно быть в даташите к процессору, но каюсь - не нашёл : \

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

Deleted
()

А вот что в моём нынешнем случае посоветуете?

udelay() после gpio_set_value(), потому что любому устройству после power down требуется время для перехода в рабочее состояние, gpio изменит свое состояние намного быстрей.

anonymous
()
Ответ на: комментарий от RiseOfDeath

Повесьте прерывание. В документации это очень понятно описано.

Для этого понадобится второй GPIO который на ввод работает да еще обработчик прерывания для него, для чего нужен такой кривой метод ? Я ни разу не видел такого - просто ставят софтовую задержку.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.