2011-02-07 5 views
3

На моей плате ARMA AT91SAM9RL-EK, работающей в Linux 2.6.30 buildroot, у меня есть следующее.Встраиваемая система прерывания/аппаратная обработка из Linux

cat /proc/interrupts 
      CPU0 
    1:  6475   AIC at91_tick, rtc0, ttyS0 
10:   11   AIC mmc0 
13:   4   AIC atmel_spi.0 
18:  23533   AIC tc_clkevt 
20:   0   AIC atmel_tsadcc 
22:   0   AIC atmel_usba_udc 
23:   0   AIC atmel_lcdfb 
24:   0   AIC AC97C 
40:   1  GPIO atmel_usba_udc 
47:   0  GPIO mmc0 
64:   6  GPIO Right Click 
65:   10  GPIO Left Click 

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

Где я могу найти обработчики прерываний или драйверы (или исходные файлы для них) для кнопок?

Или я могу написать свои собственные драйверы и зарегистрировать их (пока я в пользовательском пространстве) для кнопок и как?

Это некоторые данные из досок руководства о PIO

IO... Per.... Application Usage............................................ Pow. by 
PB0 TXD3 USER’S PUSH BUTTON 1 PB0 as LEFT CLICK VDDIOP 
PB1 RXD3 USER’S PUSH BUTTON 2 PB1 as RIGHT CLICK VDDIOP 
+0

Немного больше информации было бы оценено. В другом комментарии вы указываете, что «кнопки работают нормально». Скорее всего, GPIO уже зарегистрированы как устройство ввода, для них есть пользовательский драйвер или состояние (и запуск по краю) доступно для пользовательского пространства через gpiolib (/ sys/class/gpio). – kauppi

+0

на fs, gpio-ключи расположены в/sys/bus/platform/devices/leds-gpio/и sys/class/input/input0 /, но я не знаю, как связаться с ними – Gobliins

+0

'# ls input0: возможности id name подсистема ввода устройства: event0 phys uevent event0 modalias power uniq' – Gobliins

ответ

3

У меня нет конкретного ответа на ваш совет, но я могу дать вам некоторые указатели с информацией, что вам нужно.

Самый простой способ решить вашу проблему - отказаться от требования «обработчики прерываний» и просто опросить линии GPIO. Вы можете сделать это из пользовательского пространства, пока вы являетесь пользователем root. Многие среды разработки предоставляют модуль ядра, чтобы сделать это для вас, отображая результаты как запись в /dev или /proc.

Если вы собираетесь обрабатывать прерывания, вам нужно написать драйвер устройства Linux. Лучшее место для начала - это потрясающая книга драйверов устройств Linux, загружаемая по адресу http://lwn.net/Kernel/LDD3/

Драйвер GPIO очень прост и в основном состоит из вызова register_irq() и кода вашего пользовательского интерфейса. Код интерфейса пользовательского пространства будет намного больше, чем остальная часть кода, а также вызовет наибольшее количество головных болей.

+0

Thx, должны быть уже некоторые драйверы устройств, потому что кнопки работают нормально, мне нужно только их модифицировать. Я проверю URL. – Gobliins

1

У меня нет опыта работы с конкретной платой и buildroot, но может быть интересно посмотреть в gpio.txt в директории Documentation внутри дерева ядра. Существует некоторое объяснение того, как использовать GPIO из пользовательского пространства с помощью sysfs.

+0

thats, где я застрял, потому что у моего каталога sys/class/нет/subdir gpio. 'ls/sys/class: backlight graphics mem net scsi_host tty bdi ieee80211 misc rtc sound vc dma input mmc_host scsi_device spi_master vtconsole прошивки leds mtd scsi_disk spidev' – Gobliins

+0

ok я нашел/sys/bus/platform/devices/gpio-keys – Gobliins

Смежные вопросы