2010-03-21 1 views
3

Вот проблема: мне нужно запрограммировать некоторые аппаратные средства через 2 контакта PIO (1 такт, 1 данные). Сроки ограничены - 10 мс. Все это, конечно, пока я поддерживаю очень высокий уровень услуг (CAN-шина, TCP/IP). Нижестоящий блок также ACKS, утверждая вывод PIO, сконфигурированный как вход, высокий. Таким образом, этот цикл должен считываться и записываться. Мне нужно отправить 16 бит в последовательный поток.Bitbanging a PIO on Coldfire/ucLinux

Есть ли установленный способ делать такие вещи или я просто хочу, чтобы аппаратные парни добавляли ПОС или что-то подобное.

Я бы предпочел избегать экзотики, например, расширения RTAI на этом этапе. Я однажды увидел ссылку на пользовательский режим ввода-вывода, который подразумевал возможный драйвер, управляемый прерываниями, но потерял его.

Любые указатели приветствуются.

ответ

0

Самый простой способ, по моему опыту, состоит в том, чтобы написать драйвер ядра. Разумеется, конечно, что его еще нет - 1 такт, 1 звук звучит как i2c-like (хотя звук в 10 мсек звучит намного медленнее, чем i2c), и есть бит-битные драйверы i2c для Coldfire, которые уже существуют. Даже если это не i2c, вы можете найти i2c-adap-mcf_gpio для использования в качестве отправной точки.

Вам действительно повезло, что это 10-миллисекундный цикл - по умолчанию галочка ядра составляет 10 мс (и при необходимости его можно настроить), поэтому вы должны иметь возможность использовать соответствующие функции сна для ядра.

(. Все это также зависит от того, какое ядро ​​вы используете Easy пользовательский режим I/O доступен в ядрах 2.6 довольно легко - есть особенности в ядрах 2.4, но они могут потребовать больше работы.)