Bitbanging PIO на Coldfire/ucLinux
Вот проблема: мне нужно запрограммировать некоторое оборудование через 2 контакта PIO (1 такт, 1 данные). Сроки ограничения жесткие - время цикла 10 мс. Все это, конечно, пока я поддерживаю сервисы очень высокого уровня (шина CAN, TCP/IP). Нисходящий блок также ACKS, утверждая вывод PIO, настроенный как вход, высокий. Так что этот цикл должен как читать, так и писать. Мне нужно отправить 16 бит в последовательном потоке.
Есть ли установленный способ сделать это, или я должен просто заставить аппаратчиков добавить PIC или что-то подобное?
На этом этапе я бы предпочел избегать экзотики, такой как расширения RTAI. Однажды я увидел ссылку на ввод-вывод в пользовательском режиме, которая подразумевала возможный драйвер, управляемый прерываниями, но потеряла его.
Любые указатели приветствуются.
1 ответ
По моему опыту, самый простой способ - написать драйвер ядра. Разумеется, при условии, что он еще не существует - 1 такт, 1 данные звучат как i2c (хотя цикл 10 мс звучит намного медленнее, чем i2c), и уже существуют драйверы i2c с двоичными разрядами для Coldfire. Даже если это не i2c, вы можете использовать i2c-adap-mcf_gpio в качестве отправной точки.
Вам действительно повезло в том, что это цикл 10 мс - тик ядра по умолчанию равен 10 мс (и он может быть скорректирован при необходимости), так что вы должны иметь возможность использовать соответствующие функции сна ядра.
(Это все также зависит от того, какое ядро вы используете. Простой ввод данных в пользовательском режиме доступен в ядрах 2.6 довольно легко - в ядрах 2.4 есть функции, но они могут потребовать больше работы.)